diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-02-12 21:37:25 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-02-12 21:37:25 +0000 |
commit | 230aaab461fb76ca2f51e956816090593be41869 (patch) | |
tree | 768c300d2b9e182464eeb61aafb968349defa507 | |
parent | d9435bf47f76644b0bc1d463ccae97a40e2b0116 (diff) |
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
-rw-r--r-- | Analysis/GRConstants.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
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<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) |