This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug math/21930] C-only gcc builtins used in <math.h> isinf


https://sourceware.org/bugzilla/show_bug.cgi?id=21930

--- Comment #16 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.26/master has been updated
       via  58270c0049404ef2f878fdd45df55f17f0b8c1f7 (commit)
       via  35dded99a89db873b06270ca7f21245a0faf712a (commit)
       via  ef8566d72af5e03c1b82cf02efb794268a347f8c (commit)
      from  6043d77a47de297b62084c1c261cdada082bf09c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=58270c0049404ef2f878fdd45df55f17f0b8c1f7

commit 58270c0049404ef2f878fdd45df55f17f0b8c1f7
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date:   Tue Aug 22 16:34:42 2017 -0300

    Provide a C++ version of iszero that does not use __MATH_TG (bug 21930)

    When signaling nans are enabled (with -fsignaling-nans), the C++ version
    of iszero uses the fpclassify macro, which is defined with __MATH_TG.
    However, when support for float128 is available, __MATH_TG uses the
    builtin __builtin_types_compatible_p, which is only available in C mode.

    This patch refactors the C++ version of iszero so that it uses function
    overloading to select between the floating-point types, instead of
    relying on fpclassify and __MATH_TG.

    Tested for powerpc64le, s390x, x86_64, and with build-many-glibcs.py.

        [BZ #21930]
        * math/math.h [defined __cplusplus && defined __SUPPORT_SNAN__]
        (iszero): New C++ implementation that does not use
        fpclassify/__MATH_TG/__builtin_types_compatible_p, when
        signaling nans are enabled, since __builtin_types_compatible_p
        is a C-only feature.
        * math/test-math-iszero.cc: When __HAVE_DISTINCT_FLOAT128 is
        defined, include ieee754_float128.h for access to the union and
        member ieee854_float128.ieee.
        [__HAVE_DISTINCT_FLOAT128] (do_test): Call check_float128.
        [__HAVE_DISTINCT_FLOAT128] (check_float128): New function.
        * sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
        (CXXFLAGS-test-math-iszero.cc): Add -mfloat128 to the build
        options of test-math-zero on powerpc64le.

    (cherry picked from commit 42496114ec0eb7d6d039d05d4262e109951c600c)

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=35dded99a89db873b06270ca7f21245a0faf712a

commit 35dded99a89db873b06270ca7f21245a0faf712a
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date:   Wed Aug 23 10:16:54 2017 -0300

    Fix the C++ version of issignaling when __NO_LONG_DOUBLE_MATH is defined

    When __NO_LONG_DOUBLE_MATH is defined, __issignalingl is not available,
    thus issignaling with long double argument should call __issignaling,
    instead.

    Tested for powerpc64le.

        * math/math.h [defined __cplusplus] (issignaling): In the long
        double case, call __issignalingl only if __NO_LONG_DOUBLE_MATH
        is not defined.  Call __issignaling, otherwise.

    (cherry picked from commit 3d7b66f66cb223e899a7ebc0f4c20f13e711c9e0)

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ef8566d72af5e03c1b82cf02efb794268a347f8c

commit ef8566d72af5e03c1b82cf02efb794268a347f8c
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date:   Mon Aug 14 13:46:15 2017 -0300

    Provide a C++ version of issignaling that does not use __MATH_TG

    The macro __MATH_TG contains the logic to select between long double and
    _Float128, when these types are ABI-distinct.  This logic relies on
    __builtin_types_compatible_p, which is not available in C++ mode.

    On the other hand, C++ function overloading provides the means to
    distinguish between the floating-point types.  The overloading
    resolution will match the correct parameter regardless of type
    qualifiers, i.e.: const and volatile.

    Tested for powerpc64le, s390x, and x86_64.

        * math/math.h [defined __cplusplus] (issignaling): Provide a C++
        definition for issignaling that does not rely on __MATH_TG,
        since __MATH_TG uses __builtin_types_compatible_p, which is only
        available in C mode.
        (CFLAGS-test-math-issignaling.cc): New variable.
        * math/Makefile [CXX] (tests): Add test-math-issignaling.
        * math/test-math-issignaling.cc: New test for C++ implementation
        of type-generic issignaling.
        * sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
        (CXXFLAGS-test-math-issignaling.cc): Add -mfloat128 to the build
        options of test-math-issignaling on powerpc64le.

    (cherry picked from commit a16e8bc08edca84d507715c66d6cddbbc7ed3b62)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   37 +++++++++
 math/Makefile                                      |    3 +-
 math/math.h                                        |   60 ++++++++++++++-
 ...est-math-iszero.cc => test-math-issignaling.cc} |   78 +++++++++++++------
 math/test-math-iszero.cc                           |   79 ++++++++++++++++++++
 sysdeps/powerpc/powerpc64le/Makefile               |    4 +-
 6 files changed, 229 insertions(+), 32 deletions(-)
 copy math/{test-math-iszero.cc => test-math-issignaling.cc} (52%)

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]