72 lines
728 B
C
72 lines
728 B
C
// Test that we've scoped the destructor properly for variables declared
|
|
// in a conditional.
|
|
// { dg-do run }
|
|
|
|
extern "C" void abort ();
|
|
|
|
class C
|
|
{
|
|
bool live;
|
|
public:
|
|
C();
|
|
C(const C &);
|
|
~C ();
|
|
operator bool() const;
|
|
};
|
|
|
|
void f1 ()
|
|
{
|
|
while (C br = C()) abort ();
|
|
}
|
|
|
|
void f2 ()
|
|
{
|
|
for (; C br = C(); ) abort ();
|
|
}
|
|
|
|
void f3 ()
|
|
{
|
|
if (C br = C()) abort ();
|
|
}
|
|
|
|
void f4 ()
|
|
{
|
|
switch (C br = C())
|
|
{
|
|
default:
|
|
abort ();
|
|
case false:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
f1(); f2(); f3(); f4();
|
|
return 0;
|
|
}
|
|
|
|
C::C()
|
|
{
|
|
live = true;
|
|
}
|
|
|
|
C::C(const C &o)
|
|
{
|
|
if (!o.live)
|
|
abort ();
|
|
live = true;
|
|
}
|
|
|
|
C::~C()
|
|
{
|
|
live = false;
|
|
}
|
|
|
|
C::operator bool() const
|
|
{
|
|
if (!live)
|
|
abort ();
|
|
return false;
|
|
}
|