diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-10-27 16:21:54 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-10-27 16:21:54 +0000 |
commit | 354e712c81fbb07c0ce5f06180788b25fffa1b56 (patch) | |
tree | fdbfd22a1493fb51b2555952ae134f42fd605d35 /lib/CodeGen/CGDeclCXX.cpp | |
parent | 715c92aece8d2861ee5d7aa0a04253407b3b6f92 (diff) |
Do the guarding of instantiated static data members
on if its linkage is weak. Currently this is the
case but may change in the future. (part of radar
8562966).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117452 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGDeclCXX.cpp')
-rw-r--r-- | lib/CodeGen/CGDeclCXX.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp index 6d0806424d..6567ffb07d 100644 --- a/lib/CodeGen/CGDeclCXX.cpp +++ b/lib/CodeGen/CGDeclCXX.cpp @@ -257,11 +257,16 @@ void CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn, D->getInstantiatedFromStaticDataMember() && D->getInit()){ llvm::GlobalVariable *GV = dyn_cast<llvm::GlobalVariable>(DeclPtr); assert(GV && "GenerateCXXGlobalVarDeclInitFunc - GV is null"); - GV->setConstant(false); - EmitCXXStaticLocalInit(*D, GV); + llvm::GlobalValue::LinkageTypes Linkage = + CGM.GetLLVMLinkageVarDefinition(D, GV); + if (Linkage == llvm::GlobalVariable::WeakAnyLinkage) { + GV->setConstant(false); + EmitCXXStaticLocalInit(*D, GV); + FinishFunction(); + return; + } } - else - EmitCXXGlobalVarDeclInit(*D, DeclPtr); + EmitCXXGlobalVarDeclInit(*D, DeclPtr); FinishFunction(); } |