wanders created this revision. wanders added a reviewer: aaron.ballman. Herald added a project: All. wanders requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
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. Depends on D144402 <https://reviews.llvm.org/D144402> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D144403 Files: clang/include/clang/Basic/ParsedAttrInfo.h clang/lib/Basic/ParsedAttrInfo.cpp clang/lib/Sema/ParsedAttr.cpp Index: clang/lib/Sema/ParsedAttr.cpp =================================================================== --- clang/lib/Sema/ParsedAttr.cpp +++ 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 @@ 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 @@ 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; Index: clang/lib/Basic/ParsedAttrInfo.cpp =================================================================== --- clang/lib/Basic/ParsedAttrInfo.cpp +++ 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; +} Index: clang/include/clang/Basic/ParsedAttrInfo.h =================================================================== --- clang/include/clang/Basic/ParsedAttrInfo.h +++ 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 @@ typedef llvm::Registry<ParsedAttrInfo> ParsedAttrInfoRegistry; +const std::list<std::unique_ptr<ParsedAttrInfo>> &getAttributePluginInstances(); + } // namespace clang #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
Index: clang/lib/Sema/ParsedAttr.cpp =================================================================== --- clang/lib/Sema/ParsedAttr.cpp +++ 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 @@ 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 @@ 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; Index: clang/lib/Basic/ParsedAttrInfo.cpp =================================================================== --- clang/lib/Basic/ParsedAttrInfo.cpp +++ 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; +} Index: clang/include/clang/Basic/ParsedAttrInfo.h =================================================================== --- clang/include/clang/Basic/ParsedAttrInfo.h +++ 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 @@ typedef llvm::Registry<ParsedAttrInfo> ParsedAttrInfoRegistry; +const std::list<std::unique_ptr<ParsedAttrInfo>> &getAttributePluginInstances(); + } // namespace clang #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits