From 9f246b6bca9f9070095abe6b9e3604df3a3adc67 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 30 Apr 2009 05:51:50 +0000 Subject: [PATCH] Handle case in EvalReturn where we cache out in the ExplodedGraph. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70475 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/CFRefCount.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 1dc52c797c..eb7d04a342 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -3008,6 +3008,10 @@ void CFRefCount::EvalReturn(ExplodedNodeSet& Dst, state = state.set(Sym, X); Pred = Builder.MakeNode(Dst, S, Pred, state); + // Did we cache out? + if (!Pred) + return; + // Any leaks or other errors? if (X.isReturnedOwned() && X.getCount() == 0) { const Decl *CD = &Eng.getStateManager().getCodeDecl(); @@ -3018,13 +3022,13 @@ void CFRefCount::EvalReturn(ExplodedNodeSet& Dst, static int ReturnOwnLeakTag = 0; state = state.set(Sym, X ^ RefVal::ErrorLeakReturned); // Generate an error node. - ExplodedNode *N = - Builder.generateNode(PostStmt(S, &ReturnOwnLeakTag), state, Pred); - - CFRefLeakReport *report = - new CFRefLeakReport(*static_cast(leakAtReturn), *this, - N, Sym, Eng); - BR->EmitReport(report); + if (ExplodedNode *N = + Builder.generateNode(PostStmt(S, &ReturnOwnLeakTag), state, Pred)) { + CFRefLeakReport *report = + new CFRefLeakReport(*static_cast(leakAtReturn), *this, + N, Sym, Eng); + BR->EmitReport(report); + } } } } -- 2.40.0