summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-02-18 02:00:25 +0000
committerTed Kremenek <kremenek@apple.com>2009-02-18 02:00:25 +0000
commitd84fff6524c625d0bb01101b9e59c0f24af5d330 (patch)
treeb494b59e9208f437e16b3b0856b665c9f3aa917f /clang/lib/Analysis
parentf53a9612d19c1a0da2bf44c7d1839f1959653bee (diff)
downloadbcm5719-llvm-d84fff6524c625d0bb01101b9e59c0f24af5d330.tar.gz
bcm5719-llvm-d84fff6524c625d0bb01101b9e59c0f24af5d330.zip
retain/release checker: Record the summary used to generate a given node.
llvm-svn: 64876
Diffstat (limited to 'clang/lib/Analysis')
-rw-r--r--clang/lib/Analysis/CFRefCount.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp
index 81faf21653f..8fea99b4f6a 100644
--- a/clang/lib/Analysis/CFRefCount.cpp
+++ b/clang/lib/Analysis/CFRefCount.cpp
@@ -1284,6 +1284,7 @@ public:
private:
RetainSummaryManager Summaries;
+ llvm::DenseMap<const GRExprEngine::NodeTy*, const RetainSummary*> SummaryLog;
const LangOptions& LOpts;
BugType *useAfterRelease, *releaseNotOwned;
@@ -1655,11 +1656,15 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<GRState>& Dst,
}
}
- // Is this a sink?
- if (IsEndPath(Summ))
- Builder.MakeSinkNode(Dst, Ex, Pred, state);
- else
- Builder.MakeNode(Dst, Ex, Pred, state);
+ // Generate a sink node if we are at the end of a path.
+ GRExprEngine::NodeTy *NewNode =
+ IsEndPath(Summ) ? Builder.MakeSinkNode(Dst, Ex, Pred, state)
+ : Builder.MakeNode(Dst, Ex, Pred, state);
+
+ // Annotate the edge with summary we used.
+ // FIXME: This assumes that we always use the same summary when generating
+ // this node.
+ if (NewNode) SummaryLog[NewNode] = Summ;
}
OpenPOWER on IntegriCloud