|
@@ -2998,13 +2998,15 @@ static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM,
|
|
if (RD->hasAttr<DLLImportAttr>() &&
|
|
if (RD->hasAttr<DLLImportAttr>() &&
|
|
ShouldUseExternalRTTIDescriptor(CGM, Ty))
|
|
ShouldUseExternalRTTIDescriptor(CGM, Ty))
|
|
return llvm::GlobalValue::ExternalLinkage;
|
|
return llvm::GlobalValue::ExternalLinkage;
|
|
- // MinGW always uses LinkOnceODRLinkage for type info.
|
|
|
|
- if (RD->isDynamicClass() &&
|
|
|
|
- !CGM.getContext()
|
|
|
|
- .getTargetInfo()
|
|
|
|
- .getTriple()
|
|
|
|
- .isWindowsGNUEnvironment())
|
|
|
|
- return CGM.getVTableLinkage(RD);
|
|
|
|
|
|
+ if (RD->isDynamicClass()) {
|
|
|
|
+ llvm::GlobalValue::LinkageTypes LT = CGM.getVTableLinkage(RD);
|
|
|
|
+ // MinGW won't export the RTTI information when there is a key function.
|
|
|
|
+ // Make sure we emit our own copy instead of attempting to dllimport it.
|
|
|
|
+ if (RD->hasAttr<DLLImportAttr>() &&
|
|
|
|
+ llvm::GlobalValue::isAvailableExternallyLinkage(LT))
|
|
|
|
+ LT = llvm::GlobalValue::LinkOnceODRLinkage;
|
|
|
|
+ return LT;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return llvm::GlobalValue::LinkOnceODRLinkage;
|
|
return llvm::GlobalValue::LinkOnceODRLinkage;
|