aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-02-12 21:37:25 +0000
committerTed Kremenek <kremenek@apple.com>2008-02-12 21:37:25 +0000
commit230aaab461fb76ca2f51e956816090593be41869 (patch)
tree768c300d2b9e182464eeb61aafb968349defa507
parentd9435bf47f76644b0bc1d463ccae97a40e2b0116 (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.cpp27
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)