summaryrefslogtreecommitdiff
path: root/compiler/GHC
diff options
context:
space:
mode:
authorsheaf <sam.derbyshire@gmail.com>2022-03-01 12:45:16 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-03-01 16:23:51 -0500
commit7aeb6d29313b23cd8d4da5d42cd9e740cca5c1df (patch)
tree3bb2a6b1133b1bdcd453f8a0f139cd4d923176cb /compiler/GHC
parentc84dc5065bcf5c87dd3d10421c99aa6941754f57 (diff)
downloadhaskell-7aeb6d29313b23cd8d4da5d42cd9e740cca5c1df.tar.gz
Core Lint: collect args through floatable ticks
We were not looking through floatable ticks when collecting arguments in Core Lint, which caused `checkCanEtaExpand` to fail on something like: ```haskell reallyUnsafePtrEquality = \ @a -> (src<loc> reallyUnsafePtrEquality#) @Lifted @a @Lifted @a ``` We fix this by using `collectArgsTicks tickishFloatable` instead of `collectArgs`, to be consistent with the behaviour of eta expansion outlined in Note [Eta expansion and source notes] in GHC.Core.Opt.Arity. Fixes #21152.
Diffstat (limited to 'compiler/GHC')
-rw-r--r--compiler/GHC/Core/Lint.hs12
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/GHC/Core/Lint.hs b/compiler/GHC/Core/Lint.hs
index 688b63ff55..32d109b2f1 100644
--- a/compiler/GHC/Core/Lint.hs
+++ b/compiler/GHC/Core/Lint.hs
@@ -945,7 +945,17 @@ lintCoreExpr e@(App _ _)
; checkCanEtaExpand fun args app_ty
; return app_pair}
where
- (fun, args) = collectArgs e
+ (fun, args, _source_ticks) = collectArgsTicks tickishFloatable e
+ -- We must look through source ticks to avoid #21152, for example:
+ --
+ -- reallyUnsafePtrEquality
+ -- = \ @a ->
+ -- (src<loc> reallyUnsafePtrEquality#)
+ -- @Lifted @a @Lifted @a
+ --
+ -- To do this, we use `collectArgsTicks tickishFloatable` to match
+ -- the eta expansion behaviour, as per Note [Eta expansion and source notes]
+ -- in GHC.Core.Opt.Arity.
lintCoreExpr (Lam var expr)
= markAllJoinsBad $