Home | History | Annotate | Download | only in jni
      1 // { dg-do run  }
      2 //  Copyright (C) 1999 Free Software Foundation, Inc.
      3 //  Contributed by Nathan Sidwell 21 Nov 1999 <nathan (at) 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 
     10 static bool bad = false;
     11 
     12 static int thrower ()
     13 {
     14   printf ("in %s\n", __PRETTY_FUNCTION__);
     15   throw 0;
     16   return 0;
     17 }
     18 
     19 struct X
     20 {
     21   X (int) throw (int);
     22   ~X () throw ();
     23 };
     24 
     25 X::X (int) throw (int)
     26   {printf ("in ctor X %s\n", __PRETTY_FUNCTION__); bad = true;}
     27 X::~X () throw ()
     28   {printf ("in dtor X %s\n", __PRETTY_FUNCTION__); bad = true;}
     29 
     30 struct X1 {};
     31 struct Y : X
     32 {
     33   Y() throw (int);
     34   ~Y() throw ();
     35 };
     36 Y::Y() throw (int)
     37   : X(thrower ())   // throws, so X::X is never called
     38   {printf ("in ctor Y%s\n", __PRETTY_FUNCTION__); bad = true;}
     39 Y::~Y() throw ()
     40   {printf ("in dtor Y%s\n", __PRETTY_FUNCTION__); bad = true;}
     41 
     42 int main ()
     43 {
     44   try
     45     {
     46       Y y;
     47     }
     48   catch (...)
     49     {
     50       printf ("caught\n");
     51     }
     52   return bad;
     53 }
     54