Adjust strtod detection to catch glibc 2.7 bug.
authorEric Blake <ebb9@byu.net>
Thu, 17 Apr 2008 01:28:29 +0000 (19:28 -0600)
committerEric Blake <ebb9@byu.net>
Thu, 17 Apr 2008 01:34:23 +0000 (19:34 -0600)
* m4/strtod.m4 (gl_FUNC_STRTOD): Test "nan()" behavior.
Reported by BuraphaLinux Server.

Signed-off-by: Eric Blake <ebb9@byu.net>
ChangeLog
m4/strtod.m4

index 8f8a6f2..2f1d444 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-16  Eric Blake  <ebb9@byu.net>
+
+       Adjust strtod detection to catch glibc 2.7 bug.
+       * m4/strtod.m4 (gl_FUNC_STRTOD): Test "nan()" behavior.
+       Reported by BuraphaLinux Server.
+
 2008-04-16  Bruno Haible  <bruno@clisp.org>
 
        Add tentative support for Linux libc5.
index ba411a9..5d52617 100644 (file)
@@ -1,4 +1,4 @@
-# strtod.m4 serial 8
+# strtod.m4 serial 9
 dnl Copyright (C) 2002, 2003, 2006, 2007, 2008 Free Software
 dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
@@ -19,6 +19,14 @@ AC_DEFUN([gl_FUNC_STRTOD],
       [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
 #include <stdlib.h>
 #include <math.h>
+/* Compare two numbers with ==.
+   This is a separate function because IRIX 6.5 "cc -O" miscompiles an
+   'x == x' test.  */
+static int
+numeric_equal (double x, double y)
+{
+  return x == y;
+}
 ]], [[
   {
     /* Older glibc and Cygwin mis-parse "-0x".  */
@@ -45,6 +53,14 @@ AC_DEFUN([gl_FUNC_STRTOD],
     if (value != HUGE_VAL || term != (string + 3))
       return 1;
   }
+  {
+    /* glibc 2.7 and cygwin 1.5.24 misparse "nan()".  */
+    const char *string = "nan()";
+    char *term;
+    double value = strtod (string, &term);
+    if (numeric_equal (value, value) || term != (string + 5))
+      return 1;
+  }
 ]])],
        [gl_cv_func_strtod_works=yes],
        [gl_cv_func_strtod_works=no],