diff options
| author | Shoaib Meenai <smeenai@fb.com> | 2016-12-05 18:01:35 +0000 |
|---|---|---|
| committer | Shoaib Meenai <smeenai@fb.com> | 2016-12-05 18:01:35 +0000 |
| commit | fc78d7cb8e5c0c849950fca7d69d81485f3513e1 (patch) | |
| tree | 80447485bbdcf3026d69292bbc6059f28a724f75 /clang/test/CodeGenCXX | |
| parent | c14916dae7f76938f0d1460a54b71154eaaecb79 (diff) | |
| download | bcm5719-llvm-fc78d7cb8e5c0c849950fca7d69d81485f3513e1.tar.gz bcm5719-llvm-fc78d7cb8e5c0c849950fca7d69d81485f3513e1.zip | |
[Sema] Respect DLL attributes more faithfully
On MSVC, if an implicit instantiation already exists and an explicit
instantiation definition with a DLL attribute is created, the DLL
attribute still takes effect. Make clang match this behavior for
exporting.
Differential Revision: https://reviews.llvm.org/D26657
llvm-svn: 288682
Diffstat (limited to 'clang/test/CodeGenCXX')
| -rw-r--r-- | clang/test/CodeGenCXX/dllexport.cpp | 7 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/windows-itanium-dllexport.cpp | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/dllexport.cpp b/clang/test/CodeGenCXX/dllexport.cpp index 7cef7c2d127..bf699ebe75c 100644 --- a/clang/test/CodeGenCXX/dllexport.cpp +++ b/clang/test/CodeGenCXX/dllexport.cpp @@ -771,6 +771,13 @@ USEMEMFUNC(ExplicitInstantiationDeclExportedDefTemplate<int>, f); // M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExplicitInstantiationDeclExportedDefTemplate* @"\01??0?$ExplicitInstantiationDeclExportedDefTemplate@H@@QAE@XZ" // G32-DAG: define weak_odr x86_thiscallcc void @_ZN44ExplicitInstantiationDeclExportedDefTemplateIiE1fEv +template <typename T> struct ImplicitInstantiationExplicitInstantiationDefExportedTemplate { void f() {} }; +ImplicitInstantiationExplicitInstantiationDefExportedTemplate<int> ImplicitInstantiationExplicitInstantiationDefExportedTemplateInstance; +template class __declspec(dllexport) ImplicitInstantiationExplicitInstantiationDefExportedTemplate<int>; +USEMEMFUNC(ImplicitInstantiationExplicitInstantiationDefExportedTemplate<int>, f); +// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?f@?$ImplicitInstantiationExplicitInstantiationDefExportedTemplate@H@@QAEXXZ" +// G32-DAG: define weak_odr x86_thiscallcc void @_ZN61ImplicitInstantiationExplicitInstantiationDefExportedTemplateIiE1fEv + namespace { struct InternalLinkageType {}; } struct __declspec(dllexport) PR23308 { void f(InternalLinkageType*); diff --git a/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp b/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp index 2b9b783e03e..92cca244428 100644 --- a/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp +++ b/clang/test/CodeGenCXX/windows-itanium-dllexport.cpp @@ -23,3 +23,8 @@ template class __declspec(dllexport) c<char>; // CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcEaSERKS0_ // CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcE1fEv +c<double> g; +template class __declspec(dllexport) c<double>; + +// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIdEaSERKS0_ +// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIdE1fEv |

