Small fixes to shore up overhauling of transfer function logic for '&&' and '||.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47620 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp
index c0f53fe..1dae433 100644
--- a/Analysis/GRExprEngine.cpp
+++ b/Analysis/GRExprEngine.cpp
@@ -148,8 +148,8 @@
       break;
 
     case RVal::UnknownKind:
-      builder.generateNode(PrevState, true);
-      builder.generateNode(PrevState, false);
+      builder.generateNode(MarkBranch(PrevState, Term, true), true);
+      builder.generateNode(MarkBranch(PrevState, Term, false), false);
       return;
       
     case RVal::UninitializedKind: {      
@@ -368,6 +368,13 @@
     
     X = GetBlkExprRVal(St, Ex);
     
+    // Handle uninitialized values.
+    
+    if (X.isUninit()) {
+      Nodify(Dst, B, Pred, SetBlkExprRVal(St, B, X));
+      return;
+    }
+    
     // We took the RHS.  Because the value of the '&&' or '||' expression must
     // evaluate to 0 or 1, we must assume the value of the RHS evaluates to 0
     // or 1.  Alternatively, we could take a lazy approach, and calculate this