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, ""); _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
