[PATCH] D92962: [ASTImporter] Fix import of a typedef that has an attribute
Gabor Marton via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 10 05:59:27 PST 2020
martong updated this revision to Diff 310869.
martong added a comment.
- Check the attribute in the test as well
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92962/new/
https://reviews.llvm.org/D92962
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
@@ -6085,6 +6085,24 @@
INSTANTIATE_TEST_CASE_P(ParameterizedTests, CTAD,
DefaultTestValuesForRunOptions, );
+TEST_P(ASTImporterOptionSpecificTestBase, TypedefWithAttribute) {
+ Decl *TU = getTuDecl(
+ R"(
+ namespace N {
+ typedef int X __attribute__((annotate("A")));
+ }
+ )",
+ Lang_CXX17, "input.cc");
+ auto *FromD =
+ FirstDeclMatcher<TypedefDecl>().match(TU, typedefDecl(hasName("X")));
+ auto *ToD = Import(FromD, Lang_CXX17);
+ ASSERT_TRUE(ToD);
+ ASSERT_EQ(ToD->getAttrs().size(), 1);
+ auto *ToAttr = dyn_cast<AnnotateAttr>(ToD->getAttrs()[0]);
+ ASSERT_TRUE(ToAttr);
+ EXPECT_EQ(ToAttr->getAnnotation(), "A");
+}
+
INSTANTIATE_TEST_CASE_P(ParameterizedTests, ASTImporterLookupTableTest,
DefaultTestValuesForRunOptions, );
Index: clang/lib/AST/ASTImporter.cpp
===================================================================
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -264,16 +264,6 @@
void InitializeImportedDecl(Decl *FromD, Decl *ToD) {
ToD->IdentifierNamespace = FromD->IdentifierNamespace;
- if (FromD->hasAttrs())
- for (const Attr *FromAttr : FromD->getAttrs()) {
- // FIXME: Return of the error here is not possible until store of
- // import errors is implemented.
- auto ToAttrOrErr = import(FromAttr);
- if (ToAttrOrErr)
- ToD->addAttr(*ToAttrOrErr);
- else
- llvm::consumeError(ToAttrOrErr.takeError());
- }
if (FromD->isUsed())
ToD->setIsUsed();
if (FromD->isImplicit())
@@ -8328,6 +8318,15 @@
// Make sure that ImportImpl registered the imported decl.
assert(ImportedDecls.count(FromD) != 0 && "Missing call to MapImported?");
+ if (FromD->hasAttrs())
+ for (const Attr *FromAttr : FromD->getAttrs()) {
+ auto ToAttrOrErr = Import(FromAttr);
+ if (ToAttrOrErr)
+ ToD->addAttr(*ToAttrOrErr);
+ else
+ return ToAttrOrErr.takeError();
+ }
+
// Notify subclasses.
Imported(FromD, ToD);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92962.310869.patch
Type: text/x-patch
Size: 2317 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201210/b89c455b/attachment.bin>
More information about the cfe-commits
mailing list