1// Bug: we were removing the p = q assignment in dce, and then reinserting
2// it *after* the try/catch in out-of-ssa.  Oops.
3
4// testcase reduced from libjava/interpret.cc.
5
6// { dg-do run }
7// { dg-options "-O2" }
8
9extern "C" int printf (const char *, ...);
10
11bool b;
12
13int main()
14{
15  __label__ one, two, done;
16  void *labs[] = { &&one, &&two, &&done };
17  const void **q = (const void **)labs;
18  const void **p = q;
19
20  try
21    {
22    one:
23      printf ("one!\n");
24      if (b)
25	throw 42;
26      goto **p++;
27
28    two:
29      printf ("two!\n");
30      goto **p++;
31
32    done:
33      printf ("done!\n");
34    }
35  catch (int)
36    {
37      printf ("caught!\n");
38    }
39}
40