diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/init/call1.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/init/call1.C | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/call1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/call1.C new file mode 100644 index 000000000..d44b6dddc --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/init/call1.C @@ -0,0 +1,35 @@ +// Bug c++/16115 +// { dg-options "-O2" } + +extern "C" void abort(); + +int count = 0; + +struct T { + T() { count++; } + T(const T&) { count++; } + ~T() { if (count==0) abort(); --count; } +}; + +struct auto_ptr { + T* p; + + auto_ptr(T* __p) : p(__p) { } + ~auto_ptr() { delete p; } + + T* release() { + T* t = p; + p = 0; + return t; + } +}; + +void destroy (auto_ptr a) { + delete a.release(); +} + + +int main () +{ + destroy (new T); +} |