https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111786
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID CC| |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- We completely intentionally don't emit tail calls to noreturn functions, so that e.g. in case of abort one doesn't need to virtually reconstruct backtrace. In your case, the interprocedural optimizations determine expr_main_original is noreturn and so calls it normally (and optimizes away anything after that call).