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