1// { dg-do run }
2// { dg-options "-fipa-pta -fnon-call-exceptions" }
3
4struct Mutex
5{
6  bool locked;
7  ~Mutex ()
8  {
9    if (locked)
10      throw 0;
11  }
12  void lock ()
13  {
14    locked = true;
15  }
16  void unlock ()
17  {
18    if (!locked)
19      throw 0;
20    locked = false;
21  }
22};
23
24struct lock_guard
25{
26  Mutex *m;
27  lock_guard (Mutex *m) : m(m)
28  {
29  }
30  ~lock_guard ()
31  {
32    m->unlock ();
33  }
34};
35
36int
37main ()
38{
39  Mutex m;
40  m.lock ();
41  try
42  {
43    lock_guard l (&m);
44  }
45  catch ( ...)
46  {
47    __builtin_abort ();
48  }
49  return 0;
50}
51