From: Ted Kremenek Date: Tue, 12 Feb 2008 21:37:25 +0000 (+0000) Subject: Minor (cosmetic) reshuffling of code. Fixed a bug in "Assume" logic when X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=230aaab461fb76ca2f51e956816090593be41869;p=clang Minor (cosmetic) reshuffling of code. Fixed a bug in "Assume" logic when 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 --- diff --git a/Analysis/GRConstants.cpp b/Analysis/GRConstants.cpp index 90b055c370..86ac5ef1aa 100644 --- a/Analysis/GRConstants.cpp +++ b/Analysis/GRConstants.cpp @@ -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(S); @@ -1001,10 +1010,6 @@ void GRConstants::Visit(Stmt* S, GRConstants::NodeTy* Pred, case Stmt::UnaryOperatorClass: VisitUnaryOperator(cast(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(Cond); + nonlval::SymbolVal& SV = cast(Cond); SymbolID sym = SV.getSymbol(); if (Assumption)