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
diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp
index 6d08064..6567ffb 100644
--- a/lib/CodeGen/CGDeclCXX.cpp
+++ b/lib/CodeGen/CGDeclCXX.cpp
@@ -257,11 +257,16 @@
       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();
 }