1 // { dg-do run } 2 // GROUPS passed copy-ctors 3 /* 4 5 If I compile it with cfront (AT&T C++ Translator 2.00.02 08/25/89) and run it 6 I get: 7 8 A::A() 9 A::A(const A&) 10 B::Bar() 11 A::~A() 12 A::~A() 13 14 If I compile it with g++ (gcc version 2.2.2) and run it I get: 15 16 A::A() 17 B::Bar() 18 A::~A() 19 A::~A() 20 21 */ 22 extern "C" int printf (const char *, ...); 23 extern "C" void exit (int); 24 25 int count = 0; 26 27 void die(int x)28die (int x) 29 { 30 if (x != ++count) 31 { 32 printf ("FAIL\n"); 33 exit (1); 34 } 35 } 36 37 38 class A { 39 public: A()40 A() { die (1); } A(const A &)41 A(const A&) { die (2); } ~A()42 ~A() { count++; if (count != 4 && count != 5) die (-1); } 43 }; 44 45 class B : public A { 46 public: Bar()47 void Bar() { die (3); } 48 }; 49 Foo(B b)50void Foo(B b) { b.Bar(); } 51 52 int main()53main() 54 { 55 B b; 56 Foo(b); 57 58 printf ("PASS\n"); 59 } 60