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 | 31e1028afca8745ff6cfd64ecacdc05e513039ec (patch) | |
tree | b757a19c2e9ea485113ecf5383196999f7435ada /lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp | |
parent | dd6060ebbd92842fbebd5d383f5ad48b29e7c99c (diff) |
[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*.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138415 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp b/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp index 551aea5021..7ffbc7fc4f 100644 --- a/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp +++ b/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(); } |