[PATCH] D61176: [MinGW] Do dllexport inline methods in template instantiation
Martin Storsjö via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 26 00:49:16 PDT 2019
mstorsjo created this revision.
mstorsjo added reviewers: rnk, hans, smeenai.
Herald added a project: clang.
Normally, in MinGW mode, inline methods aren't dllexported.
However, in the case of a dllimported template instantiation, the inline methods aren't instantiated locally, but referenced from the instantiation. Therefore, those methods also need to be dllexported, in the case of an instantiation.
GCC suffers from the same issue, reported at [1], but the issue is still unresolved there.
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89088
Repository:
rC Clang
https://reviews.llvm.org/D61176
Files:
lib/Sema/SemaDeclCXX.cpp
test/CodeGenCXX/mingw-template-dllexport.cpp
Index: test/CodeGenCXX/mingw-template-dllexport.cpp
===================================================================
--- test/CodeGenCXX/mingw-template-dllexport.cpp
+++ test/CodeGenCXX/mingw-template-dllexport.cpp
@@ -7,11 +7,9 @@
template <class T>
class c {
- void f();
+ void f() {}
};
-template <class T> void c<T>::f() {}
-
template class __declspec(dllexport) c<int>;
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIiE1fEv
Index: lib/Sema/SemaDeclCXX.cpp
===================================================================
--- lib/Sema/SemaDeclCXX.cpp
+++ lib/Sema/SemaDeclCXX.cpp
@@ -5726,9 +5726,12 @@
continue;
if (MD->isInlined()) {
- // MinGW does not import or export inline methods.
+ // MinGW does not import or export inline methods. But do it for
+ // template instantiations.
if (!Context.getTargetInfo().getCXXABI().isMicrosoft() &&
- !Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment())
+ !Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment() &&
+ TSK != TSK_ExplicitInstantiationDeclaration &&
+ TSK != TSK_ExplicitInstantiationDefinition)
continue;
// MSVC versions before 2015 don't export the move assignment operators
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61176.196812.patch
Type: text/x-patch
Size: 1301 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190426/89763f59/attachment.bin>
More information about the cfe-commits
mailing list