Author: dcoughlin Date: Tue Dec 29 18:08:59 2015 New Revision: 256605 URL: http://llvm.org/viewvc/llvm-project?rev=256605&view=rev Log: [analyzer] Handle another Android assert function.
Android's assert can call both the __assert and __assert2 functions under the cover, but the NoReturnFunctionChecker does not handle the latter. This commit fixes that. A patch by Yury Gribov! Differential Revision: http://reviews.llvm.org/D15810 Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp cfe/trunk/test/Analysis/NoReturn.m Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp?rev=256605&r1=256604&r2=256605&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp Tue Dec 29 18:08:59 2015 @@ -66,6 +66,7 @@ void NoReturnFunctionChecker::checkPostC .Case("assfail", true) .Case("db_error", true) .Case("__assert", true) + .Case("__assert2", true) // For the purpose of static analysis, we do not care that // this MSVC function will return if the user decides to continue. .Case("_wassert", true) Modified: cfe/trunk/test/Analysis/NoReturn.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/NoReturn.m?rev=256605&r1=256604&r2=256605&view=diff ============================================================================== --- cfe/trunk/test/Analysis/NoReturn.m (original) +++ cfe/trunk/test/Analysis/NoReturn.m Tue Dec 29 18:08:59 2015 @@ -131,3 +131,15 @@ void test_wassert() { int *p = 0; *p = 0xDEADBEEF; // no-warning } +#undef assert + +// Test that hard-coded Android __assert2 name is recognized as a noreturn +#define assert(_Expression) ((_Expression) ? (void)0 : __assert2(0, 0, 0, 0)); +extern void __assert2(const char *, int, const char *, const char *); +extern void _wassert(const char * _Message, const char *_File, unsigned _Line); +void test___assert2() { + assert(0); + int *p = 0; + *p = 0xDEADBEEF; // no-warning +} +#undef assert _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits