cfgcleanup would try to join noreturn paths with different components handled. This then fails in dwarf2cfi.
2016-06-07 Segher Boessenkool <seg...@kernel.crashing.org> * cfgcleanup.c (outgoing_edges_match): Don't join noreturn calls if shrink_wrapped_separate. --- gcc/cfgcleanup.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 023b9d2..e3f205b 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -1824,6 +1824,11 @@ outgoing_edges_match (int mode, basic_block bb1, basic_block bb2) || !find_reg_note (last1, REG_ARGS_SIZE, NULL))) return false; + /* If shrink-wrapping separate components, joining noreturn calls that + have different components set up will confuse dwarf2cfi. */ + if (!nonfakeedges && crtl->shrink_wrapped_separate) + return false; + /* fallthru edges must be forwarded to the same destination. */ if (fallthru1) { -- 1.9.3