diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 0632da9c7f16..6668067233e4 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -460,6 +460,7 @@ namespace clang { 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 @@ Expr *ASTNodeImporter::VisitCXXStdInitializerListExpr( 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()) diff --git a/clang/test/Import/inherited-ctor-init-expr/Inputs/A.cpp b/clang/test/Import/inherited-ctor-init-expr/Inputs/A.cpp new file mode 100644 index 000000000000..27134333242f --- /dev/null +++ b/clang/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) {} +}; diff --git a/clang/test/Import/inherited-ctor-init-expr/test.cpp b/clang/test/Import/inherited-ctor-init-expr/test.cpp new file mode 100644 index 000000000000..9e15e382edc1 --- /dev/null +++ b/clang/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; +}