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

--- Comment #5 from GCC 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:5e897d7e954439c4f0aea1ffa0c18bbea27e3373

commit r15-8936-g5e897d7e954439c4f0aea1ffa0c18bbea27e3373
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Mar 26 20:07:09 2025 +0100

    cobol: Get rid of __int128 uses in the COBOL FE [PR119242]

    The following patch changes some remaining __int128 uses in the FE
    into FIXED_WIDE_INT(128), i.e. emulated 128-bit integral type.
    The use of wide_int_to_tree directly from that rather than going through
    build_int_cst_type means we don't throw away the upper 64 bits of the
    values, so the emitting of constants needing full 128 bits can be greatly
    simplied.
    Plus all the #pragma GCC diagnostic ignored "-Wpedantic" spots aren't
    needed, we don't use the _Float128/__int128 types directly in the FE
    anymore.

    Note, PR119241/PR119242 bugs are still not fully fixed, I think the
    remaining problem is that several FE sources include
    ../../libgcobol/libgcobol.h and that header declares various APIs with
    __int128 and _Float128 types, so trying to build a cross-compiler on a host
    without __int128 and _Float128 will still fail miserably.
    I believe none of those APIs are actually used by the FE, so the question
is
    what the FE needs from libgcobol.h and whether the rest could be wrapped
    with #ifndef IN_GCC or #ifndef IN_GCC_FRONTEND or something similar
    (those 2 macros are predefined when compiling the FE files).

    2025-03-26  Jakub Jelinek  <ja...@redhat.com>

            PR cobol/119242
            * genutil.h (get_power_of_ten): Remove #pragma GCC diagnostic
            around declaration.
            * genapi.cc (psa_FldLiteralN): Change type of value from
            __int128 to FIXED_WIDE_INT(128).  Remove #pragma GCC diagnostic
            around the declaration.  Use wi::min_precision to determine
            minimum unsigned precision of the value.  Use wi::neg_p instead
            of value < 0 tests and wi::set_bit_in_zero<FIXED_WIDE_INT(128)>
            to build sign bit.  Handle field->data.capacity == 16 like
            1, 2, 4 and 8, use wide_int_to_tree instead of build_int_cst.
            (mh_source_is_literalN): Remove #pragma GCC diagnostic around
            the definition.
            (binary_initial_from_float128): Likewise.
            * genutil.cc (get_power_of_ten): Remove #pragma GCC diagnostic
            before the definition.

Reply via email to