1// { dg-do run } 2// Copyright (C) 1999 Free Software Foundation, Inc. 3// Contributed by Nathan Sidwell 21 Nov 1999 <nathan@acm.org> 4 5// make sure we don't call base dtors, if we failed to call the 6// base ctor due to exception throwing 7 8#include <stdio.h> 9 10static bool bad = false; 11 12static int thrower () 13{ 14 printf ("in %s\n", __PRETTY_FUNCTION__); 15 throw 0; 16 return 0; 17} 18 19struct X 20{ 21 X (int) throw (int); 22 ~X () throw (); 23}; 24 25X::X (int) throw (int) 26 {printf ("in ctor X %s\n", __PRETTY_FUNCTION__); bad = true;} 27X::~X () throw () 28 {printf ("in dtor X %s\n", __PRETTY_FUNCTION__); bad = true;} 29 30struct X1 {}; 31struct Y : X 32{ 33 Y() throw (int); 34 ~Y() throw (); 35}; 36Y::Y() throw (int) 37 : X(thrower ()) // throws, so X::X is never called 38 {printf ("in ctor Y%s\n", __PRETTY_FUNCTION__); bad = true;} 39Y::~Y() throw () 40 {printf ("in dtor Y%s\n", __PRETTY_FUNCTION__); bad = true;} 41 42int main () 43{ 44 try 45 { 46 Y y; 47 } 48 catch (...) 49 { 50 printf ("caught\n"); 51 } 52 return bad; 53} 54