Add the ability to clone integer and string literals. Use it when instantiating template expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67030 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp
index 9126d2a..7b2d24b 100644
--- a/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/lib/Sema/SemaTemplateInstantiate.cpp
@@ -591,7 +591,8 @@
     OwningExprResult VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E);
 
     // Base case. I'm supposed to ignore this.
-    Sema::OwningExprResult VisitStmt(Stmt *) { 
+    Sema::OwningExprResult VisitStmt(Stmt *S) { 
+      S->dump();
       assert(false && "Cannot instantiate this kind of expression");
       return SemaRef.ExprError(); 
     }
@@ -600,10 +601,7 @@
 
 Sema::OwningExprResult 
 TemplateExprInstantiator::VisitIntegerLiteral(IntegerLiteral *E) {
-  // FIXME: Can't we just re-use the expression node?
-  return SemaRef.Owned(new (SemaRef.Context) IntegerLiteral(E->getValue(), 
-                                                            E->getType(),
-                                                            E->getLocation()));
+  return SemaRef.Clone(E);
 }
 
 Sema::OwningExprResult