131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// { dg-do run  }
231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// Copyright (C) 1999 Free Software Foundation
331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// Test whether dtors of vbases are called on throw within new[].
731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh// Variant of delete2.C.
831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehextern "C" void abort();
1031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehextern "C" void exit(int);
1131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
1231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehstruct Foo {
1331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  static bool first;
1431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
1531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  Foo() {
1631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh    if (first)
1731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh      first = false;
1831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh    else
1931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh      throw first;
2031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  }
2131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
2231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  ~Foo() {
2331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh    exit(0);
2431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  }
2531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh};
2631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
2731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehbool Foo::first = true;
2831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
2931ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehstruct Bar : virtual Foo {
3031ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh};
3131ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh
3231ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsiehint main() {
3331ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  try {
3431ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh    delete [] new Bar[2];
3531ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  } catch (...) {
3631ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  }
3731ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh  abort();
3831ad4de047c50cddfc3072be3a82232c53f1ca2dAndrew Hsieh}
39