isnan: Fix porting problem to Solaris 10 with bundled gcc.
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 6 Sep 2011 20:47:45 +0000 (13:47 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 6 Sep 2011 20:47:45 +0000 (13:47 -0700)
Without this fix, the command to link temacs failed due to an
undefined symbol __builtin_isnan.  This is because
/usr/include/iso/math_c99.h #defines isnan(x) to
__builtin_isnan(x), but the bundled gcc, which identifies itself
as gcc 3.4.3 (csl-sol210-3_4-branch+sol_rpath), does not have
a __builtin_isnan.
* configure.in (isnan): Remove now-unnecessary check.
* src/floatfns.c (isnan): #undef, and then #define to a clone of
what's in data.c.
(Fisnan): Always define, since it's always available now.
(syms_of_floatfns): Always define isnan at the Lisp level.

ChangeLog
configure.in
src/ChangeLog
src/floatfns.c

index f33d61e..437c6db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-09-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * configure.in (isnan): Remove now-unnecessary check.
+
 2011-09-06  Paul Eggert  <eggert@cs.ucla.edu>
 
        Merge from gnulib, using build-aux to remove clutter (Bug#9169).
index a892978..5116648 100644 (file)
@@ -2708,7 +2708,7 @@ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm \
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap fsync sync \
 difftime mempcpy mblen mbrlen posix_memalign \
-cfmakeraw cfsetspeed isnan copysign __executable_start)
+cfmakeraw cfsetspeed copysign __executable_start)
 
 dnl Cannot use AC_CHECK_FUNCS
 AC_CACHE_CHECK([for __builtin_unwind_init],
index 6131249..f169125 100644 (file)
@@ -1,3 +1,17 @@
+2011-09-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       isnan: Fix porting problem to Solaris 10 with bundled gcc.
+       Without this fix, the command to link temacs failed due to an
+       undefined symbol __builtin_isnan.  This is because
+       /usr/include/iso/math_c99.h #defines isnan(x) to
+       __builtin_isnan(x), but the bundled gcc, which identifies itself
+       as gcc 3.4.3 (csl-sol210-3_4-branch+sol_rpath), does not have
+       a __builtin_isnan.
+       * floatfns.c (isnan): #undef, and then #define to a clone of
+       what's in data.c.
+       (Fisnan): Always define, since it's always available now.
+       (syms_of_floatfns): Always define isnan at the Lisp level.
+
 2011-09-06  Paul Eggert  <eggert@cs.ucla.edu>
 
        * Makefile.in (gl-stamp): move-if-change now in build-aux (Bug#9169).
index 89aa052..81cf6bd 100644 (file)
@@ -282,7 +282,9 @@ DEFUN ("tan", Ftan, Stan, 1, 1, 0,
   return make_float (d);
 }
 
-#if defined HAVE_ISNAN && defined HAVE_COPYSIGN
+#undef isnan
+#define isnan(x) ((x) != (x))
+
 DEFUN ("isnan", Fisnan, Sisnan, 1, 1, 0,
        doc: /* Return non nil iff argument X is a NaN.  */)
   (Lisp_Object x)
@@ -291,6 +293,7 @@ DEFUN ("isnan", Fisnan, Sisnan, 1, 1, 0,
   return isnan (XFLOAT_DATA (x)) ? Qt : Qnil;
 }
 
+#ifdef HAVE_COPYSIGN
 DEFUN ("copysign", Fcopysign, Scopysign, 1, 2, 0,
        doc: /* Copy sign of X2 to value of X1, and return the result.
 Cause an error if X1 or X2 is not a float.  */)
@@ -1030,8 +1033,8 @@ syms_of_floatfns (void)
   defsubr (&Scos);
   defsubr (&Ssin);
   defsubr (&Stan);
-#if defined HAVE_ISNAN && defined HAVE_COPYSIGN
   defsubr (&Sisnan);
+#ifdef HAVE_COPYSIGN
   defsubr (&Scopysign);
   defsubr (&Sfrexp);
   defsubr (&Sldexp);