Author: danielmarjamaki Date: Wed Aug 2 01:26:56 2017 New Revision: 309799
URL: http://llvm.org/viewvc/llvm-project?rev=309799&view=rev Log: [StaticAnalyzer] Fix false positives for unreachable code in macros. Example: #define MACRO(C) if (C) { static int x; .. } void foo() { MACRO(0); } Differential Revision: https://reviews.llvm.org/D36141 Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp cfe/trunk/test/Analysis/unreachable-code-path.c Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp?rev=309799&r1=309798&r2=309799&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp Wed Aug 2 01:26:56 2017 @@ -112,7 +112,7 @@ void UnreachableCodeChecker::checkEndAna continue; // Check for false positives - if (CB->size() > 0 && isInvalidPath(CB, *PM)) + if (isInvalidPath(CB, *PM)) continue; // It is good practice to always have a "default" label in a "switch", even Modified: cfe/trunk/test/Analysis/unreachable-code-path.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/unreachable-code-path.c?rev=309799&r1=309798&r2=309799&view=diff ============================================================================== --- cfe/trunk/test/Analysis/unreachable-code-path.c (original) +++ cfe/trunk/test/Analysis/unreachable-code-path.c Wed Aug 2 01:26:56 2017 @@ -213,3 +213,13 @@ void macro(void) { RETURN(1); // no-warning } +// Avoid FP when macro argument is known +void writeSomething(int *x); +#define MACRO(C) \ + if (!C) { \ + static int x; \ + writeSomething(&x); \ + } +void macro2(void) { + MACRO(1); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits