optimization: no longer create ExplodedNodes for IntegerLiteral and
CharacterLiteral expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47617 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/ValueState.cpp b/Analysis/ValueState.cpp
index ab208ff..7f3e733 100644
--- a/Analysis/ValueState.cpp
+++ b/Analysis/ValueState.cpp
@@ -264,6 +264,16 @@
return UnknownVal();
}
+
+ case Stmt::CharacterLiteralClass: {
+ CharacterLiteral* C = cast<CharacterLiteral>(E);
+ return NonLVal::MakeVal(ValMgr, C->getValue(), C->getType(),
+ C->getLoc());
+ }
+
+ case Stmt::IntegerLiteralClass: {
+ return NonLVal::MakeVal(ValMgr, cast<IntegerLiteral>(E));
+ }
// Casts where the source and target type are the same
// are no-ops. We blast through these to get the descendant
@@ -332,9 +342,23 @@
RVal ValueStateManager::GetBlkExprRVal(ValueState St, Expr* E) {
assert (!isa<ParenExpr>(E));
-
- ValueState::ExprBindingsTy::TreeTy* T = St->BlockExprBindings.SlimFind(E);
- return T ? T->getValue().second : UnknownVal();
+
+ switch (E->getStmtClass()) {
+ case Stmt::CharacterLiteralClass: {
+ CharacterLiteral* C = cast<CharacterLiteral>(E);
+ return NonLVal::MakeVal(ValMgr, C->getValue(), C->getType(),
+ C->getLoc());
+ }
+
+ case Stmt::IntegerLiteralClass: {
+ return NonLVal::MakeVal(ValMgr, cast<IntegerLiteral>(E));
+ }
+
+ default: {
+ ValueState::ExprBindingsTy::TreeTy* T = St->BlockExprBindings.SlimFind(E);
+ return T ? T->getValue().second : UnknownVal();
+ }
+ }
}
RVal ValueStateManager::GetLVal(ValueState St, Expr* E) {