# HG changeset patch # User Bruno Haible # Date 1217583027 -7200 # Node ID 7bf583f1e789aee081d01e1459df592b2b6111a3 # Parent ff6a63286245fa495cef38ed781a087b33022b25 Work around bug of HP-UX 10.20 cc with -0.0 literal. diff -r ff6a63286245 -r 7bf583f1e789 ChangeLog --- a/ChangeLog Thu Jul 31 15:35:25 2008 +0200 +++ b/ChangeLog Fri Aug 01 11:30:27 2008 +0200 @@ -1,3 +1,60 @@ +2008-08-01 Bruno Haible + + Work around bug of HP-UX 10.20 cc with -0.0 literal. + * tests/test-isnanf.h (zero): New variable. + (main): Avoid literal -0.0f. + * tests/test-isnand.h (zero): New variable. + (main): Avoid literal -0.0. + * tests/test-isnanl.h (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-isnan.c (zerof, zerod, zerol): New variables. + (test_float, test_double, test_long_double): Avoid literals -0.0f, + -0.0, -0.0L. + * tests/test-signbit.c (test_signbitf): Avoid literal -0.0f. + (test_signbitd): Avoid literal -0.0. + (test_signbitl): Avoid literal -0.0L. + * tests/test-ceilf1.c (zero): New variable. + (main): Avoid literal -0.0f. + * tests/test-ceill.c (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-floorf1.c (zero): New variable. + (main): Avoid literal -0.0f. + * tests/test-floorl.c (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-roundf1.c (zero): New variable. + (main): Avoid literal -0.0f. + * tests/test-round1.c (zero): New variable. + (main): Avoid literal -0.0. + * tests/test-roundl.c (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-truncf1.c (zero): New variable. + (main): Avoid literal -0.0f. + * tests/test-trunc1.c (zero): New variable. + (main): Avoid literal -0.0. + * tests/test-truncl.c (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-frexp.c (zero): New variable. + (main): Avoid literal -0.0. + * tests/test-frexpl.c (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-ldexpl.c (zero): New variable. + (main): Avoid literal -0.0L. + * tests/test-snprintf-posix.h (have_minus_zero): Avoid literal -0.0. + (zerod, zerol): New variables. + (test_function): Avoid literals -0.0, -0.0L. + * tests/test-sprintf-posix.h (have_minus_zero): Avoid literal -0.0. + (zerod, zerol): New variables. + (test_function): Avoid literals -0.0, -0.0L. + * tests/test-vasnprintf-posix.c (have_minus_zero): Avoid literal -0.0. + (zerod, zerol): New variables. + (test_function): Avoid literals -0.0, -0.0L. + * tests/test-vasprintf-posix.c (have_minus_zero): Avoid literal -0.0. + (zerod, zerol): New variables. + (test_function): Avoid literals -0.0, -0.0L. + * tests/test-strtod.c (zero): New variable. + (main): Avoid literal -0.0. + Reported by Jonathan C. Patschke . + 2008-07-31 Jim Meyering sha256.h: correct definition of SHA224_DIGEST_SIZE diff -r ff6a63286245 -r 7bf583f1e789 tests/test-ceilf1.c --- a/tests/test-ceilf1.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-ceilf1.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,12 +38,16 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + int main () { /* Zero. */ ASSERT (ceilf (0.0f) == 0.0f); - ASSERT (ceilf (-0.0f) == 0.0f); + ASSERT (ceilf (-zero) == 0.0f); /* Positive numbers. */ ASSERT (ceilf (0.3f) == 1.0f); ASSERT (ceilf (0.7f) == 1.0f); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-ceill.c --- a/tests/test-ceill.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-ceill.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,6 +38,10 @@ } \ 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; + int main () { @@ -47,7 +51,7 @@ /* Zero. */ ASSERT (ceill (0.0L) == 0.0L); - ASSERT (ceill (-0.0L) == 0.0L); + ASSERT (ceill (-zero) == 0.0L); /* Positive numbers. */ ASSERT (ceill (0.3L) == 1.0L); ASSERT (ceill (0.7L) == 1.0L); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-floorf1.c --- a/tests/test-floorf1.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-floorf1.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,12 +38,16 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + int main () { /* Zero. */ ASSERT (floorf (0.0f) == 0.0f); - ASSERT (floorf (-0.0f) == 0.0f); + ASSERT (floorf (-zero) == 0.0f); /* Positive numbers. */ ASSERT (floorf (0.3f) == 0.0f); ASSERT (floorf (0.7f) == 0.0f); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-floorl.c --- a/tests/test-floorl.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-floorl.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,6 +38,10 @@ } \ 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; + int main () { @@ -47,7 +51,7 @@ /* Zero. */ ASSERT (floorl (0.0L) == 0.0L); - ASSERT (floorl (-0.0L) == 0.0L); + ASSERT (floorl (-zero) == 0.0L); /* Positive numbers. */ ASSERT (floorl (0.3L) == 0.0L); ASSERT (floorl (0.7L) == 0.0L); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-frexp.c --- a/tests/test-frexp.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-frexp.c Fri Aug 01 11:30:27 2008 +0200 @@ -44,6 +44,10 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + static double my_ldexp (double x, int d) { @@ -102,7 +106,7 @@ { /* Negative zero. */ int exp = -9999; double mantissa; - x = -0.0; + x = -zero; mantissa = frexp (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-frexpl.c --- a/tests/test-frexpl.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-frexpl.c Fri Aug 01 11:30:27 2008 +0200 @@ -57,6 +57,10 @@ # 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; + static long double my_ldexp (long double x, int d) { @@ -113,7 +117,7 @@ { /* Negative zero. */ int exp = -9999; long double mantissa; - x = -0.0L; + x = -zero; mantissa = frexpl (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-isnan.c --- a/tests/test-isnan.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-isnan.c Fri Aug 01 11:30:27 2008 +0200 @@ -40,6 +40,18 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zerof = 0.0f; + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + 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; + static void test_float (void) { @@ -51,7 +63,7 @@ ASSERT (!isnan (-2.718e30f)); ASSERT (!isnan (-2.718e-30f)); ASSERT (!isnan (0.0f)); - ASSERT (!isnan (-0.0f)); + ASSERT (!isnan (-zerof)); /* Infinite values. */ ASSERT (!isnan (1.0f / 0.0f)); ASSERT (!isnan (-1.0f / 0.0f)); @@ -91,7 +103,7 @@ ASSERT (!isnan (-2.718e30)); ASSERT (!isnan (-2.718e-30)); ASSERT (!isnan (0.0)); - ASSERT (!isnan (-0.0)); + ASSERT (!isnan (-zerod)); /* Infinite values. */ ASSERT (!isnan (1.0 / 0.0)); ASSERT (!isnan (-1.0 / 0.0)); @@ -134,7 +146,7 @@ ASSERT (!isnan (-2.718e30L)); ASSERT (!isnan (-2.718e-30L)); ASSERT (!isnan (0.0L)); - ASSERT (!isnan (-0.0L)); + ASSERT (!isnan (-zerol)); /* Infinite values. */ ASSERT (!isnan (1.0L / 0.0L)); ASSERT (!isnan (-1.0L / 0.0L)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-isnand.h --- a/tests/test-isnand.h Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-isnand.h Fri Aug 01 11:30:27 2008 +0200 @@ -34,6 +34,10 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + int main () { @@ -45,7 +49,7 @@ ASSERT (!isnand (-2.718e30)); ASSERT (!isnand (-2.718e-30)); ASSERT (!isnand (0.0)); - ASSERT (!isnand (-0.0)); + ASSERT (!isnand (-zero)); /* Infinite values. */ ASSERT (!isnand (1.0 / 0.0)); ASSERT (!isnand (-1.0 / 0.0)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-isnanf.h --- a/tests/test-isnanf.h Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-isnanf.h Fri Aug 01 11:30:27 2008 +0200 @@ -34,6 +34,10 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + int main () { @@ -45,7 +49,7 @@ ASSERT (!isnanf (-2.718e30f)); ASSERT (!isnanf (-2.718e-30f)); ASSERT (!isnanf (0.0f)); - ASSERT (!isnanf (-0.0f)); + ASSERT (!isnanf (-zero)); /* Infinite values. */ ASSERT (!isnanf (1.0f / 0.0f)); ASSERT (!isnanf (-1.0f / 0.0f)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-isnanl.h --- a/tests/test-isnanl.h Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-isnanl.h Fri Aug 01 11:30:27 2008 +0200 @@ -33,6 +33,10 @@ } \ 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; + int main () { @@ -49,7 +53,7 @@ ASSERT (!isnanl (-2.718e30L)); ASSERT (!isnanl (-2.718e-30L)); ASSERT (!isnanl (0.0L)); - ASSERT (!isnanl (-0.0L)); + ASSERT (!isnanl (-zero)); /* Infinite values. */ ASSERT (!isnanl (1.0L / 0.0L)); ASSERT (!isnanl (-1.0L / 0.0L)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-ldexpl.c --- a/tests/test-ldexpl.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-ldexpl.c Fri Aug 01 11:30:27 2008 +0200 @@ -39,6 +39,10 @@ } \ 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; + int main () { @@ -78,7 +82,7 @@ } { /* Negative zero. */ - x = -0.0L; + x = -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 -r ff6a63286245 -r 7bf583f1e789 tests/test-round1.c --- a/tests/test-round1.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-round1.c Fri Aug 01 11:30:27 2008 +0200 @@ -40,12 +40,16 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + int main () { /* Zero. */ ASSERT (round (0.0) == 0.0); - ASSERT (round (-0.0) == 0.0); + ASSERT (round (-zero) == 0.0); /* Positive numbers. */ ASSERT (round (0.3) == 0.0); ASSERT (round (0.5) == 1.0); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-roundf1.c --- a/tests/test-roundf1.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-roundf1.c Fri Aug 01 11:30:27 2008 +0200 @@ -40,12 +40,16 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + int main () { /* Zero. */ ASSERT (roundf (0.0f) == 0.0f); - ASSERT (roundf (-0.0f) == 0.0f); + ASSERT (roundf (-zero) == 0.0f); /* Positive numbers. */ ASSERT (roundf (0.3f) == 0.0f); ASSERT (roundf (0.5f) == 1.0f); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-roundl.c --- a/tests/test-roundl.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-roundl.c Fri Aug 01 11:30:27 2008 +0200 @@ -40,6 +40,10 @@ } \ 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; + int main () { @@ -49,7 +53,7 @@ /* Zero. */ ASSERT (roundl (0.0L) == 0.0L); - ASSERT (roundl (-0.0L) == 0.0L); + ASSERT (roundl (-zero) == 0.0L); /* Positive numbers. */ ASSERT (roundl (0.3L) == 0.0L); ASSERT (roundl (0.5L) == 1.0L); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-signbit.c --- a/tests/test-signbit.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-signbit.c Fri Aug 01 11:30:27 2008 +0200 @@ -56,9 +56,9 @@ /* Zeros. */ ASSERT (!signbit (0.0f)); if (1.0f / -zerof < 0) - ASSERT (signbit (-0.0f)); + ASSERT (signbit (-zerof)); else - ASSERT (!signbit (-0.0f)); + ASSERT (!signbit (-zerof)); /* Infinite values. */ ASSERT (!signbit (1.0f / 0.0f)); ASSERT (signbit (-1.0f / 0.0f)); @@ -101,9 +101,9 @@ /* Zeros. */ ASSERT (!signbit (0.0)); if (1.0 / -zerod < 0) - ASSERT (signbit (-0.0)); + ASSERT (signbit (-zerod)); else - ASSERT (!signbit (-0.0)); + ASSERT (!signbit (-zerod)); /* Infinite values. */ ASSERT (!signbit (1.0 / 0.0)); ASSERT (signbit (-1.0 / 0.0)); @@ -144,9 +144,9 @@ /* Zeros. */ ASSERT (!signbit (0.0L)); if (1.0L / minus_zerol < 0) - ASSERT (signbit (-0.0L)); + ASSERT (signbit (-zerol)); else - ASSERT (!signbit (-0.0L)); + ASSERT (!signbit (-zerol)); /* Infinite values. */ ASSERT (!signbit (1.0L / 0.0L)); ASSERT (signbit (-1.0L / 0.0L)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-snprintf-posix.h --- a/tests/test-snprintf-posix.h Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-snprintf-posix.h Fri Aug 01 11:30:27 2008 +0200 @@ -23,10 +23,18 @@ have_minus_zero () { static double plus_zero = 0.0; - static double minus_zero = -0.0; + double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + 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; + /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN @@ -172,7 +180,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%a %d", -0.0, 33, 44, 55); + my_snprintf (result, sizeof (result), "%a %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); @@ -436,7 +444,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%La %d", -0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%La %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); @@ -881,7 +889,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%f %d", -0.0, 33, 44, 55); + my_snprintf (result, sizeof (result), "%f %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1144,7 +1152,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Lf %d", -0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Lf %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1407,7 +1415,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%F %d", -0.0, 33, 44, 55); + my_snprintf (result, sizeof (result), "%F %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1517,7 +1525,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%LF %d", -0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%LF %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1731,7 +1739,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%e %d", -0.0, 33, 44, 55); + my_snprintf (result, sizeof (result), "%e %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); @@ -2008,7 +2016,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Le %d", -0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Le %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0); ASSERT (retval == strlen (result)); @@ -2372,7 +2380,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%g %d", -0.0, 33, 44, 55); + my_snprintf (result, sizeof (result), "%g %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); @@ -2639,7 +2647,7 @@ { /* Negative zero. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Lg %d", -0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Lg %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-sprintf-posix.h --- a/tests/test-sprintf-posix.h Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-sprintf-posix.h Fri Aug 01 11:30:27 2008 +0200 @@ -23,10 +23,18 @@ have_minus_zero () { static double plus_zero = 0.0; - static double minus_zero = -0.0; + double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + 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; + /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN @@ -158,7 +166,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%a %d", -0.0, 33, 44, 55); + my_sprintf (result, "%a %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); @@ -422,7 +430,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%La %d", -0.0L, 33, 44, 55); + my_sprintf (result, "%La %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); @@ -867,7 +875,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%f %d", -0.0, 33, 44, 55); + my_sprintf (result, "%f %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1124,7 +1132,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%Lf %d", -0.0L, 33, 44, 55); + my_sprintf (result, "%Lf %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1381,7 +1389,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%F %d", -0.0, 33, 44, 55); + my_sprintf (result, "%F %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1491,7 +1499,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%LF %d", -0.0L, 33, 44, 55); + my_sprintf (result, "%LF %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); @@ -1705,7 +1713,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%e %d", -0.0, 33, 44, 55); + my_sprintf (result, "%e %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); @@ -1982,7 +1990,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%Le %d", -0.0L, 33, 44, 55); + my_sprintf (result, "%Le %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0); ASSERT (retval == strlen (result)); @@ -2346,7 +2354,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%g %d", -0.0, 33, 44, 55); + my_sprintf (result, "%g %d", -zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); @@ -2613,7 +2621,7 @@ { /* Negative zero. */ char result[1000]; int retval = - my_sprintf (result, "%Lg %d", -0.0L, 33, 44, 55); + my_sprintf (result, "%Lg %d", -zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-strtod.c --- a/tests/test-strtod.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-strtod.c Fri Aug 01 11:30:27 2008 +0200 @@ -42,6 +42,10 @@ /* Avoid requiring -lm just for fabs. */ #define FABS(d) ((d) < 0.0 ? -(d) : (d)) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + int main () { @@ -317,7 +321,7 @@ errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); - ASSERT (!!signbit (result) == !!signbit (-0.0)); /* IRIX 6.5, OSF/1 4.0 */ + ASSERT (!!signbit (result) == !!signbit (-zero)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); ASSERT (errno == 0); } @@ -412,7 +416,7 @@ errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); - ASSERT (!!signbit (result) == !!signbit (-0.0)); /* MacOS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ + ASSERT (!!signbit (result) == !!signbit (-zero)); /* MacOS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ ASSERT (errno == 0); } @@ -537,7 +541,7 @@ 0 on negative underflow, even though quality of implementation demands preserving the sign. Disable this test until fixed glibc is more prevalent. */ - ASSERT (!!signbit (result) == !!signbit (-0.0)); /* glibc-2.3.6, mingw */ + ASSERT (!!signbit (result) == !!signbit (-zero)); /* glibc-2.3.6, mingw */ #endif ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); @@ -906,7 +910,7 @@ errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); - ASSERT (!!signbit (result) == !!signbit (-0.0)); /* IRIX 6.5, OSF/1 4.0 */ + ASSERT (!!signbit (result) == !!signbit (-zero)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + m); ASSERT (errno == 0); } diff -r ff6a63286245 -r 7bf583f1e789 tests/test-trunc1.c --- a/tests/test-trunc1.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-trunc1.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,12 +38,16 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + int main () { /* Zero. */ ASSERT (trunc (0.0) == 0.0); - ASSERT (trunc (-0.0) == 0.0); + ASSERT (trunc (-zero) == 0.0); /* Positive numbers. */ ASSERT (trunc (0.3) == 0.0); ASSERT (trunc (0.7) == 0.0); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-truncf1.c --- a/tests/test-truncf1.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-truncf1.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,12 +38,16 @@ } \ while (0) +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + int main () { /* Zero. */ ASSERT (truncf (0.0f) == 0.0f); - ASSERT (truncf (-0.0f) == 0.0f); + ASSERT (truncf (-zero) == 0.0f); /* Positive numbers. */ ASSERT (truncf (0.3f) == 0.0f); ASSERT (truncf (0.7f) == 0.0f); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-truncl.c --- a/tests/test-truncl.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-truncl.c Fri Aug 01 11:30:27 2008 +0200 @@ -38,6 +38,10 @@ } \ 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; + int main () { @@ -47,7 +51,7 @@ /* Zero. */ ASSERT (truncl (0.0L) == 0.0L); - ASSERT (truncl (-0.0L) == 0.0L); + ASSERT (truncl (-zero) == 0.0L); /* Positive numbers. */ ASSERT (truncl (0.3L) == 0.0L); ASSERT (truncl (0.7L) == 0.0L); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-vasnprintf-posix.c --- a/tests/test-vasnprintf-posix.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-vasnprintf-posix.c Fri Aug 01 11:30:27 2008 +0200 @@ -48,10 +48,18 @@ have_minus_zero () { static double plus_zero = 0.0; - static double minus_zero = -0.0; + double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + 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; + /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN @@ -217,7 +225,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%a %d", -0.0, 33, 44, 55); + my_asnprintf (NULL, &length, "%a %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); @@ -531,7 +539,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%La %d", -0.0L, 33, 44, 55); + my_asnprintf (NULL, &length, "%La %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); @@ -1044,7 +1052,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%f %d", -0.0, 33, 44, 55); + my_asnprintf (NULL, &length, "%f %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1343,7 +1351,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%Lf %d", -0.0L, 33, 44, 55); + my_asnprintf (NULL, &length, "%Lf %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1654,7 +1662,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%F %d", -0.0, 33, 44, 55); + my_asnprintf (NULL, &length, "%F %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1790,7 +1798,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%LF %d", -0.0L, 33, 44, 55); + my_asnprintf (NULL, &length, "%LF %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -2031,7 +2039,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%e %d", -0.0, 33, 44, 55); + my_asnprintf (NULL, &length, "%e %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 @@ -2352,7 +2360,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%Le %d", -0.0L, 33, 44, 55); + my_asnprintf (NULL, &length, "%Le %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0); @@ -2774,7 +2782,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%g %d", -0.0, 33, 44, 55); + my_asnprintf (NULL, &length, "%g %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); @@ -3085,7 +3093,7 @@ { /* Negative zero. */ size_t length; char *result = - my_asnprintf (NULL, &length, "%Lg %d", -0.0L, 33, 44, 55); + my_asnprintf (NULL, &length, "%Lg %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); diff -r ff6a63286245 -r 7bf583f1e789 tests/test-vasprintf-posix.c --- a/tests/test-vasprintf-posix.c Thu Jul 31 15:35:25 2008 +0200 +++ b/tests/test-vasprintf-posix.c Fri Aug 01 11:30:27 2008 +0200 @@ -48,10 +48,18 @@ have_minus_zero () { static double plus_zero = 0.0; - static double minus_zero = -0.0; + double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + 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; + /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN @@ -198,7 +206,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%a %d", -0.0, 33, 44, 55); + my_asprintf (&result, "%a %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); @@ -512,7 +520,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%La %d", -0.0L, 33, 44, 55); + my_asprintf (&result, "%La %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); @@ -1025,7 +1033,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%f %d", -0.0, 33, 44, 55); + my_asprintf (&result, "%f %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1324,7 +1332,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%Lf %d", -0.0L, 33, 44, 55); + my_asprintf (&result, "%Lf %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1635,7 +1643,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%F %d", -0.0, 33, 44, 55); + my_asprintf (&result, "%F %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -1771,7 +1779,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%LF %d", -0.0L, 33, 44, 55); + my_asprintf (&result, "%LF %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); @@ -2012,7 +2020,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%e %d", -0.0, 33, 44, 55); + my_asprintf (&result, "%e %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 @@ -2333,7 +2341,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%Le %d", -0.0L, 33, 44, 55); + my_asprintf (&result, "%Le %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0); @@ -2755,7 +2763,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%g %d", -0.0, 33, 44, 55); + my_asprintf (&result, "%g %d", -zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); @@ -3066,7 +3074,7 @@ { /* Negative zero. */ char *result; int retval = - my_asprintf (&result, "%Lg %d", -0.0L, 33, 44, 55); + my_asprintf (&result, "%Lg %d", -zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0);