[clang-tools-extra] r232306 - [clang-tidy] Fix false positives in the misc-static-assert check http://llvm.org/PR22880

Alexander Kornienko alexfh at google.com
Sat Mar 14 19:19:37 PDT 2015


Author: alexfh
Date: Sat Mar 14 21:19:37 2015
New Revision: 232306

URL: http://llvm.org/viewvc/llvm-project?rev=232306&view=rev
Log:
[clang-tidy] Fix false positives in the misc-static-assert check http://llvm.org/PR22880

The misc-static-assert check will not warn on assert(false), assert(False),
assert(FALSE); where false / False / FALSE are macros expanding to the false or
0 literals.

Also added corresponding test cases.

http://reviews.llvm.org/D8328

Patch by Szabolcs Sipos!

Modified:
    clang-tools-extra/trunk/clang-tidy/misc/StaticAssertCheck.cpp
    clang-tools-extra/trunk/test/clang-tidy/misc-static-assert.cpp

Modified: clang-tools-extra/trunk/clang-tidy/misc/StaticAssertCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/StaticAssertCheck.cpp?rev=232306&r1=232305&r2=232306&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/StaticAssertCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/StaticAssertCheck.cpp Sat Mar 14 21:19:37 2015
@@ -75,9 +75,17 @@ void StaticAssertCheck::check(const Matc
     return;
 
   // False literal is not the result of macro expansion.
-  if (IsAlwaysFalse &&
-      !SM.getImmediateSpellingLoc(IsAlwaysFalse->getExprLoc()).isMacroID())
-    return;
+  if (IsAlwaysFalse) {
+    SourceLocation FalseLiteralLoc =
+        SM.getImmediateSpellingLoc(IsAlwaysFalse->getExprLoc());
+    if (!FalseLiteralLoc.isMacroID())
+      return;
+
+    StringRef FalseMacroName =
+        Lexer::getImmediateMacroName(FalseLiteralLoc, SM, Opts);
+    if (FalseMacroName.compare_lower("false") == 0)
+      return;
+  }
 
   SourceLocation AssertLoc = SM.getImmediateMacroCallerLoc(AssertExpansionLoc);
 

Modified: clang-tools-extra/trunk/test/clang-tidy/misc-static-assert.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-static-assert.cpp?rev=232306&r1=232305&r2=232306&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-static-assert.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/misc-static-assert.cpp Sat Mar 14 21:19:37 2015
@@ -12,6 +12,9 @@ void abort() {}
 
 #define ZERO_MACRO 0
 
+#define False false
+#define FALSE 0
+
 #define my_macro() assert(0 == 1)
 // CHECK-FIXES: #define my_macro() assert(0 == 1)
 
@@ -60,6 +63,11 @@ int main() {
   assert(false);
   // CHECK-FIXES: {{^  }}assert(false);
 
+  assert(False);
+  // CHECK-FIXES: {{^  }}assert(False);
+  assert(FALSE);
+  // CHECK-FIXES: {{^  }}assert(FALSE);
+
   assert(ZERO_MACRO);
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
   // CHECK-FIXES: {{^  }}static_assert(ZERO_MACRO, "");





More information about the cfe-commits mailing list