OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.eh/] [new2.C] - Diff between revs 305 and 338

Only display areas with differences | Details | Blame | View Log

Rev 305 Rev 338
// { dg-do run  }
// { dg-do run  }
// Test that a throw in B's constructor destroys the A and frees the memory.
// Test that a throw in B's constructor destroys the A and frees the memory.
#include 
#include 
#include 
#include 
#include 
#include 
struct A {
struct A {
  A();
  A();
  ~A();
  ~A();
};
};
struct B {
struct B {
  B (A);
  B (A);
};
};
void foo (B*);
void foo (B*);
int newed, created;
int newed, created;
int main ()
int main ()
{
{
  newed = 0; // The libraries might call new before main starts.
  newed = 0; // The libraries might call new before main starts.
  try {
  try {
    foo (new B (A ()));
    foo (new B (A ()));
  } catch (...) { }
  } catch (...) { }
  return !(!newed && !created);
  return !(!newed && !created);
}
}
A::A() { created = 1; }
A::A() { created = 1; }
A::~A() { created = 0; }
A::~A() { created = 0; }
B::B(A) { throw 1; }
B::B(A) { throw 1; }
void foo (B*) { }
void foo (B*) { }
void* operator new (size_t size) throw (std::bad_alloc)
void* operator new (size_t size) throw (std::bad_alloc)
{
{
  ++newed;
  ++newed;
  return (void *) std::malloc (size);
  return (void *) std::malloc (size);
}
}
void operator delete (void *p) throw ()
void operator delete (void *p) throw ()
{
{
  --newed;
  --newed;
  free (p);
  free (p);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.