From: Gabor Marton Date: Fri, 29 Jun 2018 12:17:34 +0000 (+0000) Subject: [ASTImporter] Added import of CXXStdInitializerListExpr X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=776a04d9d7360285a5b89c9f37968496045fce6e;p=clang [ASTImporter] Added import of CXXStdInitializerListExpr Reviewers: a.sidorin Reviewed By: a.sidorin Subscribers: martong, cfe-commits Differential Revision: https://reviews.llvm.org/D48631 Patch by Balazs Keri! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@335968 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index 5fa222cf4a..37ddfea7be 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -384,6 +384,7 @@ namespace clang { Expr *VisitCallExpr(CallExpr *E); Expr *VisitLambdaExpr(LambdaExpr *LE); Expr *VisitInitListExpr(InitListExpr *E); + Expr *VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E); Expr *VisitArrayInitLoopExpr(ArrayInitLoopExpr *E); Expr *VisitArrayInitIndexExpr(ArrayInitIndexExpr *E); Expr *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E); @@ -6622,6 +6623,19 @@ Expr *ASTNodeImporter::VisitInitListExpr(InitListExpr *ILE) { return To; } +Expr *ASTNodeImporter::VisitCXXStdInitializerListExpr( + CXXStdInitializerListExpr *E) { + QualType T = Importer.Import(E->getType()); + if (T.isNull()) + return nullptr; + + Expr *SE = Importer.Import(E->getSubExpr()); + if (!SE) + return nullptr; + + return new (Importer.getToContext()) CXXStdInitializerListExpr(T, SE); +} + Expr *ASTNodeImporter::VisitArrayInitLoopExpr(ArrayInitLoopExpr *E) { QualType ToType = Importer.Import(E->getType()); if (ToType.isNull()) diff --git a/test/ASTMerge/std-initializer-list/Inputs/il.cpp b/test/ASTMerge/std-initializer-list/Inputs/il.cpp new file mode 100644 index 0000000000..3b2ac187c8 --- /dev/null +++ b/test/ASTMerge/std-initializer-list/Inputs/il.cpp @@ -0,0 +1,9 @@ +namespace std { +template +struct initializer_list { + const T *begin, *end; + initializer_list(); +}; +} // namespace std + +std::initializer_list IL = {1, 2, 3, 4}; diff --git a/test/ASTMerge/std-initializer-list/test.cpp b/test/ASTMerge/std-initializer-list/test.cpp new file mode 100644 index 0000000000..ca7330d308 --- /dev/null +++ b/test/ASTMerge/std-initializer-list/test.cpp @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/il.cpp +// RUN: %clang_cc1 -ast-merge %t.1.ast -fsyntax-only %s 2>&1 | FileCheck --allow-empty %s +// CHECK-NOT: unsupported AST node