Home | History | Annotate | Download | only in jni
      1 // { dg-do run  }
      2 // check cleanup of partial array objects
      3 extern "C" void abort (void);
      4 extern "C" void exit (int);
      5 
      6 int ctor = 0;
      7 int dtor = 0;
      8 
      9 int cnt = 1;
     10 
     11 struct A {
     12 	int x;
     13 	A();
     14 	A(const A&);
     15 	~A();
     16 };
     17 
     18 A::A()
     19 {
     20 	if (cnt == 10)
     21 		throw 57;
     22 	x = cnt++;
     23 	ctor++;
     24 }
     25 
     26 A::A(const A&)
     27 {
     28 	if (cnt == 10)
     29 		throw 57;
     30 	x = cnt++;
     31 	ctor++;
     32 }
     33 
     34 A::~A()
     35 {
     36 	if (x + 1 != cnt--)
     37 		abort();
     38 	dtor++;
     39 }
     40 
     41 void f()
     42 {
     43 	A a[] = {A(), A(), A(), A(), A(), A(), A(), A(), A(), A(), A(), A()};
     44 
     45 	throw -1066;
     46 }
     47 
     48 int
     49 main()
     50 {
     51 	int flag;
     52 
     53 	flag = 0;
     54 	try {
     55 		f();
     56 	}
     57 	catch (int) {
     58 		flag = 1;
     59 	}
     60 	if (!flag)
     61 		abort();
     62 	if (ctor != 9)
     63 		abort();
     64 	if (dtor != 9)
     65 		abort();
     66 
     67 	exit(0);
     68 }
     69