diff options
| author | Joachim Breitner <mail@joachim-breitner.de> | 2017-03-28 16:19:16 -0400 |
|---|---|---|
| committer | Joachim Breitner <mail@joachim-breitner.de> | 2017-03-28 19:35:31 -0400 |
| commit | e07211f752b9b98e2bd6957f126bd537d178041a (patch) | |
| tree | ba6a057b95415def0fc421612f4f79557c85fd8d /compiler/simplCore | |
| parent | c77551abd42a346d03826d23df710ebf9eacb19f (diff) | |
| download | haskell-e07211f752b9b98e2bd6957f126bd537d178041a.tar.gz | |
Zap Call Arity info in the simplifier
As #13479 shows, there are corner cases where the simplifier decides to
not eta-expand a function as much as its call arity would suggest, but
instead transforms the code that the call arity annotation becomes a
lie.
As the call arity information is only meant to be used by the
immediatelly following simplifier run, it makes sense to simply zap the
information there.
Differential Revision: https://phabricator.haskell.org/D3390
Diffstat (limited to 'compiler/simplCore')
| -rw-r--r-- | compiler/simplCore/Simplify.hs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/simplCore/Simplify.hs b/compiler/simplCore/Simplify.hs index 1b89f3e394..43006f87d3 100644 --- a/compiler/simplCore/Simplify.hs +++ b/compiler/simplCore/Simplify.hs @@ -803,7 +803,12 @@ completeBind env top_lvl is_rec mb_cont old_bndr new_bndr new_rhs | otherwise = info2 - final_id = new_bndr `setIdInfo` info3 + -- Zap call arity info. We have used it by now (via + -- `tryEtaExpandRhs`), and the simplifier can invalidate this + -- information, leading to broken code later (e.g. #13479) + info4 = zapCallArityInfo info3 + + final_id = new_bndr `setIdInfo` info4 ; -- pprTrace "Binding" (ppr final_id <+> ppr new_unfolding) $ return (addNonRec env final_id final_rhs) } } |
