Don't expose strictness when sm_inline is False
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 23 May 2018 12:30:21 +0000 (13:30 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 23 May 2018 13:44:40 +0000 (14:44 +0100)
commitd191db48c43469ee1818887715bcbc5c0eb1d91f
treeafa2dabbb6d0ef58512a65ed8979c9a8c61715ea
parent86bba7d519fb6050f78b7e3bac2b3f54273fd70e
Don't expose strictness when sm_inline is False

This is very much a corner case, but Trac #15163 showed
that if you have a RULE like
    forall x. f (g x) = ..x..

and g = undefined, then the simplifier is likely to discard
that 'x' argument. It is usually right to do so; but not here
because then x is used on the right but not bound on the left.

The fix is a narrow one, aimed at this rather pathalogical case.
See Note [Do not expose strictness if sm_inline=False] in
SimplUtils.
compiler/simplCore/SimplUtils.hs
compiler/simplCore/Simplify.hs