41 lines
624 B
C
41 lines
624 B
C
// { 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();
|
|
}
|