// { dg-do run { xfail { { ! cxa_atexit } && { ! *-*-solaris2* } } } }
// { dg-require-effective-target cxa_atexit }
#include <stdlib.h>

#define assert(x) do { if (! (x)) abort(); } while (0)

int count = 0;

class A
{
public:
	explicit A(int i);
	~A();

	int i;

	A(const A&);
	A& operator=(const A&);
};

A::A(int i_)
	: i(i_)
{
}

A::~A()
{
	assert(++count == i);
	i = -1;
}

extern "C" {

void one()
{
	static bool second_time;
	if (second_time)
		assert(++count == 9);
	else
	{
		assert(++count == 1);
		second_time = true;
	}
	static A a(10);
	assert(a.i == 10);
}

void two()
{
	assert(++count == 7);
	static A a(8);
	assert(a.i == 8);
}

void three()
{
	assert(++count == 2);
	static A a(6);
	assert(a.i == 6);
}

void five()
{
	assert(++count == 4);
	static A a(5);
	assert(a.i == 5);
}

void four()
{
	assert(++count == 3);
	atexit(five);
}

}

A zero(11);

int main()
{
	one();
	atexit(one);
	atexit(two);
	three();
	atexit(four);
}
