FastMutInt: fix Int and Ptr sizes when crosscompiling
authorSergei Trofimovich <slyfox@gentoo.org>
Sun, 2 Apr 2017 15:12:18 +0000 (16:12 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Sun, 2 Apr 2017 15:12:28 +0000 (16:12 +0100)
commitd89b0471888b15844b8bbf68159fe50830be8b24
treed88c846b1e8b0f99fb869bef8624b2d388323c96
parent03e34256e2cba964adf6dcdb1682618f26400b3a
FastMutInt: fix Int and Ptr sizes when crosscompiling

Similar to
  https://ghc.haskell.org/trac/ghc/ticket/13491
  https://phabricator.haskell.org/D3122

SIZEOF_HSINT and SIZEOF_VOID_P are sizes of
target platform. These values are usually
not correct when stage1 is built.

It means the code

```haskell
  newFastMutInt = IO $ \s ->
   case newByteArray# size s of { (# s, arr #) ->
   (# s, FastMutInt arr #) }
   where !(I# size) = SIZEOF_HSINT
```
would try to allocate only 4 bytes on 64-bit-host
targeting 32-bit system.

It does not matter in practice as newByteArray#
implementation rounds up passed value to host's
word size. But one day it might not.

To prevent this class of problems in compiler/
directory 'MachDeps.h' contents is hidden when
ghc-stage1 (-DSTAGE=1) is built.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Reviewers: austin, rwbarton, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3405
compiler/utils/FastMutInt.hs
includes/MachDeps.h