forked from OSchip/llvm-project
Fix PR6673: updating the callback should not clear the map.
llvm-svn: 99227
This commit is contained in:
parent
8d04f0604e
commit
b1c4f62cac
|
@ -44,6 +44,10 @@ public:
|
|||
MMIAddrLabelMapCallbackPtr() : Map(0) {}
|
||||
MMIAddrLabelMapCallbackPtr(Value *V) : CallbackVH(V), Map(0) {}
|
||||
|
||||
void setPtr(BasicBlock *BB) {
|
||||
ValueHandleBase::operator=(BB);
|
||||
}
|
||||
|
||||
void setMap(MMIAddrLabelMap *map) { Map = map; }
|
||||
|
||||
virtual void deleted();
|
||||
|
@ -209,7 +213,7 @@ void MMIAddrLabelMap::UpdateForRAUWBlock(BasicBlock *Old, BasicBlock *New) {
|
|||
|
||||
// If New is not address taken, just move our symbol over to it.
|
||||
if (NewEntry.Symbols.isNull()) {
|
||||
BBCallbacks[OldEntry.Index] = New; // Update the callback.
|
||||
BBCallbacks[OldEntry.Index].setPtr(New); // Update the callback.
|
||||
NewEntry = OldEntry; // Set New's entry.
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -56,3 +56,26 @@ ret:
|
|||
ret i32 -1
|
||||
}
|
||||
|
||||
|
||||
; PR6673
|
||||
|
||||
define i64 @test4a() {
|
||||
%target = bitcast i8* blockaddress(@test4b, %usermain) to i8*
|
||||
%ret = call i64 @test4b(i8* %target)
|
||||
|
||||
ret i64 %ret
|
||||
}
|
||||
|
||||
define i64 @test4b(i8* %Code) {
|
||||
entry:
|
||||
indirectbr i8* %Code, [label %usermain]
|
||||
usermain:
|
||||
br label %label_line_0
|
||||
|
||||
label_line_0:
|
||||
br label %label_line_1
|
||||
|
||||
label_line_1:
|
||||
%target = ptrtoint i8* blockaddress(@test4b, %label_line_0) to i64
|
||||
ret i64 %target
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue