[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