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) {