From 7e58ebf6b85f8ea737b281a0552bcbb4ea3b04fb Mon Sep 17 00:00:00 2001 From: Vladimir Stefanovic Date: Thu, 30 Aug 2018 17:31:38 +0000 Subject: Allow inconsistent offsets for 'noreturn' basic blocks when '-verify-cfiinstrs' With r295105, some 'noreturn' blocks (those that don't return and have no successors) may be merged. If such blocks' predecessors have different outgoing offset or register, don't report an error in CFIInstrInserter verify(). Thanks to Vlad Tsyrklevich for reporting the issue. Differential Revision: https://reviews.llvm.org/D51161 llvm-svn: 341087 --- llvm/lib/CodeGen/CFIInstrInserter.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'llvm/lib/CodeGen/CFIInstrInserter.cpp') diff --git a/llvm/lib/CodeGen/CFIInstrInserter.cpp b/llvm/lib/CodeGen/CFIInstrInserter.cpp index 00ebf63fc17..4fd119430cf 100644 --- a/llvm/lib/CodeGen/CFIInstrInserter.cpp +++ b/llvm/lib/CodeGen/CFIInstrInserter.cpp @@ -317,6 +317,10 @@ unsigned CFIInstrInserter::verify(MachineFunction &MF) { // outgoing offset and register values of CurrMBB if (SuccMBBInfo.IncomingCFAOffset != CurrMBBInfo.OutgoingCFAOffset || SuccMBBInfo.IncomingCFARegister != CurrMBBInfo.OutgoingCFARegister) { + // Inconsistent offsets/registers are ok for 'noreturn' blocks because + // we don't generate epilogues inside such blocks. + if (SuccMBBInfo.MBB->succ_empty() && !SuccMBBInfo.MBB->isReturnBlock()) + continue; report(CurrMBBInfo, SuccMBBInfo); ErrorNum++; } -- cgit v1.2.3