1// { dg-do run  }
2// Bug: obj gets destroyed twice because the fixups for the return are
3// inside its cleanup region.
4
5#ifdef __GXX_EXPERIMENTAL_CXX0X__
6#define NOEXCEPT_FALSE noexcept (false)
7#else
8#define NOEXCEPT_FALSE
9#endif
10
11extern "C" int printf (const char *, ...);
12
13int d;
14
15struct myExc { };
16
17struct myExcRaiser {
18  ~myExcRaiser() NOEXCEPT_FALSE { throw myExc(); }
19};
20
21struct stackObj {
22  ~stackObj() { ++d; printf ("stackObj::~stackObj()\n"); }
23};
24
25int test()
26{
27  myExcRaiser rais;
28  stackObj obj;
29  return 0;
30}
31
32int main()
33{
34  try {
35    test();
36  }
37  catch (myExc &) {
38    return d != 1;
39  }
40  return 1;
41}
42