11539Srgrimes// { dg-do run }
21539Srgrimes// Copyright (C) 2002 Free Software Foundation
31539Srgrimes// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
41539Srgrimes
51539Srgrimes// Incorrect construction and destruction of multi-dimensional
61539Srgrimes// array of class.
71539Srgrimes
81539Srgrimesextern "C" void abort();
91539Srgrimesextern "C" int printf(const char *, ...);
101539Srgrimes
111539Srgrimesint count;
121539Srgrimesint num;
131539Srgrimes
141539Srgrimesstruct A
151539Srgrimes{
161539Srgrimes	A()
171539Srgrimes	{
181539Srgrimes		if (count == num)
191539Srgrimes			throw "";
201539Srgrimes		count++;
211539Srgrimes#ifdef PRINT
221539Srgrimes		printf("ctor %p\n", static_cast<void *>(this));
231539Srgrimes#endif
241539Srgrimes	}
251539Srgrimes
261539Srgrimes	~A()
271539Srgrimes	{
281539Srgrimes		count--;
291539Srgrimes#ifdef PRINT
301539Srgrimes		printf("dtor %p\n", static_cast<void *>(this));
311539Srgrimes#endif
321539Srgrimes	}
331539Srgrimes};
348858Srgrimes
351539Srgrimesstruct Array
361539Srgrimes{
378858Srgrimes	A array[2][2][2];
381539Srgrimes};
391539Srgrimes
401539Srgrimesint main()
411539Srgrimes{
421539Srgrimes	for (num = 0; num <= 8; ++num) {
431539Srgrimes		count = 0;
448858Srgrimes		try {
451539Srgrimes			Array A;
461539Srgrimes		}
471539Srgrimes		catch (...) {
481539Srgrimes		}
491539Srgrimes		if (count != 0)
501539Srgrimes			abort();
511539Srgrimes	}
521539Srgrimes}
531539Srgrimes