1/* { dg-do run } */
2/* { dg-options "-O2" } */
3
4extern void abort (void);
5
6int global;
7
8static foo(void) __attribute__((noinline));
9
10static foo(void)
11{
12  global = 1;
13}
14
15static bar(void)
16{
17  foo ();
18  global = 0;
19}
20
21int execute(int cmd)
22{
23  __label__ start;
24
25  void raise(void)
26  {
27    goto start;
28  }
29
30  int last;
31
32  bar ();
33
34  last = 0;
35
36start:
37
38  if (last == 0)
39    while (1)
40      {
41        last = 1;
42        raise ();
43      }
44
45  if (last == 0)
46    return 0;
47  else
48    return cmd;
49}
50
51int main(void)
52{
53  if (execute (1) == 0)
54    abort ();
55
56  return 0;
57}
58