diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-02-18 02:00:25 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-02-18 02:00:25 +0000 |
| commit | d84fff6524c625d0bb01101b9e59c0f24af5d330 (patch) | |
| tree | b494b59e9208f437e16b3b0856b665c9f3aa917f /clang/lib/Analysis | |
| parent | f53a9612d19c1a0da2bf44c7d1839f1959653bee (diff) | |
| download | bcm5719-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.cpp | 15 |
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; } |

