https://github.com/jcsxky created https://github.com/llvm/llvm-project/pull/73290
None >From cc883836b0c24368a7a438873cec2229776323da Mon Sep 17 00:00:00 2001 From: huqizhi <huqi...@feysh.com> Date: Fri, 24 Nov 2023 13:55:45 +0800 Subject: [PATCH] [clang][ASTImporter] IdentifierInfo of Attribute should be set using ToASTContext --- clang/include/clang/Basic/AttributeCommonInfo.h | 1 + clang/lib/AST/ASTImporter.cpp | 7 +++++-- clang/unittests/AST/ASTImporterTest.cpp | 13 +++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/clang/include/clang/Basic/AttributeCommonInfo.h b/clang/include/clang/Basic/AttributeCommonInfo.h index 3140d1a838afcec..f84f51b1cd25022 100644 --- a/clang/include/clang/Basic/AttributeCommonInfo.h +++ b/clang/include/clang/Basic/AttributeCommonInfo.h @@ -177,6 +177,7 @@ class AttributeCommonInfo { IsRegularKeywordAttribute); } const IdentifierInfo *getAttrName() const { return AttrName; } + void setAttrName(const IdentifierInfo *A) { AttrName = A; } SourceLocation getLoc() const { return AttrRange.getBegin(); } SourceRange getRange() const { return AttrRange; } void setRange(SourceRange R) { AttrRange = R; } diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index c4e931e220f69b5..19e3e94c70c82d5 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -9241,9 +9241,12 @@ Error ASTImporter::ImportAttrs(Decl *ToD, Decl *FromD) { return Error::success(); for (const Attr *FromAttr : FromD->getAttrs()) { auto ToAttrOrErr = Import(FromAttr); - if (ToAttrOrErr) + if (ToAttrOrErr) { + if (auto *FromAttrNameII = FromAttr->getAttrName()) + (*ToAttrOrErr) + ->setAttrName(&ToContext.Idents.get(FromAttrNameII->getName())); ToD->addAttr(*ToAttrOrErr); - else + } else return ToAttrOrErr.takeError(); } return Error::success(); diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp index 5f4d8d040772cb1..2df92ad9d5985a4 100644 --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -12,6 +12,7 @@ #include "clang/AST/RecordLayout.h" #include "clang/ASTMatchers/ASTMatchers.h" +#include "clang/Testing/CommandLineArgs.h" #include "llvm/Support/SmallVectorMemoryBuffer.h" #include "clang/AST/DeclContextInternals.h" @@ -7362,11 +7363,12 @@ struct ImportAttributes : public ASTImporterOptionSpecificTestBase { } template <class DT, class AT> - void importAttr(const char *Code, AT *&FromAttr, AT *&ToAttr) { + void importAttr(const char *Code, AT *&FromAttr, AT *&ToAttr, + TestLanguage Lang = Lang_CXX11) { static_assert(std::is_base_of<Attr, AT>::value, "AT should be an Attr"); static_assert(std::is_base_of<Decl, DT>::value, "DT should be a Decl"); - Decl *FromTU = getTuDecl(Code, Lang_CXX11, "input.cc"); + Decl *FromTU = getTuDecl(Code, Lang, "input.cc"); DT *FromD = FirstDeclMatcher<DT>().match(FromTU, namedDecl(hasName("test"))); ASSERT_TRUE(FromD); @@ -7652,6 +7654,13 @@ TEST_P(ImportAttributes, ImportLocksExcluded) { checkImportVariadicArg(FromAttr->args(), ToAttr->args()); } +TEST_P(ImportAttributes, ImportC99NoThrowAttr) { + NoThrowAttr *FromAttr, *ToAttr; + importAttr<FunctionDecl>("void test () __attribute__ ((__nothrow__));", + FromAttr, ToAttr, Lang_C99); + checkImported(FromAttr->getAttrName(), ToAttr->getAttrName()); +} + template <typename T> auto ExtendWithOptions(const T &Values, const std::vector<std::string> &Args) { auto Copy = Values; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits