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

--- Comment #102 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:8c984a1c3693df63520558631c827bb2c2d8b5bc

commit r14-3751-g8c984a1c3693df63520558631c827bb2c2d8b5bc
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Sep 6 17:34:49 2023 +0200

    C _BitInt support [PR102989]

    This patch adds the C FE support, c-family support, small libcpp change
    so that 123wb and 42uwb suffixes are handled plus glimits.h change
    to define BITINT_MAXWIDTH macro.

    The previous patches really do nothing without this, which enables
    all the support.

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

            PR c/102989
    gcc/
            * glimits.h (BITINT_MAXWIDTH): Define if __BITINT_MAXWIDTH__ is
            predefined.
    gcc/c-family/
            * c-common.cc (c_common_reswords): Add _BitInt as keyword.
            (unsafe_conversion_p): Handle BITINT_TYPE like INTEGER_TYPE.
            (c_common_signed_or_unsigned_type): Handle BITINT_TYPE.
            (c_common_truthvalue_conversion, c_common_get_alias_set,
            check_builtin_function_arguments): Handle BITINT_TYPE like
            INTEGER_TYPE.
            (sync_resolve_size): Add ORIG_FORMAT argument.  If
            FETCH && !ORIG_FORMAT, type is BITINT_TYPE, return -1 if size isn't
            one of 1, 2, 4, 8 or 16 or if it is 16 but TImode is not supported.
            (atomic_bitint_fetch_using_cas_loop): New function.
            (resolve_overloaded_builtin): Adjust sync_resolve_size caller.  If
            -1 is returned, use atomic_bitint_fetch_using_cas_loop to lower it.
            Formatting fix.
            (keyword_begins_type_specifier): Handle RID_BITINT.
            * c-common.h (enum rid): Add RID_BITINT enumerator.
            * c-cppbuiltin.cc (c_cpp_builtins): For C call
            targetm.c.bitint_type_info and predefine __BITINT_MAXWIDTH__
            and for -fbuilding-libgcc also __LIBGCC_BITINT_LIMB_WIDTH__ and
            __LIBGCC_BITINT_ORDER__ macros if _BitInt is supported.
            * c-lex.cc (interpret_integer): Handle CPP_N_BITINT.
            * c-pretty-print.cc (c_pretty_printer::simple_type_specifier,
            c_pretty_printer::direct_abstract_declarator,
            c_pretty_printer::direct_declarator, c_pretty_printer::declarator):
            Handle BITINT_TYPE.
            (pp_c_integer_constant): Handle printing of large precision
wide_ints
            which would buffer overflow digit_buffer.
            * c-warn.cc (conversion_warning, warnings_for_convert_and_check,
            warnings_for_convert_and_check): Handle BITINT_TYPE like
            INTEGER_TYPE.
    gcc/c/
            * c-convert.cc (c_convert): Handle BITINT_TYPE like INTEGER_TYPE.
            * c-decl.cc (check_bitfield_type_and_width): Allow BITINT_TYPE
            bit-fields.
            (finish_struct): Prefer to use BITINT_TYPE for BITINT_TYPE
bit-fields
            if possible.
            (declspecs_add_type): Formatting fixes.  Handle cts_bitint.  Adjust
            for added union in *specs.  Handle RID_BITINT.
            (finish_declspecs): Handle cts_bitint.  Adjust for added union
            in *specs.
            * c-parser.cc (c_keyword_starts_typename, c_token_starts_declspecs,
            c_parser_declspecs, c_parser_gnu_attribute_any_word): Handle
            RID_BITINT.
            (c_parser_omp_clause_schedule): Handle BITINT_TYPE like
INTEGER_TYPE.
            * c-tree.h (enum c_typespec_keyword): Mention _BitInt in comment.
            Add cts_bitint enumerator.
            (struct c_declspecs): Move int_n_idx and floatn_nx_idx into a union
            and add bitint_prec there as well.
            * c-typeck.cc (c_common_type, comptypes_internal):
            Handle BITINT_TYPE.
            (perform_integral_promotions): Promote BITINT_TYPE bit-fields to
            their declared type.
            (build_array_ref, build_unary_op, build_conditional_expr,
            build_c_cast, convert_for_assignment, digest_init,
build_binary_op):
            Handle BITINT_TYPE.
            * c-fold.cc (c_fully_fold_internal): Handle BITINT_TYPE like
            INTEGER_TYPE.
            * c-aux-info.cc (gen_type): Handle BITINT_TYPE.
    libcpp/
            * expr.cc (interpret_int_suffix): Handle wb and WB suffixes.
            * include/cpplib.h (CPP_N_BITINT): Define.

Reply via email to