diff options
author | Anna Zaks <ganna@apple.com> | 2012-02-15 02:12:00 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-02-15 02:12:00 +0000 |
commit | d1ff1cbe231b58e8a9fd91a30e4568fbce7528aa (patch) | |
tree | 8d21c519b2e4a028310e76d90f11a0b185aa62bc | |
parent | 19582e85bd8a76a2780c4b89ca412305faf3b5f9 (diff) | |
download | bcm5719-llvm-d1ff1cbe231b58e8a9fd91a30e4568fbce7528aa.tar.gz bcm5719-llvm-d1ff1cbe231b58e8a9fd91a30e4568fbce7528aa.zip |
[analyzer] Malloc checker: make a bit safer.
llvm-svn: 150556
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 766de4b7512..88a0613a78f 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -265,11 +265,14 @@ void MallocChecker::initIdentifierInfo(ASTContext &Ctx) const { } bool MallocChecker::isMemFunction(const FunctionDecl *FD, ASTContext &C) const { - initIdentifierInfo(C); + if (!FD) + return false; IdentifierInfo *FunI = FD->getIdentifier(); if (!FunI) return false; + initIdentifierInfo(C); + // TODO: Add more here : ex: reallocf! if (FunI == II_malloc || FunI == II_free || FunI == II_realloc || FunI == II_reallocf || FunI == II_calloc || FunI == II_valloc) @@ -1006,7 +1009,8 @@ MallocChecker::checkRegionChanges(ProgramStateRef State, return State; llvm::SmallPtrSet<SymbolRef, 8> WhitelistedSymbols; - const FunctionDecl *FD = (Call ? dyn_cast<FunctionDecl>(Call->getDecl()) : 0); + const FunctionDecl *FD = (Call ? + dyn_cast_or_null<FunctionDecl>(Call->getDecl()) :0); // If it's a call which might free or reallocate memory, we assume that all // regions (explicit and implicit) escaped. Otherwise, whitelist explicit |