mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
Fix asserts when linking wrong address space declarations
llvm-svn: 342858
This commit is contained in:
parent
213a338dfa
commit
8dff882c45
@ -978,11 +978,14 @@ Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV,
|
||||
// containing a GV from the source module, in which case SGV will be
|
||||
// the same as DGV and NewGV, and TypeMap.get() will assert since it
|
||||
// assumes it is being invoked on a type in the source module.
|
||||
if (DGV && NewGV != SGV)
|
||||
C = ConstantExpr::getBitCast(NewGV, TypeMap.get(SGV->getType()));
|
||||
if (DGV && NewGV != SGV) {
|
||||
C = ConstantExpr::getPointerBitCastOrAddrSpaceCast(
|
||||
NewGV, TypeMap.get(SGV->getType()));
|
||||
}
|
||||
|
||||
if (DGV && NewGV != DGV) {
|
||||
DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewGV, DGV->getType()));
|
||||
DGV->replaceAllUsesWith(
|
||||
ConstantExpr::getPointerBitCastOrAddrSpaceCast(NewGV, DGV->getType()));
|
||||
DGV->eraseFromParent();
|
||||
}
|
||||
|
||||
|
2
test/Linker/Inputs/wrong-addrspace-gv-declaration.ll
Normal file
2
test/Linker/Inputs/wrong-addrspace-gv-declaration.ll
Normal file
@ -0,0 +1,2 @@
|
||||
@is_really_as1_gv = addrspace(1) global i32 0, align 4
|
||||
@is_really_as1_gv_other_type = addrspace(1) global float 4.0, align 4
|
17
test/Linker/wrong-addrspace-gv-declaration.ll
Normal file
17
test/Linker/wrong-addrspace-gv-declaration.ll
Normal file
@ -0,0 +1,17 @@
|
||||
; RUN: llvm-link %s %p/Inputs/wrong-addrspace-gv-declaration.ll -S | FileCheck %s
|
||||
; RUN: llvm-link %p/Inputs/wrong-addrspace-gv-declaration.ll %s -S | FileCheck %s
|
||||
|
||||
; The address space is declared incorrectly here, so an addrspacecast
|
||||
; is needed to link.
|
||||
|
||||
@is_really_as1_gv = external global i32
|
||||
@is_really_as1_gv_other_type = external global i32
|
||||
|
||||
; CHECK-LABEL: @foo(
|
||||
; CHECK: %load0 = load volatile i32, i32* addrspacecast (i32 addrspace(1)* @is_really_as1_gv to i32*), align 4
|
||||
; CHECK: %load1 = load volatile i32, i32* addrspacecast (i32 addrspace(1)* bitcast (float addrspace(1)* @is_really_as1_gv_other_type to i32 addrspace(1)*) to i32*), align 4
|
||||
define void @foo() {
|
||||
%load0 = load volatile i32, i32* @is_really_as1_gv, align 4
|
||||
%load1 = load volatile i32, i32* @is_really_as1_gv_other_type, align 4
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user