54 lines
1003 B
C
54 lines
1003 B
C
// { dg-do run }
|
|
// Copyright (C) 1999 Free Software Foundation, Inc.
|
|
// Contributed by Nathan Sidwell 21 Nov 1999 <nathan@acm.org>
|
|
|
|
// make sure we don't call base dtors, if we failed to call the
|
|
// base ctor due to exception throwing
|
|
|
|
#include <stdio.h>
|
|
|
|
static bool bad = false;
|
|
|
|
static int thrower ()
|
|
{
|
|
printf ("in %s\n", __PRETTY_FUNCTION__);
|
|
throw 0;
|
|
return 0;
|
|
}
|
|
|
|
struct X
|
|
{
|
|
X (int) throw (int);
|
|
~X () throw ();
|
|
};
|
|
|
|
X::X (int) throw (int)
|
|
{printf ("in ctor X %s\n", __PRETTY_FUNCTION__); bad = true;}
|
|
X::~X () throw ()
|
|
{printf ("in dtor X %s\n", __PRETTY_FUNCTION__); bad = true;}
|
|
|
|
struct X1 {};
|
|
struct Y : X
|
|
{
|
|
Y() throw (int);
|
|
~Y() throw ();
|
|
};
|
|
Y::Y() throw (int)
|
|
: X(thrower ()) // throws, so X::X is never called
|
|
{printf ("in ctor Y%s\n", __PRETTY_FUNCTION__); bad = true;}
|
|
Y::~Y() throw ()
|
|
{printf ("in dtor Y%s\n", __PRETTY_FUNCTION__); bad = true;}
|
|
|
|
int main ()
|
|
{
|
|
try
|
|
{
|
|
Y y;
|
|
}
|
|
catch (...)
|
|
{
|
|
printf ("caught\n");
|
|
}
|
|
return bad;
|
|
}
|