1 /* PR tree-optimization/29484 */
2 /* { dg-require-effective-target label_values } */
3 /* { dg-require-effective-target indirect_jumps } */
4 
5 extern void abort (void);
6 
7 void *__attribute__((noinline))
baz(void ** lab)8 baz (void **lab)
9 {
10   asm volatile ("" : "+r" (lab));
11   return *lab;
12 }
13 
14 static inline
bar(void)15 int bar (void)
16 {
17   static void *b[] = { &&addr };
18   void *p = baz (b);
19   goto *p;
20 addr:
21   return 17;
22 }
23 
24 int __attribute__((noinline))
f1(void)25 f1 (void)
26 {
27   return bar ();
28 }
29 
30 int __attribute__((noinline))
f2(void)31 f2 (void)
32 {
33   return bar ();
34 }
35 
36 int
main(void)37 main (void)
38 {
39   if (f1 () != 17 || f1 () != 17 || f2 () != 17 || f2 () != 17)
40     abort ();
41   return 0;
42 }
43