aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/GRCoreEngine.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-04-11 00:11:10 +0000
committerTed Kremenek <kremenek@apple.com>2009-04-11 00:11:10 +0000
commit1670e403c48f3af4fceff3f6773a0e1cfc6c4eb3 (patch)
tree3b1044513e874e7285fa3b8a874122286b97066b /lib/Analysis/GRCoreEngine.cpp
parentc2112181b96349eb595dc5e8b7073b81ecdec0db (diff)
Implement analyzer support for OSCompareAndSwap. This required pushing "tagged"
ProgramPoints all the way through to GRCoreEngine. NSString.m now fails with RegionStoreManager because of the void** cast. Disabling use of region store for that test for now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68845 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/GRCoreEngine.cpp')
-rw-r--r--lib/Analysis/GRCoreEngine.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/Analysis/GRCoreEngine.cpp b/lib/Analysis/GRCoreEngine.cpp
index 28f1a317c3..e4f27b60cf 100644
--- a/lib/Analysis/GRCoreEngine.cpp
+++ b/lib/Analysis/GRCoreEngine.cpp
@@ -368,47 +368,49 @@ void GRStmtNodeBuilderImpl::GenerateAutoTransition(ExplodedNodeImpl* N) {
Eng.WList->Enqueue(Succ, B, Idx+1);
}
-static inline PostStmt GetPostLoc(Stmt* S, ProgramPoint::Kind K) {
+static inline PostStmt GetPostLoc(Stmt* S, ProgramPoint::Kind K,
+ const void *tag) {
switch (K) {
default:
assert(false && "Invalid PostXXXKind.");
case ProgramPoint::PostStmtKind:
- return PostStmt(S);
+ return PostStmt(S, tag);
case ProgramPoint::PostLoadKind:
- return PostLoad(S);
+ return PostLoad(S, tag);
case ProgramPoint::PostUndefLocationCheckFailedKind:
- return PostUndefLocationCheckFailed(S);
+ return PostUndefLocationCheckFailed(S, tag);
case ProgramPoint::PostLocationChecksSucceedKind:
- return PostLocationChecksSucceed(S);
+ return PostLocationChecksSucceed(S, tag);
case ProgramPoint::PostOutOfBoundsCheckFailedKind:
- return PostOutOfBoundsCheckFailed(S);
+ return PostOutOfBoundsCheckFailed(S, tag);
case ProgramPoint::PostNullCheckFailedKind:
- return PostNullCheckFailed(S);
+ return PostNullCheckFailed(S, tag);
case ProgramPoint::PostStoreKind:
- return PostStore(S);
+ return PostStore(S, tag);
case ProgramPoint::PostPurgeDeadSymbolsKind:
- return PostPurgeDeadSymbols(S);
+ return PostPurgeDeadSymbols(S, tag);
}
}
ExplodedNodeImpl*
GRStmtNodeBuilderImpl::generateNodeImpl(Stmt* S, const void* State,
ExplodedNodeImpl* Pred,
- ProgramPoint::Kind K) {
- return generateNodeImpl(GetPostLoc(S, K), State, Pred);
+ ProgramPoint::Kind K,
+ const void *tag) {
+ return generateNodeImpl(GetPostLoc(S, K, tag), State, Pred);
}
ExplodedNodeImpl*
GRStmtNodeBuilderImpl::generateNodeImpl(PostStmt Loc, const void* State,
- ExplodedNodeImpl* Pred) {
+ ExplodedNodeImpl* Pred) {
bool IsNew;
ExplodedNodeImpl* N = Eng.G->getNodeImpl(Loc, State, &IsNew);
N->addPredecessor(Pred);