https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81644
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-08-02 Component|rtl-optimization |target Target Milestone|--- |8.0 Ever confirmed|0 |1 --- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- It turned out we can't simply emit trap insn during epilogue expansion, since epilogue is expanded on FALLTHRU edge to EXIT BB. Later passes rightfully choke on control flow insn in BB with FALTHRU exit edge. I'm testing the following patch: --cut here-- Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 250818) +++ config/i386/i386.c (working copy) @@ -15199,7 +15199,7 @@ if (ix86_function_naked (current_function_decl)) { /* The program should not reach this point. */ - emit_insn (gen_trap ()); + emit_insn (gen_ud2 ()); return; } Index: config/i386/i386.md =================================================================== --- config/i386/i386.md (revision 250818) +++ config/i386/i386.md (working copy) @@ -201,6 +201,7 @@ ]) (define_c_enum "unspecv" [ + UNSPECV_UD2 UNSPECV_BLOCKAGE UNSPECV_STACK_PROBE UNSPECV_PROBE_STACK_RANGE @@ -18606,6 +18607,18 @@ } [(set_attr "length" "2")]) +(define_insn "ud2" + [(unspec_volatile [(const_int 0)] UNSPECV_UD2)] + "" +{ +#ifdef HAVE_AS_IX86_UD2 + return "ud2"; +#else + return ASM_SHORT "0x0b0f"; +#endif +} + [(set_attr "length" "2")]) + (define_expand "prefetch" [(prefetch (match_operand 0 "address_operand") (match_operand:SI 1 "const_int_operand") --cut here--