diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.other/new7.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/new7.C | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.other/new7.C b/gcc/testsuite/g++.old-deja/g++.other/new7.C new file mode 100644 index 000000000..0c0643e62 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/new7.C @@ -0,0 +1,40 @@ +// { dg-do run } +// Origin: philip_martin@ntlworld.com + +#include <new> + +extern "C" void abort(); + +bool new_flag = false; +bool delete_flag = false; + +struct X { + X() + { + throw 1; + } + void* operator new ( std::size_t n ) throw ( std::bad_alloc ) + { + new_flag = true; + return ::operator new( n ); + } + void operator delete( void* p, std::size_t n ) throw() + { + delete_flag = true; + ::operator delete( p ); + } +}; + +int +main() +{ + try + { + X* x = new X; // gcc 3.0 fails to call operator delete when X::X throws + } + catch ( ... ) + { + } + if ( ! new_flag || ! delete_flag ) + ::abort(); +} |