libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / gnu99-named-loops-3.c
blobee944736c7a6e3384f7b854814310ab0df525296
1 /* N3355 - Named loops. */
2 /* { dg-do compile } */
3 /* { dg-options "-std=gnu99" } */
5 void
6 foo (int x)
8 for (int i = 0; i < 16; ++i)
10 int k;
11 label1: /* { dg-message "loop name defined here" } */
12 for (int j = ({ if (x == 0) break label1; 0; }); j < 16; ++j) /* { dg-error "'break' statement operand 'label1' refers to a loop outside of its body" } */
14 label2: /* { dg-message "loop name defined here" } */
15 for (int j = ({ if (x == 1) continue label2; 0; }); j < 16; ++j) /* { dg-error "'continue' statement operand 'label2' refers to a loop outside of its body" } */
17 label3: /* { dg-message "loop name defined here" } */
18 for (int j = 0; j < ({ if (x == 2) break label3; 16; }); ++j) /* { dg-error "'break' statement operand 'label3' refers to a loop outside of its body" } */
20 label4: /* { dg-message "loop name defined here" } */
21 for (int j = 0; j < ({ if (x == 3) continue label4; 16; }); ++j) /* { dg-error "'continue' statement operand 'label4' refers to a loop outside of its body" } */
23 label5: /* { dg-message "loop name defined here" } */
24 for (int j = 0; j < 16; j += ({ if (x == 4) break label5; 1; })) /* { dg-error "'break' statement operand 'label5' refers to a loop outside of its body" } */
26 label6: /* { dg-message "loop name defined here" } */
27 for (int j = 0; j < 16; j += ({ if (x == 5) continue label6; 1; })) /* { dg-error "'continue' statement operand 'label6' refers to a loop outside of its body" } */
29 k = 0;
30 label7: /* { dg-message "loop name defined here" } */
31 while (k < ({ if (x == 6) break label7; 16; })) /* { dg-error "'break' statement operand 'label7' refers to a loop outside of its body" } */
32 ++k;
33 k = 0;
34 label8: /* { dg-message "loop name defined here" } */
35 while (k < ({ if (x == 7) continue label8; 16; })) /* { dg-error "'continue' statement operand 'label8' refers to a loop outside of its body" } */
36 ++k;
37 k = 0;
38 label9:
40 ++k;
41 while (k <= ({ if (x == 8) break label9; 16; })); /* { dg-error "'break' statement operand 'label9' does not refer to a named loop or 'switch'" } */
42 k = 0;
43 label10:
45 ++k;
46 while (k <= ({ if (x == 9) continue label10; 16; })); /* { dg-error "'continue' statement operand 'label10' does not refer to a named loop" } */
47 label11: /* { dg-message "'switch' name defined here" } */
48 switch (x + ({ if (x == 10) break label11; 0; })) /* { dg-error "'break' statement operand 'label11' refers to a 'switch' outside of its body" } */
50 case 0:
51 break;
54 label12:
55 label13:
56 label14:
57 for (int i = 0; i < 32; ++i)
59 label15:
60 switch (i)
62 label16:
63 case 0:
64 label17:
65 label18:
66 label19:
67 label20:
68 label21:
69 label22:
70 label23:
71 label24:
72 label25:
73 label26:
74 label27:
75 label28:
76 label29:
77 label30:
78 for (int j = 0; j < 32; ++j)
80 if (j == 31)
81 continue label14;
82 else if (j == 30)
83 break label15;
84 void bar (void)
86 label31:
87 for (int k = 0; k < 32; ++k)
88 if (k == 31)
89 continue label31;
90 else if (k == 30)
91 break label31;
92 else if (k == 29)
93 continue label22; /* { dg-error "'continue' statement operand 'label22' does not refer to a named loop; did you mean 'label31'\\\?" } */
94 else if (k == 28)
95 break label20; /* { dg-error "'break' statement operand 'label20' does not refer to a named loop or 'switch'; did you mean 'label31'\\\?" } */
96 else if (k == 27)
97 break label15; /* { dg-error "'break' statement operand 'label15' does not refer to a named loop or 'switch'; did you mean 'label31'\\\?" } */
98 else if (k == 26)
99 continue label13; /* { dg-error "'continue' statement operand 'label13' does not refer to a named loop; did you mean 'label31'\\\?" } */
100 else if (k == 25)
101 break label12; /* { dg-error "'break' statement operand 'label12' does not refer to a named loop or 'switch'; did you mean 'label31'\\\?" } */
103 bar ();
104 if (j == 29)
105 continue label22;
106 else if (j == 28)
107 break label20;
108 else if (j == 27)
109 break label15;
110 else if (j == 26)
111 continue label13;
112 else if (j == 25)
113 break label12;