Author: Anders Waldenborg Date: 2023-03-13T16:47:51+01:00 New Revision: f5f1813defb5810223de8f916380808a8ed34584
URL: https://github.com/llvm/llvm-project/commit/f5f1813defb5810223de8f916380808a8ed34584 DIFF: https://github.com/llvm/llvm-project/commit/f5f1813defb5810223de8f916380808a8ed34584.diff LOG: [clang] Extract attribute plugin instantiation to function (NFC) This moves the code to instantiate the attribute plugins to the same place where the plugin registry is defined so they live together and the user of the plugins doesn't have the burden of instantiating the plugins. No functional change intended. Differential Revision: https://reviews.llvm.org/D144403 Added: Modified: clang/include/clang/Basic/ParsedAttrInfo.h clang/lib/Basic/ParsedAttrInfo.cpp clang/lib/Sema/ParsedAttr.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/ParsedAttrInfo.h b/clang/include/clang/Basic/ParsedAttrInfo.h index 3dc022aa4db3..788c960b01bf 100644 --- a/clang/include/clang/Basic/ParsedAttrInfo.h +++ b/clang/include/clang/Basic/ParsedAttrInfo.h @@ -20,6 +20,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/Registry.h" #include <climits> +#include <list> namespace clang { @@ -137,6 +138,8 @@ struct ParsedAttrInfo { typedef llvm::Registry<ParsedAttrInfo> ParsedAttrInfoRegistry; +const std::list<std::unique_ptr<ParsedAttrInfo>> &getAttributePluginInstances(); + } // namespace clang #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H diff --git a/clang/lib/Basic/ParsedAttrInfo.cpp b/clang/lib/Basic/ParsedAttrInfo.cpp index 497e05483585..7757f30da511 100644 --- a/clang/lib/Basic/ParsedAttrInfo.cpp +++ b/clang/lib/Basic/ParsedAttrInfo.cpp @@ -12,7 +12,21 @@ //===----------------------------------------------------------------------===// #include "clang/Basic/ParsedAttrInfo.h" +#include "llvm/Support/ManagedStatic.h" +#include <list> +#include <memory> using namespace clang; LLVM_INSTANTIATE_REGISTRY(ParsedAttrInfoRegistry) + +const std::list<std::unique_ptr<ParsedAttrInfo>> & +clang::getAttributePluginInstances() { + static llvm::ManagedStatic<std::list<std::unique_ptr<ParsedAttrInfo>>> + PluginAttrInstances; + if (PluginAttrInstances->empty()) + for (auto It : ParsedAttrInfoRegistry::entries()) + PluginAttrInstances->emplace_back(It.instantiate()); + + return *PluginAttrInstances; +} diff --git a/clang/lib/Sema/ParsedAttr.cpp b/clang/lib/Sema/ParsedAttr.cpp index 67254e1aaf23..50191d45b100 100644 --- a/clang/lib/Sema/ParsedAttr.cpp +++ b/clang/lib/Sema/ParsedAttr.cpp @@ -19,7 +19,6 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/ManagedStatic.h" #include <cassert> #include <cstddef> #include <utility> @@ -118,13 +117,7 @@ const ParsedAttrInfo &ParsedAttrInfo::get(const AttributeCommonInfo &A) { if (A.getParsedKind() == AttributeCommonInfo::IgnoredAttribute) return IgnoredParsedAttrInfo; - // Otherwise this may be an attribute defined by a plugin. First instantiate - // all plugin attributes if we haven't already done so. - static llvm::ManagedStatic<std::list<std::unique_ptr<ParsedAttrInfo>>> - PluginAttrInstances; - if (PluginAttrInstances->empty()) - for (auto It : ParsedAttrInfoRegistry::entries()) - PluginAttrInstances->emplace_back(It.instantiate()); + // Otherwise this may be an attribute defined by a plugin. // Search for a ParsedAttrInfo whose name and syntax match. std::string FullName = A.getNormalizedFullName(); @@ -132,7 +125,7 @@ const ParsedAttrInfo &ParsedAttrInfo::get(const AttributeCommonInfo &A) { if (SyntaxUsed == AttributeCommonInfo::AS_ContextSensitiveKeyword) SyntaxUsed = AttributeCommonInfo::AS_Keyword; - for (auto &Ptr : *PluginAttrInstances) + for (auto &Ptr : getAttributePluginInstances()) for (auto &S : Ptr->Spellings) if (S.Syntax == SyntaxUsed && S.NormalizedFullName == FullName) return *Ptr; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits