[PATCH] D102492: [clang][AST] Add support for BindingDecl to ASTImporter.
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 14 06:02:05 PDT 2021
balazske created this revision.
Herald added subscribers: whisperity, martong, teemperor, gamesh411, Szelethus, dkrupp.
Herald added a reviewer: a.sidorin.
Herald added a reviewer: shafik.
balazske requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D102492
Files:
clang/lib/AST/ASTImporter.cpp
clang/unittests/AST/ASTImporterTest.cpp
Index: clang/unittests/AST/ASTImporterTest.cpp
===================================================================
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -868,6 +868,14 @@
namespaceDecl(has(usingShadowDecl())));
}
+TEST_P(ImportDecl, ImportBindingDecl) {
+ MatchVerifier<Decl> Verifier;
+ testImport("int a[2] = {1, 2};"
+ "auto [declToImport, x] = a;",
+ Lang_CXX17, "", Lang_CXX17, Verifier,
+ bindingDecl(hasType(asString("int"))));
+}
+
TEST_P(ImportExpr, ImportUnresolvedLookupExpr) {
MatchVerifier<Decl> Verifier;
testImport("template<typename T> int foo();"
Index: clang/lib/AST/ASTImporter.cpp
===================================================================
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -481,6 +481,7 @@
ExpectedDecl VisitAccessSpecDecl(AccessSpecDecl *D);
ExpectedDecl VisitStaticAssertDecl(StaticAssertDecl *D);
ExpectedDecl VisitTranslationUnitDecl(TranslationUnitDecl *D);
+ ExpectedDecl VisitBindingDecl(BindingDecl *D);
ExpectedDecl VisitNamespaceDecl(NamespaceDecl *D);
ExpectedDecl VisitNamespaceAliasDecl(NamespaceAliasDecl *D);
ExpectedDecl VisitTypedefNameDecl(TypedefNameDecl *D, bool IsAlias);
@@ -2274,6 +2275,36 @@
return ToD;
}
+ExpectedDecl ASTNodeImporter::VisitBindingDecl(BindingDecl *D) {
+ DeclContext *DC, *LexicalDC;
+ DeclarationName Name;
+ SourceLocation Loc;
+ NamedDecl *ToND;
+ if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToND, Loc))
+ return std::move(Err);
+ if (ToND)
+ return ToND;
+
+ Error Err = Error::success();
+ auto ToType = importChecked(Err, D->getType());
+ auto ToBinding = importChecked(Err, D->getBinding());
+ auto ToDecomposedDecl = importChecked(Err, D->getDecomposedDecl());
+ if (Err)
+ return std::move(Err);
+
+ BindingDecl *ToD;
+ if (GetImportedOrCreateDecl(ToD, D, Importer.getToContext(), DC, Loc,
+ Name.getAsIdentifierInfo()))
+ return ToD;
+
+ ToD->setLexicalDeclContext(LexicalDC);
+ DC->addDeclInternal(ToD);
+ ToD->setBinding(ToType, ToBinding);
+ ToD->setDecomposedDecl(ToDecomposedDecl);
+
+ return ToD;
+}
+
ExpectedDecl ASTNodeImporter::VisitAccessSpecDecl(AccessSpecDecl *D) {
ExpectedSLoc LocOrErr = import(D->getLocation());
if (!LocOrErr)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102492.345421.patch
Type: text/x-patch
Size: 2396 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210514/963ccdf0/attachment.bin>
More information about the cfe-commits
mailing list