diff options
author | Marek Polacek <polacek@redhat.com> | 2017-01-20 16:28:16 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2017-01-20 16:28:16 +0000 |
commit | d2aadab150ac5f2c7e140d5568647a0c74eb67da (patch) | |
tree | 2e7dbd0f9a2d2c81943c7cec1e7f5884b0fa0ade /gcc/gimplify.c | |
parent | 776d540459c10c1cfe407a39f4460c9fe807712f (diff) | |
download | gcc-d2aadab150ac5f2c7e140d5568647a0c74eb67da.zip gcc-d2aadab150ac5f2c7e140d5568647a0c74eb67da.tar.gz gcc-d2aadab150ac5f2c7e140d5568647a0c74eb67da.tar.bz2 |
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
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 2777a23..d382eea 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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; } |