From 5563df30b9c8d1fe87a54baae0d6bd86642563f4 Mon Sep 17 00:00:00 2001
From: rdivacky <rdivacky@FreeBSD.org>
Date: Fri, 23 Oct 2009 14:22:18 +0000
Subject: Update clang to r84949.

---
 lib/Analysis/GRExprEngine.cpp | 105 ++++++++++++++++++------------------------
 1 file changed, 46 insertions(+), 59 deletions(-)

(limited to 'lib/Analysis/GRExprEngine.cpp')

diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index 5079ace..ea0255d 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -207,7 +207,7 @@ const GRState* GRExprEngine::getInitialState(const LocationContext *InitLoc) {
   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
     // Precondition: the first argument of 'main' is an integer guaranteed
     //  to be > 0.
-    if (strcmp(FD->getIdentifier()->getName(), "main") == 0 &&
+    if (FD->getIdentifier()->getName() == "main" &&
         FD->getNumParams() > 0) {
       const ParmVarDecl *PD = FD->getParamDecl(0);
       QualType T = PD->getType();
@@ -1445,10 +1445,9 @@ static void MarkNoReturnFunction(const FunctionDecl *FD, CallExpr *CE,
     // HACK: Some functions are not marked noreturn, and don't return.
     //  Here are a few hardwired ones.  If this takes too long, we can
     //  potentially cache these results.
-    const char* s = FD->getIdentifier()->getName();
-    unsigned n = strlen(s);
+    const char* s = FD->getIdentifier()->getNameStart();
 
-    switch (n) {
+    switch (FD->getIdentifier()->getLength()) {
     default:
       break;
 
@@ -2788,66 +2787,55 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B,
       SVal RightV = state->getSVal(RHS);
 
       BinaryOperator::Opcode Op = B->getOpcode();
-      switch (Op) {
-        case BinaryOperator::Assign: {
-
-          // EXPERIMENTAL: "Conjured" symbols.
-          // FIXME: Handle structs.
-          QualType T = RHS->getType();
-
-          if ((RightV.isUnknown() ||
-               !getConstraintManager().canReasonAbout(RightV))
-              && (Loc::IsLocType(T) ||
-                  (T->isScalarType() && T->isIntegerType()))) {
-            unsigned Count = Builder->getCurrentBlockCount();
-            RightV = ValMgr.getConjuredSymbolVal(NULL, B->getRHS(), Count);
-          }
 
-          // Simulate the effects of a "store":  bind the value of the RHS
-          // to the L-Value represented by the LHS.
-          EvalStore(Dst, B, LHS, *I2, state->BindExpr(B, RightV),
-                    LeftV, RightV);
-          continue;
+      if (Op == BinaryOperator::Assign) {
+        // EXPERIMENTAL: "Conjured" symbols.
+        // FIXME: Handle structs.
+        QualType T = RHS->getType();
+        
+        if ((RightV.isUnknown()||!getConstraintManager().canReasonAbout(RightV))
+            && (Loc::IsLocType(T) || (T->isScalarType()&&T->isIntegerType()))) {
+          unsigned Count = Builder->getCurrentBlockCount();
+          RightV = ValMgr.getConjuredSymbolVal(NULL, B->getRHS(), Count);
         }
-
-          // FALL-THROUGH.
-
-        default: {
-
-          if (B->isAssignmentOp())
-            break;
-
-          // Process non-assignments except commas or short-circuited
-          // logical expressions (LAnd and LOr).
-          SVal Result = EvalBinOp(state, Op, LeftV, RightV, B->getType());
-
-          if (Result.isUnknown()) {
-            if (OldSt != state) {
-              // Generate a new node if we have already created a new state.
-              MakeNode(Dst, B, *I2, state);
-            }
-            else
-              Dst.Add(*I2);
-
-            continue;
+        
+        // Simulate the effects of a "store":  bind the value of the RHS
+        // to the L-Value represented by the LHS.
+        EvalStore(Dst, B, LHS, *I2, state->BindExpr(B, RightV), LeftV, RightV);
+        continue;
+      }
+      
+      if (!B->isAssignmentOp()) {
+        // Process non-assignments except commas or short-circuited
+        // logical expressions (LAnd and LOr).
+        SVal Result = EvalBinOp(state, Op, LeftV, RightV, B->getType());
+        
+        if (Result.isUnknown()) {
+          if (OldSt != state) {
+            // Generate a new node if we have already created a new state.
+            MakeNode(Dst, B, *I2, state);
           }
-
-          state = state->BindExpr(B, Result);
-
-          if (Result.isUndef()) {
-            // The operands were *not* undefined, but the result is undefined.
-            // This is a special node that should be flagged as an error.
-            if (ExplodedNode *UndefNode = Builder->generateNode(B, state, *I2)){
-              UndefNode->markAsSink();
-              UndefResults.insert(UndefNode);
-            }
-            continue;
+          else
+            Dst.Add(*I2);
+          
+          continue;
+        }
+        
+        state = state->BindExpr(B, Result);
+        
+        if (Result.isUndef()) {
+          // The operands were *not* undefined, but the result is undefined.
+          // This is a special node that should be flagged as an error.
+          if (ExplodedNode *UndefNode = Builder->generateNode(B, state, *I2)){
+            UndefNode->markAsSink();
+            UndefResults.insert(UndefNode);
           }
-
-          // Otherwise, create a new node.
-          MakeNode(Dst, B, *I2, state);
           continue;
         }
+        
+        // Otherwise, create a new node.
+        MakeNode(Dst, B, *I2, state);
+        continue;
       }
 
       assert (B->isCompoundAssignmentOp());
@@ -2875,7 +2863,6 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B,
 
       for (ExplodedNodeSet::iterator I3=Tmp3.begin(), E3=Tmp3.end(); I3!=E3;
            ++I3) {
-
         state = GetState(*I3);
         SVal V = state->getSVal(LHS);
 
-- 
cgit v1.1