blob: ee944736c7a6e3384f7b854814310ab0df525296 [file]
/* 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;
}
}
}
}