view gcc/testsuite/g++.old-deja/g++.robertl/eh990323-5.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
line wrap: on
line source

// { dg-do run  }
// check cleanup of partial array objects
extern "C" void abort (void);
extern "C" void exit (int);

int ctor = 0;
int dtor = 0;

int cnt = 1;

struct A {
	int x;
	A();
	A(const A&);
	~A();
};

A::A()
{
	if (cnt == 10)
		throw 57;
	x = cnt++;
	ctor++;
}

A::A(const A&)
{
	if (cnt == 10)
		throw 57;
	x = cnt++;
	ctor++;
}

A::~A()
{
	if (x + 1 != cnt--)
		abort();
	dtor++;
}

void f()
{
	A a[] = {A(), A(), A(), A(), A(), A(), A(), A(), A(), A(), A(), A()};

	throw -1066;
}

int
main()
{
	int flag;

	flag = 0;
	try {
		f();
	}
	catch (int) {
		flag = 1;
	}
	if (!flag)
		abort();
	if (ctor != 9)
		abort();
	if (dtor != 9)
		abort();

	exit(0);
}