diff options
author | Anna Zaks <ganna@apple.com> | 2013-02-07 23:05:43 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2013-02-07 23:05:43 +0000 |
commit | acdc13cb00591e2ab2b168c7924d7eb57fa4808e (patch) | |
tree | 2bb86597344e1dc645c2501fc028214b3f8bdd17 /clang/lib/StaticAnalyzer/Core/CheckerManager.cpp | |
parent | 7c1f408636d2d2cb2bc5890735d6cac1658dd28e (diff) | |
download | bcm5719-llvm-acdc13cb00591e2ab2b168c7924d7eb57fa4808e.tar.gz bcm5719-llvm-acdc13cb00591e2ab2b168c7924d7eb57fa4808e.zip |
[analyzer] Add pointer escape type param to checkPointerEscape callback
The checkPointerEscape callback previously did not specify how a
pointer escaped. This change includes an enum which describes the
different ways a pointer may escape. This enum is passed to the
checkPointerEscape callback when a pointer escapes. If the escape
is due to a function call, the call is passed. This changes
previous behavior where the call is passed as NULL if the escape
was due to indirectly invalidating the region the pointer referenced.
A patch by Branden Archer!
llvm-svn: 174677
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/CheckerManager.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/CheckerManager.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp b/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp index dc0cab72f91..a3837997886 100644 --- a/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp +++ b/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp @@ -488,13 +488,19 @@ CheckerManager::runCheckersForRegionChanges(ProgramStateRef state, ProgramStateRef CheckerManager::runCheckersForPointerEscape(ProgramStateRef State, const InvalidatedSymbols &Escaped, - const CallEvent *Call) { + const CallEvent *Call, + PointerEscapeKind Kind) { + assert((Call != NULL || + (Kind != PSK_DirectEscapeOnCall && + Kind != PSK_IndirectEscapeOnCall)) && + "Call must not be NULL when escaping on call"); + for (unsigned i = 0, e = PointerEscapeCheckers.size(); i != e; ++i) { // If any checker declares the state infeasible (or if it starts that way), // bail out. if (!State) return NULL; - State = PointerEscapeCheckers[i](State, Escaped, Call); + State = PointerEscapeCheckers[i](State, Escaped, Call, Kind); } return State; } |