Index: lib/AST/ASTImporter.cpp =================================================================== --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -460,6 +460,7 @@ Expr *VisitLambdaExpr(LambdaExpr *LE); Expr *VisitInitListExpr(InitListExpr *E); Expr *VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E); + Expr *VisitCXXInheritedCtorInitExpr(CXXInheritedCtorInitExpr *E); Expr *VisitArrayInitLoopExpr(ArrayInitLoopExpr *E); Expr *VisitArrayInitIndexExpr(ArrayInitIndexExpr *E); Expr *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E); @@ -6772,6 +6773,22 @@ return new (Importer.getToContext()) CXXStdInitializerListExpr(T, SE); } +Expr *ASTNodeImporter::VisitCXXInheritedCtorInitExpr( + CXXInheritedCtorInitExpr *E) { + QualType T = Importer.Import(E->getType()); + if (T.isNull()) + return nullptr; + + auto *Ctor = cast_or_null(Importer.Import( + E->getConstructor())); + if (!Ctor) + return nullptr; + + return new (Importer.getToContext()) CXXInheritedCtorInitExpr( + Importer.Import(E->getLocation()), T, Ctor, + E->constructsVBase(), E->inheritedFromVBase()); +} + Expr *ASTNodeImporter::VisitArrayInitLoopExpr(ArrayInitLoopExpr *E) { QualType ToType = Importer.Import(E->getType()); if (ToType.isNull()) Index: test/Import/inherited-ctor-init-expr/Inputs/A.cpp =================================================================== --- test/Import/inherited-ctor-init-expr/Inputs/A.cpp +++ test/Import/inherited-ctor-init-expr/Inputs/A.cpp @@ -0,0 +1,11 @@ +class A { +public: + A(int a) : a(a) {} + int a; +}; +class B : public A { + using A::A; +}; +class C : public B { + C() : B(1) {} +}; Index: test/Import/inherited-ctor-init-expr/test.cpp =================================================================== --- test/Import/inherited-ctor-init-expr/test.cpp +++ test/Import/inherited-ctor-init-expr/test.cpp @@ -0,0 +1,6 @@ +// RUN: clang-import-test -dump-ast -expression=%s -import=%S/Inputs/A.cpp | FileCheck %s +// CHECK: | | | `-CXXInheritedCtorInitExpr + +void foo() { + C c; +}