On Tue, Jun 21, 2022 at 11:59:56PM -0400, Jason Merrill wrote:
> PR c++/104642
>
> gcc/ChangeLog:
>
> * common.opt: Add -funreachable-traps.
> * doc/invoke.texi (-funreachable-traps): Document it.
> * opts.cc (finish_options): Enable at -O0 or -Og.
> * tree.cc (build_common_builtin_nodes): Add __builtin_trap.
> (builtin_decl_unreachable, build_builtin_unreachable): New.
> * tree.h: Declare them.
> * ubsan.cc (sanitize_unreachable_fn): Factor out.
> (ubsan_instrument_unreachable): Use
> gimple_build_builtin_unreachable.
> * ubsan.h (sanitize_unreachable_fn): Declare.
> * gimple.cc (gimple_build_builtin_unreachable): New.
> * gimple.h: Declare it.
> * builtins.cc (expand_builtin_unreachable): Add assert.
> (fold_builtin_0): Call build_builtin_unreachable.
> * sanopt.cc: Don't run for just SANITIZE_RETURN
> or SANITIZE_UNREACHABLE when trapping.
> * cgraphunit.cc (walk_polymorphic_call_targets): Use new
> unreachable functions.
> * gimple-fold.cc (gimple_fold_call)
> (gimple_get_virt_method_for_vtable)
> * ipa-fnsummary.cc (redirect_to_unreachable)
> * ipa-prop.cc (ipa_make_edge_direct_to_target)
> (ipa_impossible_devirt_target)
> * ipa.cc (walk_polymorphic_call_targets)
> * tree-cfg.cc (pass_warn_function_return::execute)
> (execute_fixup_cfg)
> * tree-ssa-loop-ivcanon.cc (remove_exits_and_undefined_stmts)
> (unloop_loops)
> * tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt):
> Likewise.
>
> gcc/cp/ChangeLog:
>
> * constexpr.cc (cxx_eval_builtin_function_call): Handle
> unreachable/trap earlier.
> * cp-gimplify.cc (cp_maybe_instrument_return): Use
> build_builtin_unreachable.
>
> gcc/testsuite/ChangeLog:
>
> * g++.dg/ubsan/return-8a.C: New test.
> * g++.dg/ubsan/return-8b.C: New test.
> * g++.dg/ubsan/return-8d.C: New test.
> * g++.dg/ubsan/return-8e.C: New test.
LGTM, thanks.
Jakub