Keep `shift{L,R}` on `Integer` from segfaulting
authorBen Gamari <bgamari.foss@gmail.com>
Sat, 10 Oct 2015 12:32:28 +0000 (14:32 +0200)
committerBen Gamari <ben@smart-cactus.org>
Sat, 10 Oct 2015 13:41:05 +0000 (15:41 +0200)
commit182c44da50db028a432a81789048c87922bd30f4
treeabc889e99d07c2d1d543cd2f3bb05146ae00c8ee
parent5d841108acef950fed6a5e608ac9b18e7431aa87
Keep `shift{L,R}` on `Integer` from segfaulting

This can happen because the underlying primitive operations in
`integer-gmp` don't support negative shift-amounts, and since
`integer-gmp` can't throw proper exceptions and just provides a
low-level API, it simply segfaults instead...

This patch simply removes the `shift{L,R}` method definitions (and
defines `unsafeShift{L,R}` instead) whose default-impls fallback on
using `shift` which properly handles negative shift arguments.

This addresses #10571

Test Plan: harbormaster can do it

Reviewers: hvr, austin, rwbarton

Subscribers: rwbarton, thomie, bgamari

Differential Revision: https://phabricator.haskell.org/D1018

GHC Trac Issues: #10571
libraries/base/Data/Bits.hs
libraries/base/changelog.md