Index: cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp +++ cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp @@ -66,6 +66,7 @@ .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) Index: cfe/trunk/test/Analysis/NoReturn.m =================================================================== --- cfe/trunk/test/Analysis/NoReturn.m +++ cfe/trunk/test/Analysis/NoReturn.m @@ -131,3 +131,15 @@ 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