mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 05:30:25 +08:00
re PR c/79152 (-Wimplicit-fallthrough false positive triggered by goto statements)
PR c/79152 * gimplify.c (should_warn_for_implicit_fallthrough): Handle consecutive non-case labels. * c-c++-common/Wimplicit-fallthrough-35.c: New test. From-SVN: r244726
This commit is contained in:
parent
776d540459
commit
d2aadab150
@ -1,3 +1,9 @@
|
||||
2017-01-20 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/79152
|
||||
* gimplify.c (should_warn_for_implicit_fallthrough): Handle consecutive
|
||||
non-case labels.
|
||||
|
||||
2017-01-20 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
* omp-expand.c (expand_omp_simd): Clear PROP_gimple_lomp_dev regardless
|
||||
|
@ -1985,7 +1985,7 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label)
|
||||
if (FALLTHROUGH_LABEL_P (label))
|
||||
return false;
|
||||
|
||||
/* Don't warn for a non-case label followed by a statement:
|
||||
/* Don't warn for non-case labels followed by a statement:
|
||||
case 0:
|
||||
foo ();
|
||||
label:
|
||||
@ -1993,7 +1993,12 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label)
|
||||
as these are likely intentional. */
|
||||
if (!case_label_p (&gimplify_ctxp->case_labels, label))
|
||||
{
|
||||
gsi_next (&gsi);
|
||||
tree l;
|
||||
while (!gsi_end_p (gsi)
|
||||
&& gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL
|
||||
&& (l = gimple_label_label (as_a <glabel *> (gsi_stmt (gsi))))
|
||||
&& !case_label_p (&gimplify_ctxp->case_labels, l))
|
||||
gsi_next (&gsi);
|
||||
if (gsi_end_p (gsi) || gimple_code (gsi_stmt (gsi)) != GIMPLE_LABEL)
|
||||
return false;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-01-20 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/79152
|
||||
* c-c++-common/Wimplicit-fallthrough-35.c: New test.
|
||||
|
||||
2017-01-20 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* lib/target-supports.exp (check_configured_with): New procedure.
|
||||
|
61
gcc/testsuite/c-c++-common/Wimplicit-fallthrough-35.c
Normal file
61
gcc/testsuite/c-c++-common/Wimplicit-fallthrough-35.c
Normal file
@ -0,0 +1,61 @@
|
||||
/* PR c/79152 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wimplicit-fallthrough" } */
|
||||
|
||||
extern void foo (int);
|
||||
|
||||
void
|
||||
f (int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
foo (0);
|
||||
l1:
|
||||
foo (1);
|
||||
}
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
foo (0);
|
||||
l2:;
|
||||
}
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
foo (0);
|
||||
l3:
|
||||
l4:
|
||||
foo (1);
|
||||
}
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
foo (0);
|
||||
l5:
|
||||
l6:;
|
||||
}
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
foo (0); /* { dg-warning "statement may fall through" } */
|
||||
l7:
|
||||
l8:
|
||||
case 1:
|
||||
foo (1);
|
||||
}
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
foo (0); /* { dg-warning "statement may fall through" } */
|
||||
l9:
|
||||
case 1:
|
||||
l10:
|
||||
foo (1);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user