From 60e3ab133c3ffe0bae411a44829498faf8816b34 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 9 Oct 2011 11:26:58 +0200 Subject: [PATCH] isfinite, isinf, isnan tests: Avoid syntax error on MSVC 9. * m4/math_h.m4 (gl_LONG_DOUBLE_VS_DOUBLE): New macro. * modules/isfinite-tests (configure.ac): Require gl_LONG_DOUBLE_VS_DOUBLE. * modules/isinf-tests (configure.ac): Likewise. * modules/isnan-tests (configure.ac): Likewise. * modules/isnanl-tests (configure.ac): Likewise. * modules/isnanl-nolibm-tests (configure.ac): Likewise. * tests/test-isfinite.c (test_isfinitel): Avoid 80-bit long double tests on platforms where 'long double' is the same as 'double'. * tests/test-isinf.c (test_isinfl): Likewise. * tests/test-isnan.c (test_long_double): Likewise. * tests/test-isnanl.h (main): Likewise. --- ChangeLog | 16 ++++++++++++++++ m4/math_h.m4 | 33 ++++++++++++++++++++++++++++++++- modules/isfinite-tests | 1 + modules/isinf-tests | 1 + modules/isnan-tests | 1 + modules/isnanl-nolibm-tests | 1 + modules/isnanl-tests | 1 + tests/test-isfinite.c | 2 +- tests/test-isinf.c | 2 +- tests/test-isnan.c | 2 +- tests/test-isnanl.h | 2 +- 11 files changed, 57 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8c9af25fd..b36d2e78a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2011-10-09 Bruno Haible + + isfinite, isinf, isnan tests: Avoid syntax error on MSVC 9. + * m4/math_h.m4 (gl_LONG_DOUBLE_VS_DOUBLE): New macro. + * modules/isfinite-tests (configure.ac): Require + gl_LONG_DOUBLE_VS_DOUBLE. + * modules/isinf-tests (configure.ac): Likewise. + * modules/isnan-tests (configure.ac): Likewise. + * modules/isnanl-tests (configure.ac): Likewise. + * modules/isnanl-nolibm-tests (configure.ac): Likewise. + * tests/test-isfinite.c (test_isfinitel): Avoid 80-bit long double + tests on platforms where 'long double' is the same as 'double'. + * tests/test-isinf.c (test_isinfl): Likewise. + * tests/test-isnan.c (test_long_double): Likewise. + * tests/test-isnanl.h (main): Likewise. + 2011-10-08 Bruno Haible Tests for module 'tanhf'. diff --git a/m4/math_h.m4 b/m4/math_h.m4 index 0fb405b93..1088d1632 100644 --- a/m4/math_h.m4 +++ b/m4/math_h.m4 @@ -1,4 +1,4 @@ -# math_h.m4 serial 46 +# math_h.m4 serial 47 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -188,3 +188,34 @@ AC_DEFUN([gl_MATH_H_DEFAULTS], REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) ]) + +# gl_LONG_DOUBLE_VS_DOUBLE +# determines whether 'long double' and 'double' have the same representation. +# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines +# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. +# The currently known platforms where this is the case are: +# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. +AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], +[ + AC_CACHE_CHECK([whether long double and double are the same], + [gl_cv_long_double_equals_double], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[typedef int check[sizeof (long double) == sizeof (double) + && LDBL_MANT_DIG == DBL_MANT_DIG + && LDBL_MAX_EXP == DBL_MAX_EXP + && LDBL_MIN_EXP == DBL_MIN_EXP + ? 1 : -1]; + ]])], + [gl_cv_long_double_equals_double=yes], + [gl_cv_long_double_equals_double=no]) + ]) + if test $gl_cv_long_double_equals_double = yes; then + AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], + [Define to 1 if 'long double' and 'double' have the same representation.]) + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 + else + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 + fi + AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) +]) diff --git a/modules/isfinite-tests b/modules/isfinite-tests index dc0ab8c6a..6e650271c 100644 --- a/modules/isfinite-tests +++ b/modules/isfinite-tests @@ -10,6 +10,7 @@ configure.ac: gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION +AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isfinite diff --git a/modules/isinf-tests b/modules/isinf-tests index 2ee42a7ab..53e9c3160 100644 --- a/modules/isinf-tests +++ b/modules/isinf-tests @@ -13,6 +13,7 @@ configure.ac: gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION +AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isinf diff --git a/modules/isnan-tests b/modules/isnan-tests index e21153b7e..417e55937 100644 --- a/modules/isnan-tests +++ b/modules/isnan-tests @@ -12,6 +12,7 @@ configure.ac: gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION +AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isnan diff --git a/modules/isnanl-nolibm-tests b/modules/isnanl-nolibm-tests index 6a2ed4e27..ddc3c945f 100644 --- a/modules/isnanl-nolibm-tests +++ b/modules/isnanl-nolibm-tests @@ -11,6 +11,7 @@ float configure.ac: gl_LONG_DOUBLE_EXPONENT_LOCATION +AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isnanl-nolibm diff --git a/modules/isnanl-tests b/modules/isnanl-tests index c39be318e..82a41e910 100644 --- a/modules/isnanl-tests +++ b/modules/isnanl-tests @@ -11,6 +11,7 @@ float configure.ac: gl_LONG_DOUBLE_EXPONENT_LOCATION +AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isnanl diff --git a/tests/test-isfinite.c b/tests/test-isfinite.c index 2f50de322..ca5e5431e 100644 --- a/tests/test-isfinite.c +++ b/tests/test-isfinite.c @@ -166,7 +166,7 @@ test_isfinitel () } #endif -#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN diff --git a/tests/test-isinf.c b/tests/test-isinf.c index 266cd7e9a..a17b0af90 100644 --- a/tests/test-isinf.c +++ b/tests/test-isinf.c @@ -172,7 +172,7 @@ test_isinfl () } #endif -#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN diff --git a/tests/test-isnan.c b/tests/test-isnan.c index cfdff84a2..6c735f2c2 100644 --- a/tests/test-isnan.c +++ b/tests/test-isnan.c @@ -153,7 +153,7 @@ test_long_double (void) } #endif -#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN diff --git a/tests/test-isnanl.h b/tests/test-isnanl.h index 055d05f47..9f1d763c2 100644 --- a/tests/test-isnanl.h +++ b/tests/test-isnanl.h @@ -65,7 +65,7 @@ main () } #endif -#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN -- 2.11.0