diff --git a/ChangeLog b/ChangeLog index 5b98eddc7f..b481aa5f80 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2016-02-14 Jakub Jelinek + Jonathan Wakely + Carlos O'Donell + + [BZ 19439] + * math/Makefile (tests): Add test-math-isinff. + (CFLAGS-test-math-isinff.cc): Use -std=gnu++11. + * math/bits/mathcalls.h [__USE_MISC]: Use + '|| __MATH_DECLARING_DOUBLE == 0' to relax definition of + functions not in C++11 and which don't conflict e.g. isinff, + isinfl etc. + * math/test-math-isinff.cc: New file. + 2016-02-12 Florian Weimer * misc/bug18240.c (do_test): Set RLIMIT_AS. @@ -38,7 +51,7 @@ * misc/Makefile (tests): Add it. 2016-01-28 Steve Ellcey - Joseph Myers + Joseph Myers * sysdeps/mips/memcpy.S (MEMCPY_NAME) [USE_DOUBLE]: Avoid word load in branch delay slot when less than a word of input left. diff --git a/math/Makefile b/math/Makefile index 222ee6bb97..7d573a0074 100644 --- a/math/Makefile +++ b/math/Makefile @@ -114,6 +114,7 @@ tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \ test-nearbyint-except-2 test-signgam-uchar test-signgam-uchar-init \ test-signgam-uint test-signgam-uint-init test-signgam-ullong \ test-signgam-ullong-init test-nan-overflow test-nan-payload \ + test-math-isinff \ $(tests-static) tests-static = test-fpucw-static test-fpucw-ieee-static \ test-signgam-uchar-static test-signgam-uchar-init-static \ @@ -220,6 +221,8 @@ CFLAGS-test-signgam-ullong-init.c = -std=c99 CFLAGS-test-signgam-ullong-static.c = -std=c99 CFLAGS-test-signgam-ullong-init-static.c = -std=c99 +CFLAGS-test-math-isinff.cc = -std=gnu++11 + # The -lieee module sets the _LIB_VERSION_ switch to IEEE mode # for error handling in the -lm functions. install-lib += libieee.a diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index a48345d916..9a7b3f0f18 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -196,7 +196,9 @@ __MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); _Mdouble_END_NAMESPACE #ifdef __USE_MISC -# if !defined __cplusplus || __cplusplus < 201103L /* Conflicts with C++11. */ +# if (!defined __cplusplus \ + || __cplusplus < 201103L /* isinf conflicts with C++11. */ \ + || __MATH_DECLARING_DOUBLE == 0) /* isinff or isinfl don't. */ /* Return 0 if VALUE is finite or NaN, +1 if it is +Infinity, -1 if it is -Infinity. */ __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); @@ -232,7 +234,9 @@ __END_NAMESPACE_C99 __MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); #if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) -# if !defined __cplusplus || __cplusplus < 201103L /* Conflicts with C++11. */ +# if (!defined __cplusplus \ + || __cplusplus < 201103L /* isnan conflicts with C++11. */ \ + || __MATH_DECLARING_DOUBLE == 0) /* isnanf or isnanl don't. */ /* Return nonzero if VALUE is not a number. */ __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); # endif diff --git a/math/test-math-isinff.cc b/math/test-math-isinff.cc new file mode 100644 index 0000000000..195d753f0e --- /dev/null +++ b/math/test-math-isinff.cc @@ -0,0 +1,48 @@ +/* Test for bug 19439. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Marek Polacek , 2012. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#define _GNU_SOURCE 1 +#include +#include +#include + +static int +do_test (void) +{ + /* Verify that isinff, isinfl, isnanf, and isnanlf are defined + in the header under C++11 and can be called. Without the + header fix this test will not compile. */ + if (isinff (1.0f) + || !isinff (INFINITY) + || isinfl (1.0L) + || !isinfl (INFINITY) + || isnanf (2.0f) + || !isnanf (NAN) + || isnanl (2.0L) + || !isnanl (NAN)) + { + printf ("FAIL: Failed to call is* functions.\n"); + exit (1); + } + printf ("PASS: Able to call isinff, isinfl, isnanf, and isnanl.\n"); + exit (0); +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c"