forked from OSchip/llvm-project
[Sema] Use MS ABI behavior for dllexport in Itanium
Similar to r284288, make the Itanium ABI follow MS ABI dllexport semantics in the case of an explicit instantiation declaration followed by a dllexport explicit instantiation definition. Differential Revision: https://reviews.llvm.org/D26471 llvm-svn: 286419
This commit is contained in:
parent
0d4778f841
commit
ab3f96cb21
|
@ -7674,7 +7674,8 @@ Sema::ActOnExplicitInstantiation(Scope *S,
|
|||
Def->setTemplateSpecializationKind(TSK);
|
||||
|
||||
if (!getDLLAttr(Def) && getDLLAttr(Specialization) &&
|
||||
Context.getTargetInfo().getCXXABI().isMicrosoft()) {
|
||||
(Context.getTargetInfo().getCXXABI().isMicrosoft() ||
|
||||
Context.getTargetInfo().getTriple().isWindowsItaniumEnvironment())) {
|
||||
// In the MS ABI, an explicit instantiation definition can add a dll
|
||||
// attribute to a template with a previous instantiation declaration.
|
||||
// MinGW doesn't allow this.
|
||||
|
|
|
@ -7,3 +7,19 @@ struct __declspec(dllexport) s {
|
|||
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1saSERKS_
|
||||
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1s1fEv
|
||||
|
||||
template <class T>
|
||||
class c {
|
||||
void f() {}
|
||||
};
|
||||
|
||||
template class __declspec(dllexport) c<int>;
|
||||
|
||||
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIiEaSERKS0_
|
||||
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIiE1fEv
|
||||
|
||||
extern template class c<char>;
|
||||
template class __declspec(dllexport) c<char>;
|
||||
|
||||
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcEaSERKS0_
|
||||
// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcE1fEv
|
||||
|
||||
|
|
Loading…
Reference in New Issue