From b4662c3e5a543540bdde3c1326a6db12eaeac591 Mon Sep 17 00:00:00 2001 From: Nico Rieck Date: Thu, 29 May 2014 16:50:46 +0000 Subject: MS ABI: Emit static data members with proper linkage llvm-svn: 209826 --- clang/lib/CodeGen/CodeGenModule.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 484373b20ec..f42e67de0e8 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -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(D); if (getCXXABI().isInlineInitializedStaticDataMemberLinkOnce() && - isa(D) && - isVarDeclInlineInitializedStaticDataMember(cast(D))) + VD && isVarDeclInlineInitializedStaticDataMember(VD)) { + if (VD->hasAttr()) + return llvm::GlobalValue::AvailableExternallyLinkage; + if (VD->hasAttr()) + return llvm::GlobalValue::WeakODRLinkage; return llvm::GlobalValue::LinkOnceODRLinkage; + } // C++ doesn't have tentative definitions and thus cannot have common // linkage. -- cgit v1.2.3