diff options
author | Nico Rieck <nico.rieck@gmail.com> | 2014-05-29 16:50:46 +0000 |
---|---|---|
committer | Nico Rieck <nico.rieck@gmail.com> | 2014-05-29 16:50:46 +0000 |
commit | d7ba66580dd291e8133207503cea46b245391423 (patch) | |
tree | 96352a8d6d5e1bc6f210035f4391365275006a75 /lib/CodeGen/CodeGenModule.cpp | |
parent | 6a916a67b03e1e7d9ec740ffbe9a5080778c7ee9 (diff) | |
download | clang-d7ba66580dd291e8133207503cea46b245391423.tar.gz clang-d7ba66580dd291e8133207503cea46b245391423.tar.bz2 clang-d7ba66580dd291e8133207503cea46b245391423.tar.xz |
MS ABI: Emit static data members with proper linkage
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209826 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 484373b20e..f42e67de0e 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/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<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. |