# HG changeset patch # User Bruno Haible # Date 1223424326 -7200 # Node ID ca053fa79cd31cacb6dd50d42fa392ed73a77a08 # Parent e8dcbac0c60fc1618cee9d1e6dd45d8b8432b718 Use a more portable replacement expression for -0.0L. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,81 @@ +2008-10-07 Bruno Haible + + Use a more portable replacement expression for -0.0L. + * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Use -LDBL_MIN * LDBL_MIN + instead of -0.0L. Fix m4 quotation. + + * tests/test-signbit.c: Include . + (minus_zero): New variable. + (test_signbitl): Use minus_zero instead of -zero. + * modules/signbit-tests (Depends-on): Add float. + + * tests/test-ceill.c: Include . + (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/ceill-tests (Depends-on): Add float. + + * tests/test-floorl.c: Include . + (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/floorl-tests (Depends-on): Add float. + + * tests/test-roundl.c: Include . + (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/roundl-tests (Depends-on): Add float. + + * tests/test-truncl.c: Include . + (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/truncl-tests (Depends-on): Add float. + + * tests/test-frexpl.c (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/frexpl-tests (Depends-on): Add float. + + * tests/test-isnan.c (zerol): Remove variable. + (minus_zerol): New variable. + (test_long_double): Use minus_zerol instead of -zerol. + * modules/isnan-tests (Depends-on): Add float. + + * tests/test-isnanl.h (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/isnanl-nolibm-tests (Depends-on): Add float. + * modules/isnanl-tests (Depends-on): Add float. + + * tests/test-ldexpl.c (zero): Remove variable. + (minus_zero): New variable. + (main): Use minus_zero instead of -zero. + * modules/ldexpl-tests (Depends-on): Add float. + + * tests/test-snprintf-posix.h (zerol): Remove variable. + (minus_zerol): New variable. + (test_function): Use minus_zerol instead of -zerol. + * modules/snprintf-posix-tests (Depends-on): Add float. + * modules/vsnprintf-posix-tests (Depends-on): Add float. + + * tests/test-sprintf-posix.h (zerol): Remove variable. + (minus_zerol): New variable. + (test_function): Use minus_zerol instead of -zerol. + * modules/sprintf-posix-tests (Depends-on): Add float. + * modules/vsprintf-posix-tests (Depends-on): Add float. + + * tests/test-vasnprintf-posix.c (zerol): Remove variable. + (minus_zerol): New variable. + (test_function): Use minus_zerol instead of -zerol. + * modules/vasnprintf-posix-tests (Depends-on): Add float. + + * tests/test-vasprintf-posix.c (zerol): Remove variable. + (minus_zerol): New variable. + (test_function): Use minus_zerol instead of -zerol. + * modules/vasprintf-posix-tests (Depends-on): Add float. + 2008-10-07 Simon Josefsson * MODULES.html.sh (Support for building documentation): Mention diff --git a/m4/signbit.m4 b/m4/signbit.m4 --- a/m4/signbit.m4 +++ b/m4/signbit.m4 @@ -1,4 +1,4 @@ -# signbit.m4 serial 3 +# signbit.m4 serial 4 dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -123,15 +123,21 @@ fi ]) -AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [ +AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - So we use -p0f instead. */ + So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. */ long double p0l = 0.0L; +#ifdef __hpux +long double m0l = -LDBL_MIN * LDBL_MIN; +#else long double m0l = -p0l; +#endif int main () { { @@ -169,7 +175,7 @@ } return 0; } -]) +]]) AC_DEFUN([gl_FLOAT_SIGN_LOCATION], [ diff --git a/modules/ceill-tests b/modules/ceill-tests --- a/modules/ceill-tests +++ b/modules/ceill-tests @@ -4,6 +4,7 @@ Depends-on: fpucw isnanl-nolibm +float configure.ac: diff --git a/modules/floorl-tests b/modules/floorl-tests --- a/modules/floorl-tests +++ b/modules/floorl-tests @@ -4,6 +4,7 @@ Depends-on: fpucw isnanl-nolibm +float configure.ac: diff --git a/modules/frexpl-tests b/modules/frexpl-tests --- a/modules/frexpl-tests +++ b/modules/frexpl-tests @@ -5,6 +5,7 @@ fpucw isnanl-nolibm signbit +float configure.ac: diff --git a/modules/isnan-tests b/modules/isnan-tests --- a/modules/isnan-tests +++ b/modules/isnan-tests @@ -3,6 +3,7 @@ tests/nan.h Depends-on: +float configure.ac: gl_FLOAT_EXPONENT_LOCATION diff --git a/modules/isnanl-nolibm-tests b/modules/isnanl-nolibm-tests --- a/modules/isnanl-nolibm-tests +++ b/modules/isnanl-nolibm-tests @@ -3,6 +3,7 @@ tests/test-isnanl.h Depends-on: +float configure.ac: gl_LONG_DOUBLE_EXPONENT_LOCATION diff --git a/modules/isnanl-tests b/modules/isnanl-tests --- a/modules/isnanl-tests +++ b/modules/isnanl-tests @@ -3,6 +3,7 @@ tests/test-isnanl.h Depends-on: +float configure.ac: gl_LONG_DOUBLE_EXPONENT_LOCATION diff --git a/modules/ldexpl-tests b/modules/ldexpl-tests --- a/modules/ldexpl-tests +++ b/modules/ldexpl-tests @@ -5,6 +5,7 @@ fpucw isnanl-nolibm signbit +float configure.ac: diff --git a/modules/roundl-tests b/modules/roundl-tests --- a/modules/roundl-tests +++ b/modules/roundl-tests @@ -4,6 +4,7 @@ Depends-on: fpucw isnanl-nolibm +float configure.ac: diff --git a/modules/signbit-tests b/modules/signbit-tests --- a/modules/signbit-tests +++ b/modules/signbit-tests @@ -5,6 +5,7 @@ m4/exponentl.m4 Depends-on: +float configure.ac: AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) diff --git a/modules/snprintf-posix-tests b/modules/snprintf-posix-tests --- a/modules/snprintf-posix-tests +++ b/modules/snprintf-posix-tests @@ -6,6 +6,7 @@ Depends-on: stdint +float configure.ac: AC_DEFINE([CHECK_SNPRINTF_POSIX], 1, diff --git a/modules/sprintf-posix-tests b/modules/sprintf-posix-tests --- a/modules/sprintf-posix-tests +++ b/modules/sprintf-posix-tests @@ -5,6 +5,7 @@ Depends-on: stdint +float configure.ac: diff --git a/modules/truncl-tests b/modules/truncl-tests --- a/modules/truncl-tests +++ b/modules/truncl-tests @@ -4,6 +4,7 @@ Depends-on: fpucw isnanl-nolibm +float configure.ac: diff --git a/modules/vasnprintf-posix-tests b/modules/vasnprintf-posix-tests --- a/modules/vasnprintf-posix-tests +++ b/modules/vasnprintf-posix-tests @@ -7,6 +7,7 @@ Depends-on: stdint +float configure.ac: gt_LOCALE_FR diff --git a/modules/vasprintf-posix-tests b/modules/vasprintf-posix-tests --- a/modules/vasprintf-posix-tests +++ b/modules/vasprintf-posix-tests @@ -4,6 +4,7 @@ Depends-on: stdint +float configure.ac: diff --git a/modules/vsnprintf-posix-tests b/modules/vsnprintf-posix-tests --- a/modules/vsnprintf-posix-tests +++ b/modules/vsnprintf-posix-tests @@ -6,6 +6,7 @@ Depends-on: stdint +float configure.ac: AC_DEFINE([CHECK_VSNPRINTF_POSIX], 1, diff --git a/modules/vsprintf-posix-tests b/modules/vsprintf-posix-tests --- a/modules/vsprintf-posix-tests +++ b/modules/vsprintf-posix-tests @@ -5,6 +5,7 @@ Depends-on: stdint +float configure.ac: diff --git a/tests/test-ceill.c b/tests/test-ceill.c --- a/tests/test-ceill.c +++ b/tests/test-ceill.c @@ -20,6 +20,7 @@ #include +#include #include #include @@ -38,9 +39,9 @@ } \ while (0) -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; int main () @@ -51,7 +52,7 @@ /* Zero. */ ASSERT (ceill (0.0L) == 0.0L); - ASSERT (ceill (-zero) == 0.0L); + ASSERT (ceill (minus_zero) == 0.0L); /* Positive numbers. */ ASSERT (ceill (0.3L) == 1.0L); ASSERT (ceill (0.7L) == 1.0L); diff --git a/tests/test-floorl.c b/tests/test-floorl.c --- a/tests/test-floorl.c +++ b/tests/test-floorl.c @@ -20,6 +20,7 @@ #include +#include #include #include @@ -38,9 +39,9 @@ } \ while (0) -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; int main () @@ -51,7 +52,7 @@ /* Zero. */ ASSERT (floorl (0.0L) == 0.0L); - ASSERT (floorl (-zero) == 0.0L); + ASSERT (floorl (minus_zero) == 0.0L); /* Positive numbers. */ ASSERT (floorl (0.3L) == 0.0L); ASSERT (floorl (0.7L) == 0.0L); diff --git a/tests/test-frexpl.c b/tests/test-frexpl.c --- a/tests/test-frexpl.c +++ b/tests/test-frexpl.c @@ -57,9 +57,9 @@ # define MIN_NORMAL_EXP LDBL_MIN_EXP #endif -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; static long double my_ldexp (long double x, int d) @@ -117,7 +117,7 @@ { /* Negative zero. */ int exp = -9999; long double mantissa; - x = -zero; + x = minus_zero; mantissa = frexpl (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); diff --git a/tests/test-isnan.c b/tests/test-isnan.c --- a/tests/test-isnan.c +++ b/tests/test-isnan.c @@ -48,9 +48,9 @@ So we use -zero instead. */ double zerod = 0.0; -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zerol = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. */ +long double minus_zerol = -LDBL_MIN * LDBL_MIN; static void test_float (void) @@ -146,7 +146,7 @@ ASSERT (!isnan (-2.718e30L)); ASSERT (!isnan (-2.718e-30L)); ASSERT (!isnan (0.0L)); - ASSERT (!isnan (-zerol)); + ASSERT (!isnan (minus_zerol)); /* Infinite values. */ ASSERT (!isnan (1.0L / 0.0L)); ASSERT (!isnan (-1.0L / 0.0L)); diff --git a/tests/test-isnanl.h b/tests/test-isnanl.h --- a/tests/test-isnanl.h +++ b/tests/test-isnanl.h @@ -33,9 +33,9 @@ } \ while (0) -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; int main () @@ -53,7 +53,7 @@ ASSERT (!isnanl (-2.718e30L)); ASSERT (!isnanl (-2.718e-30L)); ASSERT (!isnanl (0.0L)); - ASSERT (!isnanl (-zero)); + ASSERT (!isnanl (minus_zero)); /* Infinite values. */ ASSERT (!isnanl (1.0L / 0.0L)); ASSERT (!isnanl (-1.0L / 0.0L)); diff --git a/tests/test-ldexpl.c b/tests/test-ldexpl.c --- a/tests/test-ldexpl.c +++ b/tests/test-ldexpl.c @@ -39,9 +39,9 @@ } \ while (0) -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; int main () @@ -82,7 +82,7 @@ } { /* Negative zero. */ - x = -zero; + x = minus_zero; y = ldexpl (x, 0); ASSERT (y == x); ASSERT (signbit (x)); y = ldexpl (x, 5); ASSERT (y == x); ASSERT (signbit (x)); y = ldexpl (x, -5); ASSERT (y == x); ASSERT (signbit (x)); diff --git a/tests/test-roundl.c b/tests/test-roundl.c --- a/tests/test-roundl.c +++ b/tests/test-roundl.c @@ -22,6 +22,7 @@ #include +#include #include #include @@ -40,9 +41,9 @@ } \ while (0) -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; int main () @@ -53,7 +54,7 @@ /* Zero. */ ASSERT (roundl (0.0L) == 0.0L); - ASSERT (roundl (-zero) == 0.0L); + ASSERT (roundl (minus_zero) == 0.0L); /* Positive numbers. */ ASSERT (roundl (0.3L) == 0.0L); ASSERT (roundl (0.5L) == 1.0L); diff --git a/tests/test-signbit.c b/tests/test-signbit.c --- a/tests/test-signbit.c +++ b/tests/test-signbit.c @@ -20,6 +20,7 @@ #include +#include #include #include #include @@ -40,6 +41,16 @@ double zerod = 0.0; long double zerol = 0.0L; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zerof instead. */ + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zerod instead. */ + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. */ +long double minus_zerol = -LDBL_MIN * LDBL_MIN; + static void test_signbitf () { @@ -140,10 +151,10 @@ ASSERT (signbit (-2.718e-30L)); /* Zeros. */ ASSERT (!signbit (0.0L)); - if (1.0L / -zerol < 0) - ASSERT (signbit (-zerol)); + if (1.0L / minus_zerol < 0) + ASSERT (signbit (minus_zerol)); else - ASSERT (!signbit (-zerol)); + ASSERT (!signbit (minus_zerol)); /* Infinite values. */ ASSERT (!signbit (1.0L / 0.0L)); ASSERT (signbit (-1.0L / 0.0L)); diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h --- a/tests/test-snprintf-posix.h +++ b/tests/test-snprintf-posix.h @@ -28,12 +28,12 @@ } /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - So we use -zero instead. */ + So we use -zerod instead. */ double zerod = 0.0; -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zerol = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. */ +long double minus_zerol = -LDBL_MIN * LDBL_MIN; /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ @@ -444,7 +444,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%La %d", -zerol, 33, 44, 55); + my_snprintf (result, sizeof (result), "%La %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); @@ -1146,7 +1146,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Lf %d", -zerol, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Lf %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1513,7 +1513,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%LF %d", -zerol, 33, 44, 55); + my_snprintf (result, sizeof (result), "%LF %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -2015,7 +2015,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Le %d", -zerol, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Le %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); @@ -2668,7 +2668,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Lg %d", -zerol, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Lg %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h --- a/tests/test-sprintf-posix.h +++ b/tests/test-sprintf-posix.h @@ -28,12 +28,12 @@ } /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - So we use -zero instead. */ + So we use -zerod instead. */ double zerod = 0.0; -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zerol = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. */ +long double minus_zerol = -LDBL_MIN * LDBL_MIN; /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ @@ -430,7 +430,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%La %d", -zerol, 33, 44, 55); + my_sprintf (result, "%La %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); @@ -1132,7 +1132,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%Lf %d", -zerol, 33, 44, 55); + my_sprintf (result, "%Lf %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1499,7 +1499,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%LF %d", -zerol, 33, 44, 55); + my_sprintf (result, "%LF %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -2001,7 +2001,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%Le %d", -zerol, 33, 44, 55); + my_sprintf (result, "%Le %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); @@ -2654,7 +2654,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%Lg %d", -zerol, 33, 44, 55); + my_sprintf (result, "%Lg %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); diff --git a/tests/test-truncl.c b/tests/test-truncl.c --- a/tests/test-truncl.c +++ b/tests/test-truncl.c @@ -20,6 +20,7 @@ #include +#include #include #include @@ -38,9 +39,9 @@ } \ while (0) -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zero = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. */ +long double minus_zero = -LDBL_MIN * LDBL_MIN; int main () @@ -51,7 +52,7 @@ /* Zero. */ ASSERT (truncl (0.0L) == 0.0L); - ASSERT (truncl (-zero) == 0.0L); + ASSERT (truncl (minus_zero) == 0.0L); /* Positive numbers. */ ASSERT (truncl (0.3L) == 0.0L); ASSERT (truncl (0.7L) == 0.0L); diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c --- a/tests/test-vasnprintf-posix.c +++ b/tests/test-vasnprintf-posix.c @@ -53,12 +53,12 @@ } /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - So we use -zero instead. */ + So we use -zerod instead. */ double zerod = 0.0; -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zerol = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. */ +long double minus_zerol = -LDBL_MIN * LDBL_MIN; /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ @@ -539,7 +539,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%La %d", -zerol, 33, 44, 55); + my_asnprintf (NULL, &length, "%La %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); @@ -1351,7 +1351,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%Lf %d", -zerol, 33, 44, 55); + my_asnprintf (NULL, &length, "%Lf %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1798,7 +1798,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%LF %d", -zerol, 33, 44, 55); + my_asnprintf (NULL, &length, "%LF %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -2372,7 +2372,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%Le %d", -zerol, 33, 44, 55); + my_asnprintf (NULL, &length, "%Le %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 @@ -3127,7 +3127,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%Lg %d", -zerol, 33, 44, 55); + my_asnprintf (NULL, &length, "%Lg %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); diff --git a/tests/test-vasprintf-posix.c b/tests/test-vasprintf-posix.c --- a/tests/test-vasprintf-posix.c +++ b/tests/test-vasprintf-posix.c @@ -53,12 +53,12 @@ } /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - So we use -zero instead. */ + So we use -zerod instead. */ double zerod = 0.0; -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. - So we use -zero instead. */ -long double zerol = 0.0L; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. */ +long double minus_zerol = -LDBL_MIN * LDBL_MIN; /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ @@ -520,7 +520,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%La %d", -zerol, 33, 44, 55); + my_asprintf (&result, "%La %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); @@ -1332,7 +1332,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%Lf %d", -zerol, 33, 44, 55); + my_asprintf (&result, "%Lf %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1779,7 +1779,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%LF %d", -zerol, 33, 44, 55); + my_asprintf (&result, "%LF %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -2353,7 +2353,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%Le %d", -zerol, 33, 44, 55); + my_asprintf (&result, "%Le %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 @@ -3108,7 +3108,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%Lg %d", -zerol, 33, 44, 55); + my_asprintf (&result, "%Lg %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0);