https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71146
--- Comment #7 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I'm afraid I can't really answer that. I can see that while inline_small_functions -> inline_call -> inline_merge_summary -> remap_edge_summaries -> edge_set_predicate determine that for (gdb) p e->caller $29 = <cgraph_node* 0x7ffff00c8e60 "_ZThn8_N1C13OnReadSegmentEPKciPi"> (gdb) p e->callee $30 = <cgraph_node* 0x7ffff00b7a10 "*.LTHUNK0"> false_predicate_p (predicate) is true so we redirect caller to __builtin_unreachable. If it helps: $ c++filt <<< _ZThn8_N1C13OnReadSegmentEPKciPi non-virtual thunk to C::OnReadSegment(char const*, int, int*) Does that explain anything? Should I post the patch? (It regtested fine.)