// { dg-do run } // Copyright (C) 2002 Free Software Foundation // Contributed by Kriang Lerdsuwanakij // Incorrect construction and destruction of multi-dimensional // array of class. extern "C" void abort(); extern "C" int printf(const char *, ...); int count; int num; struct A { A() { if (count == num) throw ""; count++; #ifdef PRINT printf("ctor %p\n", static_cast(this)); #endif } ~A() { count--; #ifdef PRINT printf("dtor %p\n", static_cast(this)); #endif } }; struct Array { A array[2][2][2]; }; int main() { for (num = 0; num <= 8; ++num) { count = 0; try { Array A; } catch (...) { } if (count != 0) abort(); } }