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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:f64eb636677d714781b4543f111b1c9239328db6

commit r13-1874-gf64eb636677d714781b4543f111b1c9239328db6
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Jul 28 12:42:14 2022 +0200

    gimple, internal-fn: Add IFN_TRAP and use it for __builtin_unreachable
[PR106099]

    __builtin_unreachable and __ubsan_handle_builtin_unreachable don't
    use vops, they are marked const/leaf/noreturn/nothrow/cold.
    But __builtin_trap uses vops, isn't const, just leaf/noreturn/nothrow/cold.
    This is I believe so that when users explicitly use __builtin_trap in their
    sources they get stores visible at the trap side.
    -fsanitize=unreachable -fsanitize-undefined-trap-on-error used to transform
    __builtin_unreachable to __builtin_trap even in the past, but the sanopt
pass
    has TODO_update_ssa, so it worked fine.

    Now that gimple_build_builtin_unreachable can build a __builtin_trap call
    right away, we can run into problems that whenever we need it we would need
    to either manually or through TODO_update* ensure the vops being updated.

    Though, as it is originally __builtin_unreachable which is just implemented
    as trap, I think for this case it is fine to avoid vops.  For this the
    patch introduces IFN_TRAP, which has ECF_* flags like __builtin_unreachable
    and is expanded as __builtin_trap.

    2022-07-28  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/106099
            * internal-fn.def (TRAP): New internal fn.
            * internal-fn.h (expand_TRAP): Declare.
            * internal-fn.cc (expand_TRAP): Define.
            * gimple.cc (gimple_build_builtin_unreachable): For BUILT_IN_TRAP,
            use internal fn rather than builtin.

            * gcc.dg/ubsan/pr106099.c: New test.

Reply via email to