diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.other/empty1.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/empty1.C | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.other/empty1.C b/gcc/testsuite/g++.old-deja/g++.other/empty1.C new file mode 100644 index 000000000..47a5b7a51 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/empty1.C @@ -0,0 +1,28 @@ +// { dg-do run } +// Origin: Mark Mitchell <mark@codesourcery.com> +// This test case checks that the return value optimization works for +// empty classes. + +// PR c++/5995 + +extern "C" void abort(); +extern "C" int printf (const char *, ...); + +int i; + +struct A; + +struct A* as[10]; + +struct A { + A () { as[i++] = this; } + A (const A&) { as[i++] = this; } + ~A() { if (i == 0 || as[--i] != this) abort(); } +}; + +A f() { return A(); } + +int main () +{ + A a (f ()); +} |