1 /* PR tree-optimization/59920 */ 2 /* { dg-do compile } */ 3 /* { dg-options "-O0" } */ 4 /* { dg-require-effective-target label_values } */ 5 /* { dg-require-effective-target indirect_jumps } */ 6 7 void *bar (void **); 8 void *baz (int, void **); 9 10 #define A(n) \ 11 { __label__ l1_##n, l2_##n, l3_##n; \ 12 static void *a[] = { &&l1_##n, &&l2_##n, &&l3_##n };\ 13 void *b = bar (a); \ 14 goto *b; \ 15 l1_##n: \ 16 b = baz (1, a); \ 17 goto *b; \ 18 l2_##n: \ 19 b = baz (2, a); \ 20 goto *b; \ 21 l3_##n:; \ 22 } 23 #define B(n) A(n##0) A(n##1) A(n##2) A(n##3) A(n##4) \ 24 A(n##5) A(n##6) A(n##7) A(n##8) A(n##9) 25 #define C(n) B(n##0) B(n##1) B(n##2) B(n##3) B(n##4) \ 26 B(n##5) B(n##6) B(n##7) B(n##8) B(n##9) 27 28 void foo(void)29foo (void) 30 { 31 C(1) 32 } 33