Introduce DeclaratorDecl and pass DeclaratorInfo through the Decl/Sema interfaces.

DeclaratorDecl contains a DeclaratorInfo* to keep type source info.
Subclasses of DeclaratorDecl are FieldDecl, FunctionDecl, and VarDecl.
EnumConstantDecl still inherits from ValueDecl since it has no need for DeclaratorInfo.

Decl/Sema interfaces accept a DeclaratorInfo as parameter but no DeclaratorInfo is created yet.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79392 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index 559d942..c00d361 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -321,8 +321,10 @@
 CXXMethodDecl *
 CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD,
                       SourceLocation L, DeclarationName N,
-                      QualType T, bool isStatic, bool isInline) {
-  return new (C) CXXMethodDecl(CXXMethod, RD, L, N, T, isStatic, isInline);
+                      QualType T, DeclaratorInfo *DInfo,
+                      bool isStatic, bool isInline) {
+  return new (C) CXXMethodDecl(CXXMethod, RD, L, N, T, DInfo,
+                               isStatic, isInline);
 }
 
 
@@ -428,11 +430,12 @@
 CXXConstructorDecl *
 CXXConstructorDecl::Create(ASTContext &C, CXXRecordDecl *RD,
                            SourceLocation L, DeclarationName N,
-                           QualType T, bool isExplicit,
+                           QualType T, DeclaratorInfo *DInfo,
+                           bool isExplicit,
                            bool isInline, bool isImplicitlyDeclared) {
   assert(N.getNameKind() == DeclarationName::CXXConstructorName &&
          "Name must refer to a constructor");
-  return new (C) CXXConstructorDecl(RD, L, N, T, isExplicit, isInline,
+  return new (C) CXXConstructorDecl(RD, L, N, T, DInfo, isExplicit, isInline,
                                       isImplicitlyDeclared);
 }
 
@@ -694,10 +697,11 @@
 CXXConversionDecl *
 CXXConversionDecl::Create(ASTContext &C, CXXRecordDecl *RD,
                           SourceLocation L, DeclarationName N,
-                          QualType T, bool isInline, bool isExplicit) {
+                          QualType T, DeclaratorInfo *DInfo,
+                          bool isInline, bool isExplicit) {
   assert(N.getNameKind() == DeclarationName::CXXConversionFunctionName &&
          "Name must refer to a conversion function");
-  return new (C) CXXConversionDecl(RD, L, N, T, isInline, isExplicit);
+  return new (C) CXXConversionDecl(RD, L, N, T, DInfo, isInline, isExplicit);
 }
 
 OverloadedFunctionDecl *
@@ -748,9 +752,10 @@
                                                DeclContext *DC,
                                                SourceLocation L,
                                                DeclarationName N, QualType T,
+                                               DeclaratorInfo *DInfo,
                                                bool isInline,
                                                SourceLocation FriendL) {
-  return new (C) FriendFunctionDecl(DC, L, N, T, isInline, FriendL);
+  return new (C) FriendFunctionDecl(DC, L, N, T, DInfo, isInline, FriendL);
 }
 
 FriendClassDecl *FriendClassDecl::Create(ASTContext &C, DeclContext *DC,