diff m4/strtod.m4 @ 9929:357b15084942

Adjust strtod detection to catch glibc 2.7 bug. * m4/strtod.m4 (gl_FUNC_STRTOD): Test "nan()" behavior. Reported by BuraphaLinux Server. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Wed, 16 Apr 2008 19:28:29 -0600
parents 02bfc9acab82
children f6cba5a556ce
line wrap: on
line diff
--- a/m4/strtod.m4
+++ b/m4/strtod.m4
@@ -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_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 @@
     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],