Implement instantiation of a few boring, simple expressions. I don't think these are testable yet, though.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71953 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 9a86003..3133a8f 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -27,10 +27,27 @@
 // Primary Expressions.
 //===----------------------------------------------------------------------===//
 
+PredefinedExpr* PredefinedExpr::Clone(ASTContext &C) const {
+  return new (C) PredefinedExpr(Loc, getType(), Type);
+}
+
 IntegerLiteral* IntegerLiteral::Clone(ASTContext &C) const {
   return new (C) IntegerLiteral(Value, getType(), Loc);
 }
 
+CharacterLiteral* CharacterLiteral::Clone(ASTContext &C) const {
+  return new (C) CharacterLiteral(Value, IsWide, getType(), Loc);
+}
+
+FloatingLiteral* FloatingLiteral::Clone(ASTContext &C) const {
+  bool exact = IsExact;
+  return new (C) FloatingLiteral(Value, &exact, getType(), Loc);
+}
+
+GNUNullExpr* GNUNullExpr::Clone(ASTContext &C) const {
+  return new (C) GNUNullExpr(getType(), TokenLoc);
+}
+
 /// getValueAsApproximateDouble - This returns the value as an inaccurate
 /// double.  Note that this may cause loss of precision, but is useful for
 /// debugging dumps, etc.
diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp
index 8176db5..71617c4 100644
--- a/lib/AST/ExprCXX.cpp
+++ b/lib/AST/ExprCXX.cpp
@@ -309,3 +309,15 @@
   return &SubExpr + 1;
 }
 
+
+//===----------------------------------------------------------------------===//
+//  Cloners
+//===----------------------------------------------------------------------===//
+
+CXXBoolLiteralExpr* CXXBoolLiteralExpr::Clone(ASTContext &C) const {
+  return new (C) CXXBoolLiteralExpr(Value, getType(), Loc);
+}
+
+CXXNullPtrLiteralExpr* CXXNullPtrLiteralExpr::Clone(ASTContext &C) const {
+  return new (C) CXXNullPtrLiteralExpr(getType(), Loc);
+}