URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 149 |
Rev 154 |
// { dg-do run }
|
// { dg-do run }
|
// Origin: philip_martin@ntlworld.com
|
// Origin: philip_martin@ntlworld.com
|
|
|
#include
|
#include
|
|
|
extern "C" void abort();
|
extern "C" void abort();
|
|
|
bool new_flag = false;
|
bool new_flag = false;
|
bool delete_flag = false;
|
bool delete_flag = false;
|
|
|
struct X {
|
struct X {
|
X()
|
X()
|
{
|
{
|
throw 1;
|
throw 1;
|
}
|
}
|
void* operator new ( std::size_t n ) throw ( std::bad_alloc )
|
void* operator new ( std::size_t n ) throw ( std::bad_alloc )
|
{
|
{
|
new_flag = true;
|
new_flag = true;
|
return ::operator new( n );
|
return ::operator new( n );
|
}
|
}
|
void operator delete( void* p, std::size_t n ) throw()
|
void operator delete( void* p, std::size_t n ) throw()
|
{
|
{
|
delete_flag = true;
|
delete_flag = true;
|
::operator delete( p );
|
::operator delete( p );
|
}
|
}
|
};
|
};
|
|
|
int
|
int
|
main()
|
main()
|
{
|
{
|
try
|
try
|
{
|
{
|
X* x = new X; // gcc 3.0 fails to call operator delete when X::X throws
|
X* x = new X; // gcc 3.0 fails to call operator delete when X::X throws
|
}
|
}
|
catch ( ... )
|
catch ( ... )
|
{
|
{
|
}
|
}
|
if ( ! new_flag || ! delete_flag )
|
if ( ! new_flag || ! delete_flag )
|
::abort();
|
::abort();
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.