45 lines
665 B
C
45 lines
665 B
C
// ehopt was only copying one statement from the cleanup of the B temporary
|
|
// into the following try block, so we lost its destructor call.
|
|
|
|
// { dg-do run }
|
|
|
|
template <class T, class U>
|
|
class A;
|
|
|
|
bool b;
|
|
int count;
|
|
|
|
template <>
|
|
class A<int, int>
|
|
{
|
|
public:
|
|
A(int) { ++count; if (b) throw 1; }
|
|
A(const A&) { ++count; if (b) throw 1; }
|
|
~A() { --count; if (b) throw 1; }
|
|
};
|
|
|
|
typedef A<int, int> B;
|
|
|
|
template <>
|
|
class A<void *, void *>
|
|
{
|
|
public:
|
|
A() { if (b) throw 1; }
|
|
A(const B&) { if (b) throw 1; }
|
|
~A() { if (b) throw 1; }
|
|
};
|
|
|
|
typedef A<void *, void *> C;
|
|
|
|
void f() { if (b) throw 1; }
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
{
|
|
C a(1);
|
|
f();
|
|
}
|
|
return count;
|
|
}
|