From a534b0f7bf0248bf90afe97110a34777e972f325 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 27 Jun 2008 03:10:24 +0000 Subject: [PATCH] when linking globals, make sure to preserve the address space of the global. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52810 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Linker/LinkModules.cpp | 12 ++++++++---- test/Linker/2008-06-26-AddressSpace.ll | 9 +++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 test/Linker/2008-06-26-AddressSpace.ll diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 1609c6c0e09..e02f7fe44c6 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -575,7 +575,8 @@ static bool LinkGlobals(Module *Dest, const Module *Src, GlobalVariable *NewDGV = new GlobalVariable(SGV->getType()->getElementType(), SGV->isConstant(), SGV->getLinkage(), /*init*/0, - SGV->getName(), Dest); + SGV->getName(), Dest, false, + SGV->getType()->getAddressSpace()); // Propagate alignment, visibility and section info. CopyGVAttributes(NewDGV, SGV); @@ -599,7 +600,8 @@ static bool LinkGlobals(Module *Dest, const Module *Src, GlobalVariable *NewDGV = new GlobalVariable(SGV->getType()->getElementType(), SGV->isConstant(), SGV->getLinkage(), /*init*/0, - "", Dest); + "", Dest, false, + SGV->getType()->getAddressSpace()); // Set alignment allowing CopyGVAttributes merge it with alignment of SGV. NewDGV->setAlignment(DGV->getAlignment()); @@ -634,7 +636,8 @@ static bool LinkGlobals(Module *Dest, const Module *Src, GlobalVariable *NewDGV = new GlobalVariable(SGV->getType()->getElementType(), DGVar->isConstant(), DGVar->getLinkage(), - /*init*/0, DGVar->getName(), Dest); + /*init*/0, DGVar->getName(), Dest, false, + SGV->getType()->getAddressSpace()); CopyGVAttributes(NewDGV, DGVar); DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDGV, DGVar->getType())); @@ -1166,7 +1169,8 @@ static bool LinkAppendingVars(Module *M, // Create the new global variable... GlobalVariable *NG = new GlobalVariable(NewType, G1->isConstant(), G1->getLinkage(), - /*init*/0, First->first, M, G1->isThreadLocal()); + /*init*/0, First->first, M, G1->isThreadLocal(), + G1->getType()->getAddressSpace()); // Propagate alignment, visibility and section info. CopyGVAttributes(NG, G1); diff --git a/test/Linker/2008-06-26-AddressSpace.ll b/test/Linker/2008-06-26-AddressSpace.ll new file mode 100644 index 00000000000..ee475094f34 --- /dev/null +++ b/test/Linker/2008-06-26-AddressSpace.ll @@ -0,0 +1,9 @@ +; Test linking two functions with different prototypes and two globals +; in different modules. +; RUN: llvm-as %s -o %t.foo1.bc -f +; RUN: echo | llvm-as -o %t.foo2.bc -f +; RUN: llvm-link %t.foo2.bc %t.foo1.bc | llvm-dis | grep {addrspace(2)} +; RUN: llvm-link %t.foo1.bc %t.foo2.bc | llvm-dis | grep {addrspace(2)} +; rdar://6038021 + +@G = global i32 256 addrspace(2)