diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.jason/inline3.C')
-rwxr-xr-x | gcc/testsuite/g++.old-deja/g++.jason/inline3.C | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/inline3.C b/gcc/testsuite/g++.old-deja/g++.jason/inline3.C new file mode 100755 index 0000000..00d57eb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/inline3.C @@ -0,0 +1,42 @@ +// Testcase for order of destruction. +// Special g++ Options: -O2 + +extern "C" int printf( char const*, ... ); +int c; +int r; + +struct B { + B(); + B( B const& ); + ~B(); +}; + +struct A { + A(); + A( A const& ); + ~A(); + operator B (); +}; + +inline A::operator B () { printf( "operator B ()\n"); return B(); } + +A f(); +void g( B const& ); + +int +main() +{ + g( f() ); + return r; +} + +B::B() { printf( "B::B()\n" ); if (++c != 2) r = 1; } +B::B( B const& ) { printf( "B::B( B const& )\n" ); r = 1; } +B::~B() { printf( "B::~B()\n" ); if (--c != 1) r = 1; } + +A::A() { printf( "A::A()\n" ); if (++c != 1) r = 1; } +A::A( A const& ) { printf( "A::A( A const& )\n" ); r = 1; } +A::~A() { printf( "A::~A()\n" ); if (--c != 0) r = 1; } + +A f() { printf( "f()\n"); return A(); } +void g( B const& ) { printf( "g()\n"); } |