Fixed more caching bugs related to the one fixed in r49914.  Silence
compiler warning introduced by a recent patch of mine.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49917 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index 2e474fc..8c771bf 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -188,7 +188,7 @@
   // dead mappings removed.
   
   if (Dst.size() == 1 && *Dst.begin() == StmtEntryNode && 
-      !Builder->hasGeneratedNode())
+      !Builder->HasGeneratedNode)
     builder.generateNode(S, GetState(StmtEntryNode), StmtEntryNode);
   
   // NULL out these variables to cleanup.
@@ -715,7 +715,11 @@
   assert (Builder && "GRStmtNodeBuilder must be defined.");
   
   unsigned size = Dst.size();  
-  SaveAndRestore<bool> OldSink(Builder->BuildSinks);
+
+  SaveAndRestore<bool> OldSink(Builder->BuildSinks),
+                       OldHasGen(Builder->HasGeneratedNode);
+
+  Builder->HasGeneratedNode = false;
   
   assert (!TargetLV.isUndef());
   
@@ -724,7 +728,7 @@
   // Handle the case where no nodes where generated.  Auto-generate that
   // contains the updated state if we aren't generating sinks.
   
-  if (!Builder->BuildSinks && Dst.size() == size)
+  if (!Builder->BuildSinks && Dst.size() == size && !Builder->HasGeneratedNode)
     TF->GRTransferFuncs::EvalStore(Dst, *this, *Builder, E, Pred, St,
                                    TargetLV, Val);
 }
@@ -888,14 +892,18 @@
       
       unsigned size = Dst.size();
       
-      SaveAndRestore<bool> OldSink(Builder->BuildSinks);
+      SaveAndRestore<bool> OldSink(Builder->BuildSinks),
+                           OldHasGen(Builder->HasGeneratedNode);
       
+      Builder->HasGeneratedNode = false;
+
       EvalCall(Dst, CE, cast<LVal>(L), *DI);
       
       // Handle the case where no nodes where generated.  Auto-generate that
       // contains the updated state if we aren't generating sinks.
       
-      if (!Builder->BuildSinks && Dst.size() == size)
+      if (!Builder->BuildSinks && Dst.size() == size &&
+          !Builder->HasGeneratedNode)
         MakeNode(Dst, CE, *DI, St);
     }
   }
@@ -991,14 +999,18 @@
   // Dispatch to plug-in transfer function.
   
   unsigned size = Dst.size();
-  SaveAndRestore<bool> OldSink(Builder->BuildSinks);
+
+  SaveAndRestore<bool> OldSink(Builder->BuildSinks),
+                       OldHasGen(Builder->HasGeneratedNode);
   
+  Builder->HasGeneratedNode = false;
+ 
   EvalObjCMessageExpr(Dst, ME, Pred);
   
   // Handle the case where no nodes where generated.  Auto-generate that
   // contains the updated state if we aren't generating sinks.
   
-  if (!Builder->BuildSinks && Dst.size() == size)
+  if (!Builder->BuildSinks && Dst.size() == size && !Builder->HasGeneratedNode)
     MakeNode(Dst, ME, Pred, St);
 }
 
@@ -1461,14 +1473,17 @@
   assert (Builder && "GRStmtNodeBuilder must be defined.");
   
   unsigned size = Dst.size();  
-  SaveAndRestore<bool> OldSink(Builder->BuildSinks);
+
+  SaveAndRestore<bool> OldSink(Builder->BuildSinks),
+                       OldHasGen(Builder->HasGeneratedNode);
   
+  Builder->HasGeneratedNode = false;
+
   TF->EvalReturn(Dst, *this, *Builder, S, Pred);
   
-  // Handle the case where no nodes where generated.  Auto-generate that
-  // contains the updated state if we aren't generating sinks.
+  // Handle the case where no nodes where generated.
   
-  if (!Builder->BuildSinks && Dst.size() == size)
+  if (!Builder->BuildSinks && Dst.size() == size && !Builder->HasGeneratedNode)
     MakeNode(Dst, S, Pred, GetState(Pred));
 }