FIX #1861: floating-point constants for infinity and NaN in via-C
authorSimon Marlow <marlowsd@gmail.com>
Mon, 12 May 2008 10:38:47 +0000 (10:38 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Mon, 12 May 2008 10:38:47 +0000 (10:38 +0000)
compiler/cmm/PprC.hs
includes/Stg.h

index a943575..9a3a3a2 100644 (file)
@@ -395,7 +395,16 @@ pprMachOpApp' mop args
 pprLit :: CmmLit -> SDoc
 pprLit lit = case lit of
     CmmInt i rep      -> pprHexVal i rep
-    CmmFloat f rep     -> parens (machRepCType rep) <> (rational f)
+
+    CmmFloat f rep     -> parens (machRepCType rep) <> str
+        where d = fromRational f :: Double
+              str | isInfinite d && d < 0 = ptext (sLit "-INFINITY")
+                  | isInfinite d          = ptext (sLit "INFINITY")
+                  | isNaN d               = ptext (sLit "NAN")
+                  | otherwise             = text (show d)
+                -- these constants come from <math.h>
+                -- see #1861
+
     CmmLabel clbl      -> mkW_ <> pprCLabelAddr clbl
     CmmLabelOff clbl i -> mkW_ <> pprCLabelAddr clbl <> char '+' <> int i
     CmmLabelDiffOff clbl1 clbl2 i
index 7f37783..35f4eda 100644 (file)
@@ -31,6 +31,9 @@
  */
 #ifndef IN_STG_CODE
 # define IN_STG_CODE 1
+# define _ISOC99_SOURCE
+// Turn on C99 for .hc code.  This gives us the INFINITY and NAN
+// constants from math.h, which we occasionally need to use in .hc (#1861)
 #endif
 
 #if IN_STG_CODE == 0