https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107300

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |jakub at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The problem related to __builtin_unreachable -> __builtin_trap is during
redirect_to_unreachable, which now calls:
253       struct cgraph_node *target
254         = cgraph_node::get_create (builtin_decl_unreachable ());
and that for -funreachable-traps doesn't return __builtin_unreachable () (which
doesn't need vops) but __builtin_trap () which does.
We have also IFN_TRAP internal call which is like __builtin_trap () except it
doesn't need vops.  So, perhaps one way to fix this would be in
redirect_call_stmt_to_callee or in inline_transform to special case
redirections to BUILT_IN_TRAP if the call stmt doesn't have vdef and replace
them with IFN_TRAP call rather than __builtin_trap in that case.  A problem is
that internal calls don't have cgraph edges, so we'd need to remove the edge
after the adjustment rather than keep it.
Or redirect_to_unreachable could just builtin_decl_implicit
(BUILT_IN_UNREACHABLE), but then again is a question where if any would we
change it into __ubsan_handle_builtin_unreachable for -fsanitize=unreachable or
__builtin_trap/IFN_TRAP later on.

Reply via email to