From: Anna Zaks Date: Tue, 23 Aug 2011 23:56:12 +0000 (+0000) Subject: [analyzer] MacOSKeychainAPIChecker: Retrieve the memory region which we are tracking... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=31e1028afca8745ff6cfd64ecacdc05e513039ec;p=clang [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 --- 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(R)) - return 0; + if (!isa(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(R)) + R = ER->getAsArrayOffset().getRegion(); + else + return 0; + } return cast(R)->getSymbol(); }