[cfe-commits] r157508 - in /cfe/trunk: lib/Sema/AnalysisBasedWarnings.cpp test/SemaCXX/switch-implicit-fallthrough.cpp

Alexander Kornienko alexfh at gmail.com
Fri May 25 17:49:15 PDT 2012


Author: alexfh
Date: Fri May 25 19:49:15 2012
New Revision: 157508

URL: http://llvm.org/viewvc/llvm-project?rev=157508&view=rev
Log:
Don't offer '[[clang::fallthrough]];' fix-it when a fall-through occurs to a
switch label immediately followed by a 'break;'.

Modified:
    cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
    cfe/trunk/test/SemaCXX/switch-implicit-fallthrough.cpp

Modified: cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp?rev=157508&r1=157507&r2=157508&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp (original)
+++ cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp Fri May 25 19:49:15 2012
@@ -777,8 +777,11 @@
       if (L.isMacroID())
         continue;
       if (S.getLangOpts().CPlusPlus0x) {
-        S.Diag(L, diag::note_insert_fallthrough_fixit) <<
-          FixItHint::CreateInsertion(L, "[[clang::fallthrough]]; ");
+        const Stmt *Term = B.getTerminator();
+        if (!(B.empty() && Term && isa<BreakStmt>(Term))) {
+          S.Diag(L, diag::note_insert_fallthrough_fixit) <<
+            FixItHint::CreateInsertion(L, "[[clang::fallthrough]]; ");
+        }
       }
       S.Diag(L, diag::note_insert_break_fixit) <<
         FixItHint::CreateInsertion(L, "break; ");

Modified: cfe/trunk/test/SemaCXX/switch-implicit-fallthrough.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/switch-implicit-fallthrough.cpp?rev=157508&r1=157507&r2=157508&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/switch-implicit-fallthrough.cpp (original)
+++ cfe/trunk/test/SemaCXX/switch-implicit-fallthrough.cpp Fri May 25 19:49:15 2012
@@ -33,6 +33,8 @@
       }
     case 6:  // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
       n += 300;
+    case 66:  // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert 'break;' to avoid fall-through}}
+      break;
   }
   switch (n / 20) {
     case 7:





More information about the cfe-commits mailing list