shouldInlinePrimOp: Fix Int overflow
authorJohan Tibell <johan.tibell@gmail.com>
Thu, 7 Aug 2014 15:07:00 +0000 (17:07 +0200)
committerJohan Tibell <johan.tibell@gmail.com>
Tue, 12 Aug 2014 20:13:21 +0000 (22:13 +0200)
commit6f862dfae20afdcd671133f3534b1bf5c25bbd9b
treed99d37de4d5f2a6aeae8263f8a95b3fa9004dad7
parent91a48c5460258fdde800429df1e0d305cd2f0078
shouldInlinePrimOp: Fix Int overflow

There were two overflow issues in shouldInlinePrimOp. The first one is
due to a negative CmmInt literal being created if the array size was
given as larger than 2^63-1 (on a 64-bit platform.) This meant that
large array sizes could compare as being smaller than
maxInlineAllocSize.

The second issue is that we casted the Integer to an Int in the
comparison, which again meant that large array sizes could compare as
being smaller than maxInlineAllocSize.

The attempt to allocate a large array inline then caused a segfault.

Fixes #9416.
compiler/cmm/SMRep.lhs
compiler/codeGen/StgCmmPrim.hs