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/19439] Unix98 isinf and isnan functions conflict with C++11


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

--- Comment #2 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, master has been updated
       via  d9b965fa56350d6eea9f7f438a0714c7ffbb183f (commit)
      from  c83196b0df4340209f260ffaf90e787c711c268e (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=d9b965fa56350d6eea9f7f438a0714c7ffbb183f

commit d9b965fa56350d6eea9f7f438a0714c7ffbb183f
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Jan 11 13:34:52 2016 -0200

    Fix isinf/isnan declaration conflict with C++11

    GLIBC declares isinf and isnan as expected by Unix98 and for C99 programs
    these functions are hidden by the generics inf and isnan macros.
    However C++11 defines isinf and isnan with the same semantics as C99
    but requires that they are functions not macros (C++11 26.8 [c.math]
    paragraph 10).

    This then results in a conflict for perfectly valid C++11 programs:

    --
    using std::isinf;
    using std::isnan;

    double d1 = isinf(1.0);
    double d2 = isnan(1.0);

    d.cc:3:12: error: âconstexpr bool std::isinf(double)â conflicts with a
previous declaration
     using std::isinf;
    [...]
    /usr/include/bits/mathcalls.h:201:1: note: previous declaration âint
isinf(double)â
     __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__
((__const__));
    [...]
    --

    This patch fixes the prototypes by leaving the obsolete functions
    defined for C++98 code (since they do not conflict with any standard
    function in C++98), however preventing them on C++11.

    No issues found in libstdc++ tests and check on x86_64 and i686 with
    glibc testsuite.

    Patch from Jonathan Wakely  <jwakely.gcc@gmail.com>.

        [BZ #19439]
        * math/bits/mathcalls.h
        [!__cplusplus || __cplusplus < 201103L] (isinf): Do not declare
        prototype.
        [!__cplusplus || __cplusplus < 201103L] (isnan): Likewise.

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

Summary of changes:
 ChangeLog             |    9 +++++++++
 math/bits/mathcalls.h |    4 ++++
 2 files changed, 13 insertions(+), 0 deletions(-)

-- 
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]