stdioext: Add support for Minix.
[gnulib.git] / lib / isfinite.c
index 32647fc..310ac2c 100644 (file)
@@ -1,5 +1,5 @@
 /* Test for finite value (zero, subnormal, or normal, and not infinite or NaN).
-   Copyright (C) 2007-2009 Free Software Foundation, Inc.
+   Copyright (C) 2007-2011 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
 #include "isnand-nolibm.h"
 #include "isnanl-nolibm.h"
 
+/* The "cc" compiler on HP-UX 11.11, when optimizing, simplifies the test
+   x - y == 0.0  to  x == y, a simplification which is invalid when x and y
+   are Infinity.  Disable this optimization.  */
+#if defined __hpux && !defined __GNUC__
+static float zerof;
+static double zerod;
+static long double zerol;
+#else
+# define zerof 0.f
+# define zerod 0.
+# define zerol 0.L
+#endif
+
 int gl_isfinitef (float x)
 {
-  return !isnanf (x) && x - x == 0.f;
+  return !isnanf (x) && x - x == zerof;
 }
 
 int gl_isfinited (double x)
 {
-  return !isnand (x) && x - x == 0.;
+  return !isnand (x) && x - x == zerod;
 }
 
 int gl_isfinitel (long double x)
 {
-  return !isnanl (x) && x - x == 0.L;
+  return !isnanl (x) && x - x == zerol;
 }