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

--- Comment #99 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:95521e15b6ef00c192a1bbd7c13b5f35395c7c9e

commit r14-3748-g95521e15b6ef00c192a1bbd7c13b5f35395c7c9e
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Sep 6 17:30:07 2023 +0200

    ubsan: _BitInt -fsanitize=undefined support [PR102989]

    The following patch introduces some -fsanitize=undefined support for
_BitInt,
    but some of the diagnostics is limited by lack of proper support in the
    library.
    I've filed https://github.com/llvm/llvm-project/issues/64100 to request
    proper support, for now some of the diagnostics might have less or more
    confusing or inaccurate wording but UB should still be diagnosed when it
    happens.

    2023-09-06  Jakub Jelinek  <ja...@redhat.com>

            PR c/102989
    gcc/
            * internal-fn.cc (expand_ubsan_result_store): Add LHS, MODE and
            DO_ERROR arguments.  For non-mode precision BITINT_TYPE results
            check if all padding bits up to mode precision are zeros or sign
            bit copies and if not, jump to DO_ERROR.
            (expand_addsub_overflow, expand_neg_overflow, expand_mul_overflow):
            Adjust expand_ubsan_result_store callers.
            * ubsan.cc: Include target.h and langhooks.h.
            (ubsan_encode_value): Pass BITINT_TYPE values which fit into
pointer
            size converted to pointer sized integer, pass BITINT_TYPE values
            which fit into TImode (if supported) or DImode as those integer
types
            or otherwise for now punt (pass 0).
            (ubsan_type_descriptor): Handle BITINT_TYPE.  For pstyle of
            UBSAN_PRINT_FORCE_INT use TK_Integer (0x0000) mode with a
            TImode/DImode precision rather than TK_Unknown used otherwise for
            large/huge BITINT_TYPEs.
            (instrument_si_overflow): Instrument BITINT_TYPE operations even
when
            they don't have mode precision.
            * ubsan.h (enum ubsan_print_style): New enumerator.
    gcc/c-family/
            * c-ubsan.cc (ubsan_instrument_shift): Use UBSAN_PRINT_FORCE_INT
            for type0 type descriptor.

Reply via email to