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