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