From 95bb6e7a56d17f5f8886815f85dff71d12964245 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 27 Jun 2019 23:25:56 +0200 Subject: [PATCH] re PR c++/91024 (-Wimplicit-fallthrough is confused by likely/unlikely attributes) PR c++/91024 * gimplify.c (collect_fallthrough_labels): Ignore GIMPLE_PREDICT statements. * g++.dg/warn/Wimplicit-fallthrough-4.C: New test. From-SVN: r272764 --- gcc/ChangeLog | 4 ++++ gcc/gimplify.c | 2 ++ gcc/testsuite/ChangeLog | 3 +++ .../g++.dg/warn/Wimplicit-fallthrough-4.C | 22 ++++++++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-4.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c93909..eab9ab9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2019-06-27 Jakub Jelinek + PR c++/91024 + * gimplify.c (collect_fallthrough_labels): Ignore GIMPLE_PREDICT + statements. + PR tree-optimization/91010 * tree-vect-stmts.c (scan_operand_equal_p): If offset1 == offset2, return true. Otherwise, don't call operand_equal_p if offset1 or diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 0b25e71..5c51f50 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -2120,6 +2120,8 @@ collect_fallthrough_labels (gimple_stmt_iterator *gsi_p, } else if (gimple_call_internal_p (gsi_stmt (*gsi_p), IFN_ASAN_MARK)) ; + else if (gimple_code (gsi_stmt (*gsi_p)) == GIMPLE_PREDICT) + ; else if (!is_gimple_debug (gsi_stmt (*gsi_p))) prev = gsi_stmt (*gsi_p); gsi_next (gsi_p); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0a3ea37..ed07047 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2019-06-27 Jakub Jelinek + PR c++/91024 + * g++.dg/warn/Wimplicit-fallthrough-4.C: New test. + PR tree-optimization/91010 * g++.dg/vect/simd-10.cc: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-4.C b/gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-4.C new file mode 100644 index 0000000..993e695 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-4.C @@ -0,0 +1,22 @@ +// PR c++/91024 +// { dg-do compile { target c++11 } } +// { dg-options "-Wimplicit-fallthrough" } + +int +foo (char c) +{ + int result = 0; + + switch (c) + { + case 'O': + case 'K': + return result; + [[unlikely]] case 'X': // { dg-bogus "this statement may fall through" } + case 'x': // { dg-bogus "here" } + return result; + default: + break; + } + return result; +} -- 2.7.4