CodeGen: Check for a terminator in llvm::getFuncletMembership

Check for an end iterator from MachineBasicBlock::getFirstTerminator in
llvm::getFuncletMembership.  If this is turned into an assertion, it
fires in 48 X86 testcases (for example,
CodeGen/X86/regalloc-spill-at-ehpad.ll).

Since this is likely a latent bug (shouldn't all basic blocks end with a
terminator?) I've filed PR28938.

llvm-svn: 278344
This commit is contained in:
Duncan P. N. Exon Smith 2016-08-11 15:29:02 +00:00
parent 3f69195b9e
commit 2e7af979b9
1 changed files with 5 additions and 0 deletions

View File

@ -694,6 +694,11 @@ llvm::getFuncletMembership(const MachineFunction &MF) {
}
MachineBasicBlock::const_iterator MBBI = MBB.getFirstTerminator();
// FIXME: Should this be an assertion? It fires all over in X86.
if (MBBI == MBB.end())
continue;
// CatchPads are not funclets for SEH so do not consider CatchRet to
// transfer control to another funclet.
if (MBBI->getOpcode() != TII->getCatchReturnOpcode())