From dcf739bd7fb7de140be3bafb4ce211e2e5c7bba9 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Mon, 12 May 2008 10:38:47 +0000 Subject: [PATCH] FIX #1861: floating-point constants for infinity and NaN in via-C --- compiler/cmm/PprC.hs | 11 ++++++++++- includes/Stg.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs index a943575..9a3a3a2 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 + -- 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 7f37783..35f4eda 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 -- 1.7.10.4