Skip to content

PrelRules: Don't violate let/app invariant

Ben Gamari requested to merge wip/T16742 into master

Previously shiftRule would rewrite as invalid shift like

let x = I# (uncheckedIShiftL# n 80)
in ...

to

let x = I# (error "invalid shift")
in ...

However, this breaks the let/app invariant as error is not okay-for-speculation. There isn't an easy way to avoid this so let's not try. Instead we just take advantage of the undefined nature of invalid shifts and return zero.

Fixes #16742 (closed).

Edited by Ben Gamari

Merge request reports