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