| // { dg-do run } |
| // GROUPS passed copy-ctors |
| /* |
| |
| If I compile it with cfront (AT&T C++ Translator 2.00.02 08/25/89) and run it |
| I get: |
| |
| A::A() |
| A::A(const A&) |
| B::Bar() |
| A::~A() |
| A::~A() |
| |
| If I compile it with g++ (gcc version 2.2.2) and run it I get: |
| |
| A::A() |
| B::Bar() |
| A::~A() |
| A::~A() |
| |
| */ |
| extern "C" int printf (const char *, ...); |
| extern "C" void exit (int); |
| |
| int count = 0; |
| |
| void |
| die (int x) |
| { |
| if (x != ++count) |
| { |
| printf ("FAIL\n"); |
| exit (1); |
| } |
| } |
| |
| |
| class A { |
| public: |
| A() { die (1); } |
| A(const A&) { die (2); } |
| ~A() { count++; if (count != 4 && count != 5) die (-1); } |
| }; |
| |
| class B : public A { |
| public: |
| void Bar() { die (3); } |
| }; |
| |
| void Foo(B b) { b.Bar(); } |
| |
| int |
| main() |
| { |
| B b; |
| Foo(b); |
| |
| printf ("PASS\n"); |
| } |