summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/cmm/PprC.hs11
-rw-r--r--includes/Stg.h3
2 files changed, 13 insertions, 1 deletions
diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs
index a943575d51..9a3a3a2cf1 100644
--- a/compiler/cmm/PprC.hs
+++ b/compiler/cmm/PprC.hs
@@ -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
diff --git a/includes/Stg.h b/includes/Stg.h
index 7f37783f4a..35f4eda631 100644
--- a/includes/Stg.h
+++ b/includes/Stg.h
@@ -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