https://github.com/kikairoya updated 
https://github.com/llvm/llvm-project/pull/176730

>From 090de35439d737bc7b1b80bc5fe12438ad9076d2 Mon Sep 17 00:00:00 2001
From: kikairoya <[email protected]>
Date: Mon, 19 Jan 2026 19:52:00 +0900
Subject: [PATCH 1/2] [clang][ssaf] Fix instantiation of
 `Registry<TUSummaryExtractor, TUSummaryBuilder &>`

---
 .../clang/Analysis/Scalable/TUSummary/ExtractorRegistry.h    | 2 +-
 clang/lib/Analysis/Scalable/TUSummary/ExtractorRegistry.cpp  | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git 
a/clang/include/clang/Analysis/Scalable/TUSummary/ExtractorRegistry.h 
b/clang/include/clang/Analysis/Scalable/TUSummary/ExtractorRegistry.h
index 13331b3673192..29f5925ed6af6 100644
--- a/clang/include/clang/Analysis/Scalable/TUSummary/ExtractorRegistry.h
+++ b/clang/include/clang/Analysis/Scalable/TUSummary/ExtractorRegistry.h
@@ -42,7 +42,7 @@ using TUSummaryExtractorRegistry =
 
 namespace llvm {
 extern template class CLANG_TEMPLATE_ABI
-    Registry<clang::ssaf::TUSummaryExtractorRegistry>;
+    Registry<clang::ssaf::TUSummaryExtractor, clang::ssaf::TUSummaryBuilder &>;
 } // namespace llvm
 
 #endif // LLVM_CLANG_ANALYSIS_SCALABLE_TUSUMMARY_EXTRACTORREGISTRY_H
diff --git a/clang/lib/Analysis/Scalable/TUSummary/ExtractorRegistry.cpp 
b/clang/lib/Analysis/Scalable/TUSummary/ExtractorRegistry.cpp
index 91eede1bebc77..8e3871126a2b3 100644
--- a/clang/lib/Analysis/Scalable/TUSummary/ExtractorRegistry.cpp
+++ b/clang/lib/Analysis/Scalable/TUSummary/ExtractorRegistry.cpp
@@ -12,7 +12,10 @@
 using namespace clang;
 using namespace ssaf;
 
-LLVM_INSTANTIATE_REGISTRY(TUSummaryExtractorRegistry)
+// FIXME: LLVM_INSTANTIATE_REGISTRY can't be used here because it drops extra
+// type parameters.
+template class CLANG_EXPORT_TEMPLATE
+    llvm::Registry<TUSummaryExtractor, TUSummaryBuilder &>;
 
 bool ssaf::isTUSummaryExtractorRegistered(llvm::StringRef SummaryName) {
   for (const auto &Entry : TUSummaryExtractorRegistry::entries())

>From 9c162a2d845e319abcb2bf456b6e913812af8412 Mon Sep 17 00:00:00 2001
From: kikairoya <[email protected]>
Date: Wed, 21 Jan 2026 19:46:56 +0900
Subject: [PATCH 2/2] add checks in Registry

---
 llvm/include/llvm/Support/Registry.h | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/llvm/include/llvm/Support/Registry.h 
b/llvm/include/llvm/Support/Registry.h
index 2c4a709e22960..ed1c6a5f08153 100644
--- a/llvm/include/llvm/Support/Registry.h
+++ b/llvm/include/llvm/Support/Registry.h
@@ -40,13 +40,25 @@ template <typename T, typename... CtorParamTypes> class 
SimpleRegistryEntry {
   }
 };
 
+template <typename T, typename... CtorParamTypes> class Registry;
+namespace detail {
+template <typename R> struct IsRegistryType : std::false_type {};
+template <typename T, typename... CtorParamTypes>
+struct IsRegistryType<Registry<T, CtorParamTypes...>> : std::true_type {};
+} // namespace detail
+
 /// A global registry used in conjunction with static constructors to make
 /// pluggable components (like targets or garbage collectors) "just work" when
 /// linked with an executable.
 template <typename T, typename... CtorParamTypes> class Registry {
+  static_assert(
+      !detail::IsRegistryType<T>::value,
+      "Trying to instantiate a wrong specialization 
'Registry<Registry<...>>'");
+
 public:
   using type = T;
   using entry = SimpleRegistryEntry<T, CtorParamTypes...>;
+  static constexpr bool HasCtorParamTypes = sizeof...(CtorParamTypes) != 0;
 
   class node;
   class iterator;
@@ -147,11 +159,17 @@ template <typename T, typename... CtorParamTypes> class 
Registry {
 #define LLVM_INSTANTIATE_REGISTRY(REGISTRY_CLASS)                              
\
   namespace llvm {                                                             
\
   template class LLVM_ABI_EXPORT Registry<REGISTRY_CLASS::type>;               
\
+  static_assert(!REGISTRY_CLASS::HasCtorParamTypes,                            
\
+                "LLVM_INSTANTIATE_REGISTRY can't be used with extra "          
\
+                "constructor parameter types");                                
\
   }
 #else
 #define LLVM_INSTANTIATE_REGISTRY(REGISTRY_CLASS)                              
\
   namespace llvm {                                                             
\
   template class Registry<REGISTRY_CLASS::type>;                               
\
+  static_assert(!REGISTRY_CLASS::HasCtorParamTypes,                            
\
+                "LLVM_INSTANTIATE_REGISTRY can't be used with extra "          
\
+                "constructor parameter types");                                
\
   }
 #endif
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to