[project @ 2001-08-20 14:10:02 by simonmar]
authorsimonmar <unknown>
Mon, 20 Aug 2001 14:10:02 +0000 (14:10 +0000)
committersimonmar <unknown>
Mon, 20 Aug 2001 14:10:02 +0000 (14:10 +0000)
Remove the in-range assertions on mkMachInt/mkMachWord.  They clearly
aren't true, because there's nothing stopping you from writing an
out-of-range Int# literal (although that's the only way I can see for
these to arise).

The wider issue is what should be done about out-of-range Int#
literals; I vaguely remember that at some point we disallowed them,
but I can't find anything in the logs.  The case which triggered the
assertion, namely "intToWord# 0xffff0000" would appear to be a
legitimate use for an out-of-range Int# literal though, given that
you can't write Word# literals directly.

ghc/compiler/basicTypes/Literal.lhs

index 03101e3..3555d31 100644 (file)
@@ -146,10 +146,13 @@ instance Ord Literal where
 \begin{code}
 mkMachInt, mkMachWord, mkMachInt64, mkMachWord64 :: Integer -> Literal
 
-mkMachInt  x   = ASSERT2( inIntRange x,  integer x ) MachInt x
-mkMachWord x   = ASSERT2( inWordRange x, integer x ) MachWord x
-mkMachInt64  x = MachInt64 x   -- Assertions?
-mkMachWord64 x = MachWord64 x  -- Ditto?
+mkMachInt  x   = -- ASSERT2( inIntRange x,  integer x ) 
+                -- not true: you can write out of range Int# literals
+                MachInt x
+mkMachWord x   = -- ASSERT2( inWordRange x, integer x ) 
+                MachWord x
+mkMachInt64  x = MachInt64 x
+mkMachWord64 x = MachWord64 x
 
 inIntRange, inWordRange :: Integer -> Bool
 inIntRange  x = x >= tARGET_MIN_INT && x <= tARGET_MAX_INT