It's valid to take the blockaddress of a different function, so remove this

assert in the bitcode writer. No change needed because the ValueEnumerator holds
a whole-module numbering anyhow. Fixes PR9857!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131016 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky 2011-05-06 21:09:44 +00:00
parent ce1cdac942
commit 308fba5fe2
2 changed files with 30 additions and 2 deletions

View File

@ -871,8 +871,6 @@ static void WriteConstants(unsigned FirstVal, unsigned LastVal,
break; break;
} }
} else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) { } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
assert(BA->getFunction() == BA->getBasicBlock()->getParent() &&
"Malformed blockaddress");
Code = bitc::CST_CODE_BLOCKADDRESS; Code = bitc::CST_CODE_BLOCKADDRESS;
Record.push_back(VE.getTypeID(BA->getFunction()->getType())); Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
Record.push_back(VE.getValueID(BA->getFunction())); Record.push_back(VE.getValueID(BA->getFunction()));

View File

@ -0,0 +1,30 @@
; RUN: llvm-as < %s | llvm-dis | FileCheck %s
; PR9857
define void @f(i8** nocapture %ptr1) {
; CHECK: define void @f
entry:
br label %here.i
here.i:
store i8* blockaddress(@doit, %here), i8** %ptr1, align 8
; CHECK: blockaddress(@doit, %here)
br label %doit.exit
doit.exit:
ret void
}
define void @doit(i8** nocapture %pptr) {
; CHECK: define void @doit
entry:
br label %here
here:
store i8* blockaddress(@doit, %here), i8** %pptr, align 8
; CHECK: blockaddress(@doit, %here)
br label %end
end:
ret void
}