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