[GHC] #11704: Word and Int literals not correctly truncated when cross compiling 64 -> 32 bit

GHC ghc-devs at haskell.org
Sun Mar 13 18:44:44 UTC 2016


#11704: Word and Int literals not correctly truncated when cross compiling 64 -> 32
bit
-------------------------------------+-------------------------------------
           Reporter:  luite          |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.1-rc2
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 GHC does not take the target word size into account for some of the rules
 in `PrelRules`:

 {{{#!hs
   rule_convert        "integerToWord"       integerToWordName
 mkWordLitWord,
   rule_convert        "integerToInt"        integerToIntName
 mkIntLitInt,
 }}}

 The relevant code from `CoreSyn`:

 {{{#!hs
 -- | Create a machine word literal expression of type  @Word#@ from a
 @Word at .
 -- If you want an expression of type @Word@ use 'MkCore.mkWordExpr'
 mkWordLitWord :: DynFlags -> Word -> Expr b

 mkWordLit     dflags w = Lit (mkMachWord dflags w)
 mkWordLitWord dflags w = Lit (mkMachWord dflags (toInteger w))

 -- | Create a machine integer literal expression of type @Int#@ from an
 @Int at .
 -- If you want an expression of type @Int@ use 'MkCore.mkIntExpr'
 mkIntLitInt   :: DynFlags -> Int     -> Expr b
 mkIntLitInt dflags n = Lit (mkMachInt dflags (toInteger n))
 }}}

 If a literal is bigger than the target word size, these rules can lead to
 loss of truncation when optimizing a `fromInteger` / `toInteger` pair.
 This makes testcase `codeGen/5785.hs` fail when compiled with optimization
 with GHCJS on 64 bit GHC.

 It probably also affects targeting 64 platforms with 32 bit compilers,
 where literals would be truncated too much, but I don't have a way of
 testing that.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11704>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list