gettimeofday: port recent C++ fix to Emacs
[gnulib.git] / tests / nan.h
index 3bdf643..e95ceb9 100644 (file)
@@ -1,5 +1,5 @@
 /* Macros for not-a-number.
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -17,8 +17,9 @@
 
 /* NaNf () returns a 'float' not-a-number.  */
 
-/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
-#ifdef __DECC
+/* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke
+   on the expression 0.0 / 0.0.  */
+#if defined __DECC || defined _MSC_VER
 static float
 NaNf ()
 {
@@ -32,8 +33,9 @@ NaNf ()
 
 /* NaNd () returns a 'double' not-a-number.  */
 
-/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
-#ifdef __DECC
+/* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke
+   on the expression 0.0 / 0.0.  */
+#if defined __DECC || defined _MSC_VER
 static double
 NaNd ()
 {
@@ -47,4 +49,22 @@ NaNd ()
 
 /* NaNl () returns a 'long double' not-a-number.  */
 
-#define NaNl() (0.0L / 0.0L)
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.
+   The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#elif defined _MSC_VER
+static long double
+NaNl ()
+{
+  static long double zero = 0.0L;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif