[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2025-03-10 Thread Mike Hommey via cfe-commits

glandium wrote:

Ironically, this and later changes related to LLVM_BUILD_LLVM_DYLIB for Windows 
broke  LLVM_EXPORT_SYMBOLS_FOR_PLUGINS, which is a currently working way to use 
clang plugins on Windows, while LLVM_BUILD_LLVM_DYLIB doesn't work yet.

https://github.com/llvm/llvm-project/pull/112640
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-25 Thread Nico Weber via cfe-commits

nico wrote:

This seems to break building of clang-tools-extra binaries: 
http://45.33.8.238/win/95986/step_3.txt

Please take a look and revert for now if it takes a while to fix.

https://github.com/llvm/llvm-project/pull/112640
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-24 Thread Thomas Fransham via cfe-commits

fsfod wrote:

The fix for the gn build system would be to unconditionally define 
CLANG_BUILD_STATIC for the windows platform for now.

https://github.com/llvm/llvm-project/pull/112640
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-24 Thread Thomas Fransham via cfe-commits

fsfod wrote:

Its strange that visibility macros are enabled for windows but its not a shared 
library build, idk if the gn build script need to be manually updated to define 
the macros correctly to turn off visibility macros by default.

https://github.com/llvm/llvm-project/pull/112640
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-22 Thread Vassil Vassilev via cfe-commits

https://github.com/vgvassilev closed 
https://github.com/llvm/llvm-project/pull/112640
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-16 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-tidy

Author: Thomas Fransham (fsfod)


Changes

Fix missing extern templates for llvm::Registry use in other projects of llvm

Windows doesn't implicitly import and merge exported symbols across shared 
libraries
like Linux does so we need to explicitly export/import each instantiation of 
llvm::Registry.
Updated LLVM_INSTANTIATE_REGISTRY to just be a full explicit template 
instantiation.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on 
window.

---
Full diff: https://github.com/llvm/llvm-project/pull/112640.diff


15 Files Affected:

- (modified) clang-tools-extra/clang-doc/Generators.h (+4) 
- (modified) clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h (+4) 
- (modified) clang-tools-extra/clangd/URI.h (+4) 
- (modified) clang-tools-extra/clangd/refactor/Tweak.h (+4) 
- (modified) 
clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 (+4) 
- (modified) clang/include/clang/Basic/ParsedAttrInfo.h (+5) 
- (modified) clang/include/clang/Frontend/FrontendPluginRegistry.h (+5) 
- (modified) clang/include/clang/Lex/Preprocessor.h (+5) 
- (modified) clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h 
(+6) 
- (modified) clang/include/clang/Tooling/ToolExecutorPluginRegistry.h (+6) 
- (modified) flang/include/flang/Frontend/FrontendPluginRegistry.h (+4) 
- (modified) llvm/include/llvm/CodeGen/GCMetadataPrinter.h (+2) 
- (modified) llvm/include/llvm/IR/GCStrategy.h (+2) 
- (modified) llvm/include/llvm/Support/Compiler.h (+11) 
- (modified) llvm/include/llvm/Support/Registry.h (+34-30) 


``diff
diff --git a/clang-tools-extra/clang-doc/Generators.h 
b/clang-tools-extra/clang-doc/Generators.h
index ba0ef64d3d0f5f..d62d7faa9a69f3 100644
--- a/clang-tools-extra/clang-doc/Generators.h
+++ b/clang-tools-extra/clang-doc/Generators.h
@@ -55,4 +55,8 @@ std::string getTagType(TagTypeKind AS);
 } // namespace doc
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H
diff --git a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h 
b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
index 78d914bfedbc94..8a07b05c26446c 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
@@ -18,4 +18,8 @@ using ClangTidyModuleRegistry = 
llvm::Registry;
 
 } // namespace clang::tidy
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYMODULEREGISTRY_H
diff --git a/clang-tools-extra/clangd/URI.h b/clang-tools-extra/clangd/URI.h
index 7f3bc9d1645a8f..d4629f17551cca 100644
--- a/clang-tools-extra/clangd/URI.h
+++ b/clang-tools-extra/clangd/URI.h
@@ -133,4 +133,8 @@ typedef llvm::Registry URISchemeRegistry;
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_URI_H
diff --git a/clang-tools-extra/clangd/refactor/Tweak.h 
b/clang-tools-extra/clangd/refactor/Tweak.h
index 2769b401d89439..257f44a285f88a 100644
--- a/clang-tools-extra/clangd/refactor/Tweak.h
+++ b/clang-tools-extra/clangd/refactor/Tweak.h
@@ -147,4 +147,8 @@ prepareTweak(StringRef ID, const Tweak::Selection &S,
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
index 98aee5f277cf18..b07b9ed1ac25f5 100644
--- 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
+++ 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
@@ -46,4 +46,8 @@ using IncludeSpellingStrategy = 
llvm::Registry;
 std::string spellHeader(const IncludeSpeller::Input &Input);
 } // namespace clang::include_cleaner
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git a/clang/include/clang/Basic/ParsedAttrInfo.h 
b/clang/include/clang/Basic/ParsedAttrInfo.h
index fab5c6f1377d27..3b5f5d3c3f92ac 100644
--- a/clang/include/clang/Basic/ParsedAttrInfo.h
+++ b/clang/include/clang/Basic/ParsedAttrInfo.h
@@ -17,6 +17,7 @@
 
 #include "clang/Basic/AttrSubjectMatchRules.h"
 #include "clang/Basic/AttributeCommonInfo.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Support/Registry.h"
 #include 
@@ -175,4 +176,8 @@ const std::list> 
&getAttributePluginInstances();
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
diff --git a/clang/include/clang/Frontend/FrontendPluginRegistry.h 
b/clang/include/clang/Frontend/FrontendPluginRegistry.

[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-16 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-llvm-ir

Author: Thomas Fransham (fsfod)


Changes

Fix missing extern templates for llvm::Registry use in other projects of llvm

Windows doesn't implicitly import and merge exported symbols across shared 
libraries
like Linux does so we need to explicitly export/import each instantiation of 
llvm::Registry.
Updated LLVM_INSTANTIATE_REGISTRY to just be a full explicit template 
instantiation.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on 
window.

---
Full diff: https://github.com/llvm/llvm-project/pull/112640.diff


15 Files Affected:

- (modified) clang-tools-extra/clang-doc/Generators.h (+4) 
- (modified) clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h (+4) 
- (modified) clang-tools-extra/clangd/URI.h (+4) 
- (modified) clang-tools-extra/clangd/refactor/Tweak.h (+4) 
- (modified) 
clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 (+4) 
- (modified) clang/include/clang/Basic/ParsedAttrInfo.h (+5) 
- (modified) clang/include/clang/Frontend/FrontendPluginRegistry.h (+5) 
- (modified) clang/include/clang/Lex/Preprocessor.h (+5) 
- (modified) clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h 
(+6) 
- (modified) clang/include/clang/Tooling/ToolExecutorPluginRegistry.h (+6) 
- (modified) flang/include/flang/Frontend/FrontendPluginRegistry.h (+4) 
- (modified) llvm/include/llvm/CodeGen/GCMetadataPrinter.h (+2) 
- (modified) llvm/include/llvm/IR/GCStrategy.h (+2) 
- (modified) llvm/include/llvm/Support/Compiler.h (+11) 
- (modified) llvm/include/llvm/Support/Registry.h (+34-30) 


``diff
diff --git a/clang-tools-extra/clang-doc/Generators.h 
b/clang-tools-extra/clang-doc/Generators.h
index ba0ef64d3d0f5f..d62d7faa9a69f3 100644
--- a/clang-tools-extra/clang-doc/Generators.h
+++ b/clang-tools-extra/clang-doc/Generators.h
@@ -55,4 +55,8 @@ std::string getTagType(TagTypeKind AS);
 } // namespace doc
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H
diff --git a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h 
b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
index 78d914bfedbc94..8a07b05c26446c 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
@@ -18,4 +18,8 @@ using ClangTidyModuleRegistry = 
llvm::Registry;
 
 } // namespace clang::tidy
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYMODULEREGISTRY_H
diff --git a/clang-tools-extra/clangd/URI.h b/clang-tools-extra/clangd/URI.h
index 7f3bc9d1645a8f..d4629f17551cca 100644
--- a/clang-tools-extra/clangd/URI.h
+++ b/clang-tools-extra/clangd/URI.h
@@ -133,4 +133,8 @@ typedef llvm::Registry URISchemeRegistry;
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_URI_H
diff --git a/clang-tools-extra/clangd/refactor/Tweak.h 
b/clang-tools-extra/clangd/refactor/Tweak.h
index 2769b401d89439..257f44a285f88a 100644
--- a/clang-tools-extra/clangd/refactor/Tweak.h
+++ b/clang-tools-extra/clangd/refactor/Tweak.h
@@ -147,4 +147,8 @@ prepareTweak(StringRef ID, const Tweak::Selection &S,
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
index 98aee5f277cf18..b07b9ed1ac25f5 100644
--- 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
+++ 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
@@ -46,4 +46,8 @@ using IncludeSpellingStrategy = 
llvm::Registry;
 std::string spellHeader(const IncludeSpeller::Input &Input);
 } // namespace clang::include_cleaner
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git a/clang/include/clang/Basic/ParsedAttrInfo.h 
b/clang/include/clang/Basic/ParsedAttrInfo.h
index fab5c6f1377d27..3b5f5d3c3f92ac 100644
--- a/clang/include/clang/Basic/ParsedAttrInfo.h
+++ b/clang/include/clang/Basic/ParsedAttrInfo.h
@@ -17,6 +17,7 @@
 
 #include "clang/Basic/AttrSubjectMatchRules.h"
 #include "clang/Basic/AttributeCommonInfo.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Support/Registry.h"
 #include 
@@ -175,4 +176,8 @@ const std::list> 
&getAttributePluginInstances();
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
diff --git a/clang/include/clang/Frontend/FrontendPluginRegistry.h 
b/clang/include/clang/Frontend/FrontendPluginRegistry.h
i

[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-16 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-flang-driver

Author: Thomas Fransham (fsfod)


Changes

Fix missing extern templates for llvm::Registry use in other projects of llvm

Windows doesn't implicitly import and merge exported symbols across shared 
libraries
like Linux does so we need to explicitly export/import each instantiation of 
llvm::Registry.
Updated LLVM_INSTANTIATE_REGISTRY to just be a full explicit template 
instantiation.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on 
window.

---
Full diff: https://github.com/llvm/llvm-project/pull/112640.diff


15 Files Affected:

- (modified) clang-tools-extra/clang-doc/Generators.h (+4) 
- (modified) clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h (+4) 
- (modified) clang-tools-extra/clangd/URI.h (+4) 
- (modified) clang-tools-extra/clangd/refactor/Tweak.h (+4) 
- (modified) 
clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 (+4) 
- (modified) clang/include/clang/Basic/ParsedAttrInfo.h (+5) 
- (modified) clang/include/clang/Frontend/FrontendPluginRegistry.h (+5) 
- (modified) clang/include/clang/Lex/Preprocessor.h (+5) 
- (modified) clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h 
(+6) 
- (modified) clang/include/clang/Tooling/ToolExecutorPluginRegistry.h (+6) 
- (modified) flang/include/flang/Frontend/FrontendPluginRegistry.h (+4) 
- (modified) llvm/include/llvm/CodeGen/GCMetadataPrinter.h (+2) 
- (modified) llvm/include/llvm/IR/GCStrategy.h (+2) 
- (modified) llvm/include/llvm/Support/Compiler.h (+11) 
- (modified) llvm/include/llvm/Support/Registry.h (+34-30) 


``diff
diff --git a/clang-tools-extra/clang-doc/Generators.h 
b/clang-tools-extra/clang-doc/Generators.h
index ba0ef64d3d0f5f..d62d7faa9a69f3 100644
--- a/clang-tools-extra/clang-doc/Generators.h
+++ b/clang-tools-extra/clang-doc/Generators.h
@@ -55,4 +55,8 @@ std::string getTagType(TagTypeKind AS);
 } // namespace doc
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H
diff --git a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h 
b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
index 78d914bfedbc94..8a07b05c26446c 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
@@ -18,4 +18,8 @@ using ClangTidyModuleRegistry = 
llvm::Registry;
 
 } // namespace clang::tidy
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYMODULEREGISTRY_H
diff --git a/clang-tools-extra/clangd/URI.h b/clang-tools-extra/clangd/URI.h
index 7f3bc9d1645a8f..d4629f17551cca 100644
--- a/clang-tools-extra/clangd/URI.h
+++ b/clang-tools-extra/clangd/URI.h
@@ -133,4 +133,8 @@ typedef llvm::Registry URISchemeRegistry;
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_URI_H
diff --git a/clang-tools-extra/clangd/refactor/Tweak.h 
b/clang-tools-extra/clangd/refactor/Tweak.h
index 2769b401d89439..257f44a285f88a 100644
--- a/clang-tools-extra/clangd/refactor/Tweak.h
+++ b/clang-tools-extra/clangd/refactor/Tweak.h
@@ -147,4 +147,8 @@ prepareTweak(StringRef ID, const Tweak::Selection &S,
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
index 98aee5f277cf18..b07b9ed1ac25f5 100644
--- 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
+++ 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
@@ -46,4 +46,8 @@ using IncludeSpellingStrategy = 
llvm::Registry;
 std::string spellHeader(const IncludeSpeller::Input &Input);
 } // namespace clang::include_cleaner
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git a/clang/include/clang/Basic/ParsedAttrInfo.h 
b/clang/include/clang/Basic/ParsedAttrInfo.h
index fab5c6f1377d27..3b5f5d3c3f92ac 100644
--- a/clang/include/clang/Basic/ParsedAttrInfo.h
+++ b/clang/include/clang/Basic/ParsedAttrInfo.h
@@ -17,6 +17,7 @@
 
 #include "clang/Basic/AttrSubjectMatchRules.h"
 #include "clang/Basic/AttributeCommonInfo.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Support/Registry.h"
 #include 
@@ -175,4 +176,8 @@ const std::list> 
&getAttributePluginInstances();
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
diff --git a/clang/include/clang/Frontend/FrontendPluginRegistry.h 
b/clang/include/clang/Frontend/FrontendPluginRegistr

[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-16 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-tools-extra

Author: Thomas Fransham (fsfod)


Changes

Fix missing extern templates for llvm::Registry use in other projects of llvm

Windows doesn't implicitly import and merge exported symbols across shared 
libraries
like Linux does so we need to explicitly export/import each instantiation of 
llvm::Registry.
Updated LLVM_INSTANTIATE_REGISTRY to just be a full explicit template 
instantiation.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on 
window.

---
Full diff: https://github.com/llvm/llvm-project/pull/112640.diff


15 Files Affected:

- (modified) clang-tools-extra/clang-doc/Generators.h (+4) 
- (modified) clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h (+4) 
- (modified) clang-tools-extra/clangd/URI.h (+4) 
- (modified) clang-tools-extra/clangd/refactor/Tweak.h (+4) 
- (modified) 
clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 (+4) 
- (modified) clang/include/clang/Basic/ParsedAttrInfo.h (+5) 
- (modified) clang/include/clang/Frontend/FrontendPluginRegistry.h (+5) 
- (modified) clang/include/clang/Lex/Preprocessor.h (+5) 
- (modified) clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h 
(+6) 
- (modified) clang/include/clang/Tooling/ToolExecutorPluginRegistry.h (+6) 
- (modified) flang/include/flang/Frontend/FrontendPluginRegistry.h (+4) 
- (modified) llvm/include/llvm/CodeGen/GCMetadataPrinter.h (+2) 
- (modified) llvm/include/llvm/IR/GCStrategy.h (+2) 
- (modified) llvm/include/llvm/Support/Compiler.h (+11) 
- (modified) llvm/include/llvm/Support/Registry.h (+34-30) 


``diff
diff --git a/clang-tools-extra/clang-doc/Generators.h 
b/clang-tools-extra/clang-doc/Generators.h
index ba0ef64d3d0f5f..d62d7faa9a69f3 100644
--- a/clang-tools-extra/clang-doc/Generators.h
+++ b/clang-tools-extra/clang-doc/Generators.h
@@ -55,4 +55,8 @@ std::string getTagType(TagTypeKind AS);
 } // namespace doc
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_GENERATOR_H
diff --git a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h 
b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
index 78d914bfedbc94..8a07b05c26446c 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyModuleRegistry.h
@@ -18,4 +18,8 @@ using ClangTidyModuleRegistry = 
llvm::Registry;
 
 } // namespace clang::tidy
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYMODULEREGISTRY_H
diff --git a/clang-tools-extra/clangd/URI.h b/clang-tools-extra/clangd/URI.h
index 7f3bc9d1645a8f..d4629f17551cca 100644
--- a/clang-tools-extra/clangd/URI.h
+++ b/clang-tools-extra/clangd/URI.h
@@ -133,4 +133,8 @@ typedef llvm::Registry URISchemeRegistry;
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_URI_H
diff --git a/clang-tools-extra/clangd/refactor/Tweak.h 
b/clang-tools-extra/clangd/refactor/Tweak.h
index 2769b401d89439..257f44a285f88a 100644
--- a/clang-tools-extra/clangd/refactor/Tweak.h
+++ b/clang-tools-extra/clangd/refactor/Tweak.h
@@ -147,4 +147,8 @@ prepareTweak(StringRef ID, const Tweak::Selection &S,
 } // namespace clangd
 } // namespace clang
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
index 98aee5f277cf18..b07b9ed1ac25f5 100644
--- 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
+++ 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/IncludeSpeller.h
@@ -46,4 +46,8 @@ using IncludeSpellingStrategy = 
llvm::Registry;
 std::string spellHeader(const IncludeSpeller::Input &Input);
 } // namespace clang::include_cleaner
 
+namespace llvm {
+extern template class Registry;
+} // namespace llvm
+
 #endif
diff --git a/clang/include/clang/Basic/ParsedAttrInfo.h 
b/clang/include/clang/Basic/ParsedAttrInfo.h
index fab5c6f1377d27..3b5f5d3c3f92ac 100644
--- a/clang/include/clang/Basic/ParsedAttrInfo.h
+++ b/clang/include/clang/Basic/ParsedAttrInfo.h
@@ -17,6 +17,7 @@
 
 #include "clang/Basic/AttrSubjectMatchRules.h"
 #include "clang/Basic/AttributeCommonInfo.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Support/Registry.h"
 #include 
@@ -175,4 +176,8 @@ const std::list> 
&getAttributePluginInstances();
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
diff --git a/clang/include/clang/Frontend/FrontendPluginRegistry.h 
b/clang/include/clang/Frontend/FrontendPluginRe

[clang] [clang-tools-extra] [flang] [llvm] Reland 'Update llvm::Registry to work for LLVM shared library builds on windows' (#109024) (PR #112640)

2024-10-16 Thread Thomas Fransham via cfe-commits

https://github.com/fsfod created 
https://github.com/llvm/llvm-project/pull/112640

Fix missing extern templates for llvm::Registry use in other projects of llvm

Windows doesn't implicitly import and merge exported symbols across shared 
libraries
like Linux does so we need to explicitly export/import each instantiation of 
llvm::Registry.
Updated LLVM_INSTANTIATE_REGISTRY to just be a full explicit template 
instantiation.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on 
window.

>From e770dd1de2d61532aed00b457f297ab056f84cfc Mon Sep 17 00:00:00 2001
From: Thomas Fransham 
Date: Wed, 28 Aug 2024 16:08:52 +0100
Subject: [PATCH 1/3] Reland 'Update llvm::Registry to work for LLVM shared
 library builds on windows' (#109024)

Fix missing extern templates for llvm::Registry use in other projects of llvm

Windows doesn't implicitly import and merge exported symbols across shared 
libraries
like Linux does so we need to explicitly export/import each instantiation of 
llvm::Registry.
Updated LLVM_INSTANTIATE_REGISTRY to just be a full explicit template 
instantiation.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on 
window.
---
 clang/include/clang/Basic/ParsedAttrInfo.h|  5 ++
 .../clang/Frontend/FrontendPluginRegistry.h   |  5 ++
 clang/include/clang/Lex/Preprocessor.h|  5 ++
 .../CompilationDatabasePluginRegistry.h   |  6 ++
 .../Tooling/ToolExecutorPluginRegistry.h  |  6 ++
 llvm/include/llvm/CodeGen/GCMetadataPrinter.h |  2 +
 llvm/include/llvm/IR/GCStrategy.h |  2 +
 llvm/include/llvm/Support/Compiler.h  | 11 
 llvm/include/llvm/Support/Registry.h  | 64 ++-
 9 files changed, 76 insertions(+), 30 deletions(-)

diff --git a/clang/include/clang/Basic/ParsedAttrInfo.h 
b/clang/include/clang/Basic/ParsedAttrInfo.h
index fab5c6f1377d27..3b5f5d3c3f92ac 100644
--- a/clang/include/clang/Basic/ParsedAttrInfo.h
+++ b/clang/include/clang/Basic/ParsedAttrInfo.h
@@ -17,6 +17,7 @@
 
 #include "clang/Basic/AttrSubjectMatchRules.h"
 #include "clang/Basic/AttributeCommonInfo.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Support/Registry.h"
 #include 
@@ -175,4 +176,8 @@ const std::list> 
&getAttributePluginInstances();
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_BASIC_PARSEDATTRINFO_H
diff --git a/clang/include/clang/Frontend/FrontendPluginRegistry.h 
b/clang/include/clang/Frontend/FrontendPluginRegistry.h
index 810578534acb45..5eea9c2fd89a32 100644
--- a/clang/include/clang/Frontend/FrontendPluginRegistry.h
+++ b/clang/include/clang/Frontend/FrontendPluginRegistry.h
@@ -14,6 +14,7 @@
 #define LLVM_CLANG_FRONTEND_FRONTENDPLUGINREGISTRY_H
 
 #include "clang/Frontend/FrontendAction.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/Support/Registry.h"
 
 namespace clang {
@@ -23,4 +24,8 @@ using FrontendPluginRegistry = 
llvm::Registry;
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_FRONTEND_FRONTENDPLUGINREGISTRY_H
diff --git a/clang/include/clang/Lex/Preprocessor.h 
b/clang/include/clang/Lex/Preprocessor.h
index 4643b0213815f8..92749e4de44b57 100644
--- a/clang/include/clang/Lex/Preprocessor.h
+++ b/clang/include/clang/Lex/Preprocessor.h
@@ -32,6 +32,7 @@
 #include "clang/Lex/PPEmbedParameters.h"
 #include "clang/Lex/Token.h"
 #include "clang/Lex/TokenLexer.h"
+#include "clang/Support/Compiler.h"
 #include "llvm/ADT/APSInt.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
@@ -3060,4 +3061,8 @@ using PragmaHandlerRegistry = 
llvm::Registry;
 
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_LEX_PREPROCESSOR_H
diff --git a/clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h 
b/clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h
index 8c58ad926a402a..e6bcac542b0ecb 100644
--- a/clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h
+++ b/clang/include/clang/Tooling/CompilationDatabasePluginRegistry.h
@@ -9,6 +9,7 @@
 #ifndef LLVM_CLANG_TOOLING_COMPILATIONDATABASEPLUGINREGISTRY_H
 #define LLVM_CLANG_TOOLING_COMPILATIONDATABASEPLUGINREGISTRY_H
 
+#include "clang/Support/Compiler.h"
 #include "clang/Tooling/CompilationDatabase.h"
 #include "llvm/Support/Registry.h"
 
@@ -42,4 +43,9 @@ using CompilationDatabasePluginRegistry =
 } // namespace tooling
 } // namespace clang
 
+namespace llvm {
+extern template class CLANG_TEMPLATE_ABI
+Registry;
+} // namespace llvm
+
 #endif // LLVM_CLANG_TOOLING_COMPILATIONDATABASEPLUGINREGISTRY_H
diff --git a/clang/include/clang/Tooling/ToolExecutorPluginRegistry.h 
b/clang/include/clang/Tooling/ToolExecutorPluginRegistry.h
index 5304ff26252def..8d54583234684e 100644
--- a/clang/include/clang/To