summaryrefslogtreecommitdiff
path: root/compiler/simplCore
diff options
context:
space:
mode:
authorJoachim Breitner <mail@joachim-breitner.de>2017-03-28 16:19:16 -0400
committerJoachim Breitner <mail@joachim-breitner.de>2017-03-28 19:35:31 -0400
commite07211f752b9b98e2bd6957f126bd537d178041a (patch)
treeba6a057b95415def0fc421612f4f79557c85fd8d /compiler/simplCore
parentc77551abd42a346d03826d23df710ebf9eacb19f (diff)
downloadhaskell-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.hs7
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) } }