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
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp
index 1dc52c7..eb7d04a 100644
--- a/lib/Analysis/CFRefCount.cpp
+++ b/lib/Analysis/CFRefCount.cpp
@@ -3008,6 +3008,10 @@
   state = state.set<RefBindings>(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 @@
         static int ReturnOwnLeakTag = 0;
         state = state.set<RefBindings>(Sym, X ^ RefVal::ErrorLeakReturned);
         // Generate an error node.
-        ExplodedNode<GRState> *N =
-          Builder.generateNode(PostStmt(S, &ReturnOwnLeakTag), state, Pred);
-        
-        CFRefLeakReport *report =
-          new CFRefLeakReport(*static_cast<CFRefBug*>(leakAtReturn), *this,
-                              N, Sym, Eng);
-        BR->EmitReport(report);
+        if (ExplodedNode<GRState> *N =
+            Builder.generateNode(PostStmt(S, &ReturnOwnLeakTag), state, Pred)) {
+          CFRefLeakReport *report =
+            new CFRefLeakReport(*static_cast<CFRefBug*>(leakAtReturn), *this,
+                                N, Sym, Eng);
+          BR->EmitReport(report);
+        }
       }
     }
   }