Small cleanup on how we clear constant variables. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 5 Dec 2014 16:05:19 +0000 (16:05 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 5 Dec 2014 16:05:19 +0000 (16:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223474 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Linker/LinkModules.cpp

index 561b02136b87c1b7ced134cf3b216739ff020e07..4aa0b88df5bff7c1787b075d9e28f1045b046002 100644 (file)
@@ -1045,6 +1045,14 @@ bool ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) {
       NewGO->setAlignment(std::max(DGV->getAlignment(), SGV->getAlignment()));
   }
 
+  if (auto *NewGVar = dyn_cast<GlobalVariable>(NewGV)) {
+    auto *DGVar = dyn_cast_or_null<GlobalVariable>(DGV);
+    auto *SGVar = dyn_cast<GlobalVariable>(SGV);
+    if (DGVar && SGVar && DGVar->isDeclaration() && SGVar->isDeclaration() &&
+        (!DGVar->isConstant() || !SGVar->isConstant()))
+      NewGVar->setConstant(false);
+  }
+
   // Make sure to remember this mapping.
   if (NewGV != DGV) {
     if (DGV) {
@@ -1062,21 +1070,8 @@ bool ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) {
 GlobalValue *ModuleLinker::linkGlobalVariableProto(const GlobalVariable *SGVar,
                                                    GlobalValue *DGV,
                                                    bool LinkFromSrc) {
-  bool ClearConstant = false;
-
-  if (DGV) {
-    auto *DGVar = dyn_cast<GlobalVariable>(DGV);
-    if (!SGVar->isConstant() || (DGVar && !DGVar->isConstant()))
-      ClearConstant = true;
-  }
-
-  if (!LinkFromSrc) {
-    if (auto *NewGVar = dyn_cast<GlobalVariable>(DGV)) {
-      if (NewGVar->isDeclaration() && ClearConstant)
-        NewGVar->setConstant(false);
-    }
+  if (!LinkFromSrc)
     return DGV;
-  }
 
   // No linking to be performed or linking from the source: simply create an
   // identical version of the symbol over in the dest module... the