Stoping constant folding of calls to chr# that are invalid
[ghc-hetmet.git] / compiler / basicTypes / Literal.lhs
index 598b5a4..a5c413a 100644 (file)
@@ -16,6 +16,7 @@ module Literal
 
        , inIntRange, inWordRange, tARGET_MAX_INT, inCharRange
        , isZeroLit
+       , litFitsInChar
 
        , word2IntLit, int2WordLit
        , narrow8IntLit, narrow16IntLit, narrow32IntLit
@@ -284,6 +285,12 @@ litIsDupable :: Literal -> Bool
 litIsDupable (MachStr _) = False
 litIsDupable other      = True
 
+litFitsInChar :: Literal -> Bool
+litFitsInChar (MachInt i)
+                        = fromInteger i <= ord minBound 
+                        && fromInteger i >= ord maxBound 
+litFitsInChar _         = False
+
 litSize :: Literal -> Int
 -- Used by CoreUnfold.sizeExpr
 litSize (MachStr str) = 1 + ((lengthFS str + 3) `div` 4)