[ASTImporter] Add support for import of CXXInheritedCtorInitExpr.

Reviewers: a.sidorin, martong

Reviewed By: martong

Subscribers: rnkovacs, a_sidorin, martong, cfe-commits

Differential Revision: https://reviews.llvm.org/D49293

llvm-svn: 337898
This commit is contained in:
Balazs Keri 2018-07-25 10:21:06 +00:00
parent f0b379c959
commit 95baa840c2
3 changed files with 34 additions and 0 deletions

View File

@ -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<CXXConstructorDecl>(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())

View File

@ -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) {}
};

View File

@ -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;
}