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