blob: 9593f670709efa4e878ce77a453a1cd880f06327 [file] [log] [blame]
/* PR c/7652 */
/* { dg-do compile } */
/* { dg-options "-Wimplicit-fallthrough" } */
extern void bar (int);
/* Test nested scopes. */
void
f (int i)
{
switch (i)
{
case 1:
{
int j;
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 10; /* { dg-warning "statement may fall through" } */
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int k = 9;
k++;
{
int j = 10;
j++; /* { dg-warning "statement may fall through" } */
}
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int k = 9;
k++;
{
int j = 10;
j++;
{
bar (1); /* { dg-warning "statement may fall through" } */
}
}
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
__attribute__((fallthrough));
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
{
int k = j + 5;
bar (k);
__attribute__((fallthrough));
}
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
return;
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
goto L1;
}
L1:
case 2:
bar (99);
}
switch (i)
{
case 1:
{ /* { dg-warning "statement may fall through" "" { target c } } */
int j = 0;
bar (j);
if (j == 8)
return;
} /* { dg-warning "statement may fall through" "" { target c++ } } */
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
return;
else
return;
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{ /* { dg-warning "statement may fall through" "" { target c } } */
int j = 0;
bar (j);
if (j == 8)
bar (1);
else
return;
} /* { dg-warning "statement may fall through" "" { target c++ } } */
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
return;
else
bar (2); /* { dg-warning "statement may fall through" } */
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{ /* { dg-warning "statement may fall through" "" { target c } } */
int j = 0;
bar (j);
if (j == 8)
bar (1);
else
bar (2);
} /* { dg-warning "statement may fall through" "" { target c++ } } */
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
return;
}
break;
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
return;
else
return;
}
break;
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
bar (1);
else
return;
}
break;
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
return;
else
bar (2);
}
break;
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
bar (1);
else
bar (2);
}
break;
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 9;
while (1);
}
case 2:
bar (99);
}
switch (i)
{
case 1:
{ /* { dg-warning "statement may fall through" "" { target c } } */
int j = 9;
switch (j);
} /* { dg-warning "statement may fall through" "" { target c++ } } */
case 2:
bar (99);
}
switch (i)
{
case 1:
{
int j = 0;
bar (j);
if (j == 8)
bar (1);
else
bar (2);
__attribute__((fallthrough));
}
case 2:
bar (99);
}
}