AMDGPU: Fix a use-after free and a missing break
We're erasing MI here, but then immediately using it again inside the `if`. This moves the erase after we're done using it. Doing that reveals a second problem though - this case is missing a break, so we fall through to the default and dereference MI again. This is obviously a bug, though I don't know how to write a test that triggers it - all we do in the error case is print some extra debug output. Both of these issue crash on lots of tests under ASAN with the recycling allocator changes from PR26808 applied. llvm-svn: 264442
This commit is contained in:
parent
20e24193f3
commit
f2a0d349a6
|
@ -625,15 +625,16 @@ public:
|
|||
case AMDGPU::RETURN: {
|
||||
BuildMI(MBB, MI, MBB.findDebugLoc(MI), getHWInstrDesc(CF_END));
|
||||
CfCount++;
|
||||
MI->eraseFromParent();
|
||||
if (CfCount % 2) {
|
||||
BuildMI(MBB, I, MBB.findDebugLoc(MI), TII->get(AMDGPU::PAD));
|
||||
CfCount++;
|
||||
}
|
||||
MI->eraseFromParent();
|
||||
for (unsigned i = 0, e = FetchClauses.size(); i < e; i++)
|
||||
EmitFetchClause(I, FetchClauses[i], CfCount);
|
||||
for (unsigned i = 0, e = AluClauses.size(); i < e; i++)
|
||||
EmitALUClause(I, AluClauses[i], CfCount);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (TII->isExport(MI->getOpcode())) {
|
||||
|
|
Loading…
Reference in New Issue