diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/init/array5.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/init/array5.C | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array5.C new file mode 100644 index 000000000..aeacb31cf --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array5.C @@ -0,0 +1,52 @@ +// { dg-do run } +// Copyright (C) 2002 Free Software Foundation +// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + +// 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<void *>(this)); +#endif + } + + ~A() + { + count--; +#ifdef PRINT + printf("dtor %p\n", static_cast<void *>(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(); + } +} |