diff options
author | Anna Zaks <ganna@apple.com> | 2011-08-23 23:56:12 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2011-08-23 23:56:12 +0000 |
commit | f9e9c4e9bcdf6cb7e3c67c934d59b07054bedc6a (patch) | |
tree | 0ccbb13a8369420d8ba200d2d37fa136f18b355a | |
parent | bb167011e3668419a7d63108c728de449f20e18e (diff) | |
download | bcm5719-llvm-f9e9c4e9bcdf6cb7e3c67c934d59b07054bedc6a.tar.gz bcm5719-llvm-f9e9c4e9bcdf6cb7e3c67c934d59b07054bedc6a.zip |
[analyzer] MacOSKeychainAPIChecker: Retrieve the memory region which we are tracking even when it's no longer a SymbolicRegion, for example, when it is cast to char*.
llvm-svn: 138415
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp index 551aea50214..7ffbc7fc4f7 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp @@ -167,8 +167,14 @@ unsigned MacOSKeychainAPIChecker::getTrackedFunctionIndex(StringRef Name, static SymbolRef getSymbolForRegion(CheckerContext &C, const MemRegion *R) { - if (!isa<SymbolicRegion>(R)) - return 0; + if (!isa<SymbolicRegion>(R)) { + // Implicit casts (ex: void* -> char*) can turn Symbolic region into element + // region, if that is the case, get the underlining region. + if (const ElementRegion *ER = dyn_cast<ElementRegion>(R)) + R = ER->getAsArrayOffset().getRegion(); + else + return 0; + } return cast<SymbolicRegion>(R)->getSymbol(); } |