blob: c611a8f8e7409caa37c5697695d5874afcf4fac1 [file] [log] [blame]
/* Portable assumptions */
/* { dg-do compile } */
/* { dg-options "-std=c2x" } */
void
foo (int x)
{
if (x == 1)
goto l1; /* { dg-error "jump into statement expression" } */
else if (x == 2)
goto l2; /* { dg-error "jump into statement expression" } */
else if (x == 3)
goto l3; /* { dg-error "jump into statement expression" } */
[[gnu::assume (({ l0:; if (x == 0) goto l0; 1; }))]];
[[gnu::assume (({ if (x == 0) __builtin_abort (); 1; }))]];
[[gnu::assume (({ l1:; 1; }))]]; /* { dg-message "label 'l1' defined here" } */
[[gnu::assume (({ l2:; 1; }))]]; /* { dg-message "label 'l2' defined here" } */
__attribute__((assume (({ l3:; 1; })))); /* { dg-message "label 'l3' defined here" } */
[[gnu::assume (({ l4:; 1; }))]]; /* { dg-message "label 'l4' defined here" } */
[[gnu::assume (({ l5:; 1; }))]]; /* { dg-message "label 'l5' defined here" } */
__attribute__((assume (({ l6:; 1; })))); /* { dg-message "label 'l6' defined here" } */
switch (x) /* { dg-message "switch starts here" } */
{
case 7:
[[gnu::assume (({ case 8:; 1; }))]]; /* { dg-error "switch jumps into statement expression" } */
__attribute__((assume (({ default:; 1; })))); /* { dg-error "switch jumps into statement expression" } */
break;
}
if (x == 4)
goto l4; /* { dg-error "jump into statement expression" } */
else if (x == 5)
goto l5; /* { dg-error "jump into statement expression" } */
else if (x == 6)
goto l6; /* { dg-error "jump into statement expression" } */
}