forked from OSchip/llvm-project
Revert "Revert "[analyzer] Make MallocChecker more robust against custom redeclarations""
This reverts commit r284340 to reapply r284335. The bot breakage was due to an unrelated change in the polybench test suite. llvm-svn: 284351
This commit is contained in:
parent
0db71d9e58
commit
684d19d879
|
@ -778,6 +778,8 @@ void MallocChecker::checkPostStmt(const CallExpr *CE, CheckerContext &C) const {
|
|||
State = MallocMemAux(C, CE, CE->getArg(0), UndefinedVal(), State);
|
||||
}
|
||||
} else if (FunI == II_kmalloc) {
|
||||
if (CE->getNumArgs() < 1)
|
||||
return;
|
||||
llvm::Optional<ProgramStateRef> MaybeState =
|
||||
performKernelMalloc(CE, C, State);
|
||||
if (MaybeState.hasValue())
|
||||
|
@ -807,6 +809,8 @@ void MallocChecker::checkPostStmt(const CallExpr *CE, CheckerContext &C) const {
|
|||
} else if (FunI == II_strndup) {
|
||||
State = MallocUpdateRefState(C, CE, State);
|
||||
} else if (FunI == II_alloca || FunI == II_win_alloca) {
|
||||
if (CE->getNumArgs() < 1)
|
||||
return;
|
||||
State = MallocMemAux(C, CE, CE->getArg(0), UndefinedVal(), State,
|
||||
AF_Alloca);
|
||||
State = ProcessZeroAllocation(C, CE, 0, State);
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -Wno-incompatible-library-redeclaration -verify %s
|
||||
|
||||
// Various tests to make the the analyzer is robust against custom
|
||||
// redeclarations of memory routines.
|
||||
//
|
||||
// You wouldn't expect to see much of this in normal code, but, for example,
|
||||
// CMake tests can generate these.
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
||||
char alloca();
|
||||
char malloc();
|
||||
char realloc();
|
||||
char kmalloc();
|
||||
char valloc();
|
||||
char calloc();
|
||||
|
||||
char free();
|
||||
char kfree();
|
||||
|
||||
void testCustomArgumentlessAllocation() {
|
||||
alloca(); // no-crash
|
||||
malloc(); // no-crash
|
||||
realloc(); // no-crash
|
||||
kmalloc(); // no-crash
|
||||
valloc(); // no-crash
|
||||
calloc(); // no-crash
|
||||
|
||||
free(); // no-crash
|
||||
kfree(); // no-crash
|
||||
}
|
||||
|
Loading…
Reference in New Issue