]> granicus.if.org Git - clang/commitdiff
Minor (cosmetic) reshuffling of code. Fixed a bug in "Assume" logic when
authorTed Kremenek <kremenek@apple.com>
Tue, 12 Feb 2008 21:37:25 +0000 (21:37 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 12 Feb 2008 21:37:25 +0000 (21:37 +0000)
handling Non-Lvalues of the type nonlval::SymbolVal; we were accidentally
casting them to lval::SymbolVal.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47029 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/GRConstants.cpp

index 90b055c37020d66062d26b29f25e28ec96c1b2a5..86ac5ef1aab87d23fd0f41b3b47fe7adb34e7042 100644 (file)
@@ -272,17 +272,14 @@ public:
   ///  other functions that handle specific kinds of statements.
   void Visit(Stmt* S, NodeTy* Pred, NodeSet& Dst);
 
-  /// VisitCast - Transfer function logic for all casts (implicit and explicit).
-  void VisitCast(Expr* CastE, Expr* E, NodeTy* Pred, NodeSet& Dst);
-  
-  /// VisitUnaryOperator - Transfer function logic for unary operators.
-  void VisitUnaryOperator(UnaryOperator* B, NodeTy* Pred, NodeSet& Dst);
-  
   /// VisitBinaryOperator - Transfer function logic for binary operators.
   void VisitBinaryOperator(BinaryOperator* B, NodeTy* Pred, NodeSet& Dst);
   
   void VisitAssignmentLHS(Expr* E, NodeTy* Pred, NodeSet& Dst);
 
+  /// VisitCast - Transfer function logic for all casts (implicit and explicit).
+  void VisitCast(Expr* CastE, Expr* E, NodeTy* Pred, NodeSet& Dst);  
+  
   /// VisitDeclRefExpr - Transfer function logic for DeclRefExprs.
   void VisitDeclRefExpr(DeclRefExpr* DR, NodeTy* Pred, NodeSet& Dst); 
 
@@ -299,6 +296,10 @@ public:
   /// VisitSizeOfAlignOfTypeExpr - Transfer function for sizeof(type).
   void VisitSizeOfAlignOfTypeExpr(SizeOfAlignOfTypeExpr* S, NodeTy* Pred,
                                   NodeSet& Dst);
+  
+  /// VisitUnaryOperator - Transfer function logic for unary operators.
+  void VisitUnaryOperator(UnaryOperator* B, NodeTy* Pred, NodeSet& Dst);
+  
 };
 } // end anonymous namespace
 
@@ -919,6 +920,14 @@ void GRConstants::Visit(Stmt* S, GRConstants::NodeTy* Pred,
   }
 
   switch (S->getStmtClass()) {
+      
+    default:
+      // Cases we intentionally have "default" handle:
+      //   AddrLabelExpr, CharacterLiteral, IntegerLiteral
+      
+      Dst.Add(Pred); // No-op. Simply propagate the current state unchanged.
+      break;
+                                                       
     case Stmt::BinaryOperatorClass: {
       BinaryOperator* B = cast<BinaryOperator>(S);
  
@@ -1001,10 +1010,6 @@ void GRConstants::Visit(Stmt* S, GRConstants::NodeTy* Pred,
     case Stmt::UnaryOperatorClass:
       VisitUnaryOperator(cast<UnaryOperator>(S), Pred, Dst);
       break;
-      
-    default:
-      Dst.Add(Pred); // No-op. Simply propagate the current state unchanged.
-      break;
   }
 }
 
@@ -1053,7 +1058,7 @@ GRConstants::StateTy GRConstants::Assume(StateTy St, NonLValue Cond,
       
       
     case nonlval::SymbolValKind: {
-      lval::SymbolVal& SV = cast<lval::SymbolVal>(Cond);
+      nonlval::SymbolVal& SV = cast<nonlval::SymbolVal>(Cond);
       SymbolID sym = SV.getSymbol();
       
       if (Assumption)