MS ABI: Emit static data members with proper linkage

llvm-svn: 209826
This commit is contained in:
Nico Rieck
2014-05-29 16:50:46 +00:00
parent 078d2f89cd
commit b4662c3e5a
3 changed files with 19 additions and 23 deletions

View File

@@ -1964,10 +1964,15 @@ llvm::GlobalValue::LinkageTypes CodeGenModule::getLLVMLinkageForDeclarator(
// If required by the ABI, give definitions of static data members with inline
// initializers at least linkonce_odr linkage.
auto const VD = dyn_cast<VarDecl>(D);
if (getCXXABI().isInlineInitializedStaticDataMemberLinkOnce() &&
isa<VarDecl>(D) &&
isVarDeclInlineInitializedStaticDataMember(cast<VarDecl>(D)))
VD && isVarDeclInlineInitializedStaticDataMember(VD)) {
if (VD->hasAttr<DLLImportAttr>())
return llvm::GlobalValue::AvailableExternallyLinkage;
if (VD->hasAttr<DLLExportAttr>())
return llvm::GlobalValue::WeakODRLinkage;
return llvm::GlobalValue::LinkOnceODRLinkage;
}
// C++ doesn't have tentative definitions and thus cannot have common
// linkage.