From: Ted Kremenek Date: Tue, 12 Feb 2008 18:50:32 +0000 (+0000) Subject: Renamed local variable. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d2986bdadd59cb2bce541aec4da4afbff82847e;p=clang Renamed local variable. Added transfer function support for CharacterLiteral. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47014 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/ValueState.cpp b/Analysis/ValueState.cpp index f51175fdca..d550716fd5 100644 --- a/Analysis/ValueState.cpp +++ b/Analysis/ValueState.cpp @@ -165,14 +165,14 @@ ValueStateManager::AddEQ(ValueState St, SymbolID sym, const llvm::APSInt& V) { return getPersistentState(NewSt); } -RValue ValueStateManager::GetValue(ValueState St, Expr* S, bool* hasVal) { +RValue ValueStateManager::GetValue(ValueState St, Expr* E, bool* hasVal) { for (;;) { - switch (S->getStmtClass()) { + switch (E->getStmtClass()) { // ParenExprs are no-ops. case Stmt::ParenExprClass: - S = cast(S)->getSubExpr(); + E = cast(E)->getSubExpr(); continue; // DeclRefExprs can either evaluate to an LValue or a Non-LValue @@ -181,31 +181,39 @@ RValue ValueStateManager::GetValue(ValueState St, Expr* S, bool* hasVal) { // within the referenced variables. case Stmt::DeclRefExprClass: - return GetValue(St, lval::DeclVal(cast(S)->getDecl())); + return GetValue(St, lval::DeclVal(cast(E)->getDecl())); // Integer literals evaluate to an RValue. Simply retrieve the // RValue for the literal. case Stmt::IntegerLiteralClass: - return NonLValue::GetValue(ValMgr, cast(S)); + return NonLValue::GetValue(ValMgr, cast(E)); + case Stmt::CharacterLiteralClass: { + CharacterLiteral* C = cast(E); + + return NonLValue::GetValue(ValMgr, C->getValue(), C->getType(), + C->getLoc()); + } + // Casts where the source and target type are the same // are no-ops. We blast through these to get the descendant // subexpression that has a value. + case Stmt::ImplicitCastExprClass: { - ImplicitCastExpr* C = cast(S); + ImplicitCastExpr* C = cast(E); if (C->getType() == C->getSubExpr()->getType()) { - S = C->getSubExpr(); + E = C->getSubExpr(); continue; } break; } case Stmt::CastExprClass: { - CastExpr* C = cast(S); + CastExpr* C = cast(E); if (C->getType() == C->getSubExpr()->getType()) { - S = C->getSubExpr(); + E = C->getSubExpr(); continue; } break; @@ -220,14 +228,14 @@ RValue ValueStateManager::GetValue(ValueState St, Expr* S, bool* hasVal) { break; } - ValueState::ExprBindingsTy::TreeTy* T = St->SubExprBindings.SlimFind(S); + ValueState::ExprBindingsTy::TreeTy* T = St->SubExprBindings.SlimFind(E); if (T) { if (hasVal) *hasVal = true; return T->getValue().second; } - T = St->BlockExprBindings.SlimFind(S); + T = St->BlockExprBindings.SlimFind(E); if (T) { if (hasVal) *hasVal = true;