mirror of git://gcc.gnu.org/git/gcc.git
306 lines
3.7 KiB
C
306 lines
3.7 KiB
C
/* 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);
|
|
}
|
|
}
|