Index: include/clang/AST/ASTImporter.h =================================================================== --- include/clang/AST/ASTImporter.h +++ include/clang/AST/ASTImporter.h @@ -23,7 +23,6 @@ namespace clang { class ASTContext; - class CXXCtorInitializer; class Decl; class DeclContext; class DiagnosticsEngine; @@ -205,14 +204,6 @@ /// \returns the equivalent file ID in the source manager of the "to" /// context. FileID Import(FileID); - - /// \brief Import the given C++ constructor initializer from the "from" - /// context into the "to" context. - /// - /// \returns the equivalent initializer in the "to" context. - CXXCtorInitializer *Import(CXXCtorInitializer *FromInit); - - /// \brief Import the definition of the given declaration, including all of /// the declarations it contains. Index: lib/AST/ASTImporter.cpp =================================================================== --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -3029,22 +3029,6 @@ D->isInlineSpecified(), D->isImplicit(), D->isConstexpr()); - if (unsigned NumInitializers = FromConstructor->getNumCtorInitializers()) { - SmallVector CtorInitializers; - for (CXXCtorInitializer *I : FromConstructor->inits()) { - CXXCtorInitializer *ToI = - cast_or_null(Importer.Import(I)); - if (!ToI && I) - return nullptr; - CtorInitializers.push_back(ToI); - } - CXXCtorInitializer **Memory = - new (Importer.getToContext()) CXXCtorInitializer *[NumInitializers]; - std::copy(CtorInitializers.begin(), CtorInitializers.end(), Memory); - CXXConstructorDecl *ToCtor = llvm::cast(ToFunction); - ToCtor->setCtorInitializers(Memory); - ToCtor->setNumCtorInitializers(NumInitializers); - } } else if (isa(D)) { ToFunction = CXXDestructorDecl::Create(Importer.getToContext(), cast(DC), @@ -6376,72 +6360,6 @@ return ToID; } -CXXCtorInitializer *ASTImporter::Import(CXXCtorInitializer *From) { - Expr *ToExpr = Import(From->getInit()); - if (!ToExpr && From->getInit()) - return nullptr; - - if (From->isBaseInitializer()) { - TypeSourceInfo *ToTInfo = Import(From->getTypeSourceInfo()); - if (!ToTInfo && From->getTypeSourceInfo()) - return nullptr; - - return new (ToContext) CXXCtorInitializer( - ToContext, ToTInfo, From->isBaseVirtual(), Import(From->getLParenLoc()), - ToExpr, Import(From->getRParenLoc()), - From->isPackExpansion() ? Import(From->getEllipsisLoc()) - : SourceLocation()); - } else if (From->isMemberInitializer()) { - FieldDecl *ToField = - llvm::cast_or_null(Import(From->getMember())); - if (!ToField && From->getMember()) - return nullptr; - - return new (ToContext) CXXCtorInitializer( - ToContext, ToField, Import(From->getMemberLocation()), - Import(From->getLParenLoc()), ToExpr, Import(From->getRParenLoc())); - } else if (From->isIndirectMemberInitializer()) { - IndirectFieldDecl *ToIField = llvm::cast_or_null( - Import(From->getIndirectMember())); - if (!ToIField && From->getIndirectMember()) - return nullptr; - - return new (ToContext) CXXCtorInitializer( - ToContext, ToIField, Import(From->getMemberLocation()), - Import(From->getLParenLoc()), ToExpr, Import(From->getRParenLoc())); - } else if (From->isDelegatingInitializer()) { - TypeSourceInfo *ToTInfo = Import(From->getTypeSourceInfo()); - if (!ToTInfo && From->getTypeSourceInfo()) - return nullptr; - - return new (ToContext) - CXXCtorInitializer(ToContext, ToTInfo, Import(From->getLParenLoc()), - ToExpr, Import(From->getRParenLoc())); - } else if (unsigned NumArrayIndices = From->getNumArrayIndices()) { - FieldDecl *ToField = - llvm::cast_or_null(Import(From->getMember())); - if (!ToField && From->getMember()) - return nullptr; - - SmallVector ToAIs(NumArrayIndices); - - for (unsigned AII = 0; AII < NumArrayIndices; ++AII) { - VarDecl *ToArrayIndex = - dyn_cast_or_null(Import(From->getArrayIndex(AII))); - if (!ToArrayIndex && From->getArrayIndex(AII)) - return nullptr; - } - - return CXXCtorInitializer::Create( - ToContext, ToField, Import(From->getMemberLocation()), - Import(From->getLParenLoc()), ToExpr, Import(From->getRParenLoc()), - ToAIs.data(), NumArrayIndices); - } else { - return nullptr; - } -} - - void ASTImporter::ImportDefinition(Decl *From) { Decl *To = Import(From); if (!To) Index: test/ASTMerge/Inputs/init-ctors-classes.cpp =================================================================== --- test/ASTMerge/Inputs/init-ctors-classes.cpp +++ test/ASTMerge/Inputs/init-ctors-classes.cpp @@ -1,17 +0,0 @@ -class A_base -{ -public: - int x; - A_base(int _x) : x(_x) { - } -}; - -class A : public A_base -{ -public: - int y; - struct { int z; }; - int array[2]; - A(int _x) : A_base(_x), y(0), z(1), array{{2},{3}} { - } -}; Index: test/ASTMerge/init-ctors.cpp =================================================================== --- test/ASTMerge/init-ctors.cpp +++ test/ASTMerge/init-ctors.cpp @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++1z -emit-pch -o %t.1.ast %S/Inputs/init-ctors-classes.cpp -// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++1z -ast-merge %t.1.ast -fsyntax-only -verify %s -// expected-no-diagnostics - -class B { - int method_1() { - A a(0); - return a.x; - } -};