[PATCH] D49293: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr.
This revision was automatically updated to reflect the committed changes. Closed by commit rC337898: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr. (authored by balazske, committed by ). Changed prior to commit: https://reviews.llvm.org/D49293?vs=155838&id=157212#toc Repository: rC Clang https://reviews.llvm.org/D49293 Files: lib/AST/ASTImporter.cpp test/Import/inherited-ctor-init-expr/Inputs/A.cpp test/Import/inherited-ctor-init-expr/test.cpp 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; +} 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; +} 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()) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49293: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr.
balazske updated this revision to Diff 155838. balazske added a comment. - Using cast_or_null Repository: rC Clang https://reviews.llvm.org/D49293 Files: lib/AST/ASTImporter.cpp test/Import/inherited-ctor-init-expr/Inputs/A.cpp test/Import/inherited-ctor-init-expr/test.cpp Index: test/Import/inherited-ctor-init-expr/test.cpp === --- /dev/null +++ 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; +} Index: test/Import/inherited-ctor-init-expr/Inputs/A.cpp === --- /dev/null +++ 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: lib/AST/ASTImporter.cpp === --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -459,6 +459,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); @@ -6767,6 +6768,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/test.cpp === --- /dev/null +++ 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; +} Index: test/Import/inherited-ctor-init-expr/Inputs/A.cpp === --- /dev/null +++ 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: lib/AST/ASTImporter.cpp === --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -459,6 +459,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); @@ -6767,6 +6768,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()) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49293: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr.
a_sidorin added inline comments. Comment at: lib/AST/ASTImporter.cpp:6741 + + auto *Ctor = dyn_cast(Importer.Import( + E->getConstructor())); balazske wrote: > a_sidorin wrote: > > cast_or_null? > dyn_cast_or_null: Import may return nullptr, but if not, the cast should > succeed (not a CXXConstructorDecl would be error). > Or (but some lines more code) check separately for null return from Import, > and then use `cast`? Usually, we explicitly check that the imported decl has the same kind as the source one by filtering lookup results or by creating a decl of same kind. So, it's better to assert with cast_or_null in case of kind mismatch. Repository: rC Clang https://reviews.llvm.org/D49293 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49293: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr.
balazske added inline comments. Comment at: lib/AST/ASTImporter.cpp:6741 + + auto *Ctor = dyn_cast(Importer.Import( + E->getConstructor())); a_sidorin wrote: > cast_or_null? dyn_cast_or_null: Import may return nullptr, but if not, the cast should succeed (not a CXXConstructorDecl would be error). Or (but some lines more code) check separately for null return from Import, and then use `cast`? Repository: rC Clang https://reviews.llvm.org/D49293 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49293: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr.
a_sidorin added a comment. Adding new nodes is always welcome. Comment at: lib/AST/ASTImporter.cpp:6741 + + auto *Ctor = dyn_cast(Importer.Import( + E->getConstructor())); cast_or_null? Repository: rC Clang https://reviews.llvm.org/D49293 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49293: [ASTImporter] Add support for import of CXXInheritedCtorInitExpr.
balazske created this revision. Herald added subscribers: cfe-commits, martong. Herald added a reviewer: a.sidorin. Repository: rC Clang https://reviews.llvm.org/D49293 Files: lib/AST/ASTImporter.cpp test/Import/inherited-ctor-init-expr/Inputs/A.cpp test/Import/inherited-ctor-init-expr/test.cpp Index: test/Import/inherited-ctor-init-expr/test.cpp === --- /dev/null +++ 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; +} Index: test/Import/inherited-ctor-init-expr/Inputs/A.cpp === --- /dev/null +++ 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: lib/AST/ASTImporter.cpp === --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -458,6 +458,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); @@ -6731,6 +6732,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 = dyn_cast(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/test.cpp === --- /dev/null +++ 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; +} Index: test/Import/inherited-ctor-init-expr/Inputs/A.cpp === --- /dev/null +++ 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: lib/AST/ASTImporter.cpp === --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -458,6 +458,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); @@ -6731,6 +6732,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 = dyn_cast(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()) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits