libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / pr90553.c
blob06c9cbf8ee2d497265831bfd7ccdb2c742abe684
1 /* { dg-do run } */
3 __attribute__((__noipa__))
4 void f1(int x, void (*p1 []) (int, int))
6 int i;
7 for (i = 0; i < x; i++)
8 p1[i](42, 666);
11 int z1_called = 0;
12 int w1_called = 0;
14 __attribute__((__noipa__))
15 void z1(int a, int b)
17 if (w1_called || z1_called)
18 __builtin_abort();
19 z1_called++;
22 __attribute__((__noipa__))
23 void w1(int a, int b)
25 if (w1_called || !z1_called)
26 __builtin_abort();
27 w1_called++;
30 int z2_called = 0;
31 int w2_called = 0;
33 __attribute__((__noipa__))
34 void z2(void)
36 if (w2_called || z2_called)
37 __builtin_abort();
38 z2_called++;
41 __attribute__((__noipa__))
42 void w2(void)
44 if (w2_called || !z2_called)
45 __builtin_abort();
46 w2_called++;
49 void (*p2 []) () = { w2, z2 };
51 __attribute__((__noipa__))
52 void f2(int x)
54 void (**q) (void) = p2 + x;
55 int i;
56 for (i = 0; i < x; i++)
57 (*(--q))();
60 __attribute__((__noipa__))
61 void f3(int x, int (*p3 []) (int))
63 int i;
64 int next = x;
65 for (i = 0; i < x; i++)
66 next = p3[i](next);
69 int z3_called = 0;
70 int w3_called = 0;
72 __attribute__((__noipa__))
73 int z3(int a)
75 if (w3_called || z3_called || a != 2)
76 __builtin_abort();
77 z3_called++;
78 return 42;
81 __attribute__((__noipa__))
82 int w3(int a)
84 if (w3_called || !z3_called || a != 42)
85 __builtin_abort();
86 w3_called++;
87 return 4096;
90 int (*p4 []) (int) = { z3, w3 };
92 __attribute__((__noipa__))
93 void f4(int x)
95 int (**q) (int) = p4;
96 int (**r) (int) = p4 + x;
98 int next = x;
99 for (; q < r; q++)
100 next = (*q)(next);
103 int main(void)
105 static int (*p3 []) (int) = { z3, w3 };
107 static void (*p1 []) (int, int) = { z1, w1 };
109 f1(2, p1);
110 if (z1_called != 1 || w1_called != 1)
111 __builtin_abort();
113 f2(2);
114 if (z2_called != 1 || w2_called != 1)
115 __builtin_abort();
117 f3(2, p3);
118 if (z3_called != 1 || w3_called != 1)
119 __builtin_abort();
121 z3_called = 0;
122 w3_called = 0;
123 f4(2);
124 if (z3_called != 1 || w3_called != 1)
125 __builtin_abort();
127 __builtin_exit(0);