forked from OSchip/llvm-project
[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 llvm-svn: 256605
This commit is contained in:
parent
cda3bc2062
commit
3369867aa7
|
@ -66,6 +66,7 @@ void NoReturnFunctionChecker::checkPostCall(const CallEvent &CE,
|
|||
.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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue