commit c61401b89742f230b7e6a2cc0548fbf7442e906d
Author: Luboš Luňák <l.lunak@centrum.cz>
Date:   Mon Mar 2 22:31:37 2020 +0100

    Revert "[clang] detect switch fallthrough marked by a comment (PR43465)"
    
    This reverts commit 398b4ed87d488b42032c8d0304324dce76ba9b66.
    As requested in https://bugs.llvm.org/show_bug.cgi?id=43465#c37 .

diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index a162ff091ef..04611dadde6 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp
@@ -1148,11 +1148,6 @@ namespace {
           continue;
         }
 
-        if (isFollowedByFallThroughComment(LastStmt)) {
-          ++AnnotatedCnt;
-          continue; // Fallthrough comment, good.
-        }
-
         ++UnannotatedCnt;
       }
       return !!UnannotatedCnt;
@@ -1213,41 +1208,10 @@ namespace {
       return nullptr;
     }
 
-    bool isFollowedByFallThroughComment(const Stmt *Statement) {
-      // Try to detect whether the fallthough is marked by a comment like
-      // /*FALLTHOUGH*/.
-      bool Invalid;
-      const char *SourceData = S.getSourceManager().getCharacterData(
-          Statement->getEndLoc(), &Invalid);
-      if (Invalid)
-        return false;
-      const char *LineStart = SourceData;
-      for (;;) {
-        LineStart = strchr(LineStart, '\n');
-        if (LineStart == nullptr)
-          return false;
-        ++LineStart; // Start of next line.
-        const char *LineEnd = strchr(LineStart, '\n');
-        StringRef Line(LineStart,
-                       LineEnd ? LineEnd - LineStart : strlen(LineStart));
-        if (LineStart == LineEnd ||
-            Line.find_first_not_of(" \t\r") == StringRef::npos)
-          continue; // Whitespace-only line.
-        if (!FallthroughRegex.isValid())
-          FallthroughRegex =
-              llvm::Regex("(/\\*[ \\t]*fall(s | |-)?thr(ough|u)\\.?[ \\t]*\\*/)"
-                          "|(//[ \\t]*fall(s | |-)?thr(ough|u)\\.?[ \\t]*)",
-                          llvm::Regex::IgnoreCase);
-        assert(FallthroughRegex.isValid());
-        return FallthroughRegex.match(Line);
-      }
-    }
-
     bool FoundSwitchStatements;
     AttrStmts FallthroughStmts;
     Sema &S;
     llvm::SmallPtrSet<const CFGBlock *, 16> ReachableBlocks;
-    llvm::Regex FallthroughRegex;
   };
 } // anonymous namespace
 
diff --git a/clang/test/Sema/fallthrough-comment.c b/clang/test/Sema/fallthrough-comment.c
deleted file mode 100644
index 85d1257932f..00000000000
--- a/clang/test/Sema/fallthrough-comment.c
+++ /dev/null
@@ -1,20 +0,0 @@
-// RUN: %clang_cc1 -fsyntax-only -std=c11 -verify -Wimplicit-fallthrough %s
-
-int fallthrough_comment(int n) {
-  switch (n) {
-  case 0:
-    n++;
-    // FALLTHROUGH
-  case 1:
-    n++;
-
-    /*fall-through.*/
-
-  case 2:
-    n++;
-  case 3: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '__attribute__((fallthrough));' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
-    n++;
-    break;
-  }
-  return n;
-}
