Small tweaks to EvalStore: pass an "RVal" instead of "LVal" for the TargetLV to
represent possible stores to "Unknown."


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49811 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index 72bae32..53567c1 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -709,20 +709,23 @@
 }
 
 void GRExprEngine::VisitStore(NodeSet& Dst, Expr* E, NodeTy* Pred,
-                              ValueState* St, LVal TargetLV, RVal Val) {
+                              ValueState* St, RVal TargetLV, RVal Val) {
   
   assert (Builder && "GRStmtNodeBuilder must be defined.");
   
   unsigned size = Dst.size();  
   SaveAndRestore<bool> OldSink(Builder->BuildSinks);
   
+  assert (!TargetLV.isUndef());
+  
   EvalStore(Dst, E, Pred, St, TargetLV, Val);
   
   // 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)
-    MakeNode(Dst, E, Pred, SetRVal(St, TargetLV, Val));    
+    TF->GRTransferFuncs::EvalStore(Dst, *this, *Builder, E, Pred, St,
+                                   TargetLV, Val);
 }
 
 //===----------------------------------------------------------------------===//
@@ -1643,21 +1646,12 @@
                      : cast<RVal>(nonlval::SymbolVal(Sym));            
           }
           
-          // Even if the LHS evaluates to an unknown L-Value, the entire
-          // expression still evaluates to the RHS.
-          
-          if (LeftV.isUnknown()) {
-            St = SetRVal(St, B, RightV);
-            break;
-          }
-          
           // Simulate the effects of a "store":  bind the value of the RHS
           // to the L-Value represented by the LHS.
 
           VisitStore(Dst, B, N2, SetRVal(St, B, RightV),
-                    cast<LVal>(LeftV), RightV);
+                     LeftV, RightV);
           
-//          St = SetRVal(SetRVal(St, B, RightV), cast<LVal>(LeftV), RightV);
           continue;
         }