summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2022-02-09 13:57:38 +0000
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-02-23 08:16:43 -0500
commit37deb893a915387d663416936b63f8fb74298f42 (patch)
tree01b1d892c701db7eaa9840c1f635a44022409f7c
parent2ed22ba19e6324fda81a7d638f6f3b58254f915f (diff)
downloadhaskell-37deb893a915387d663416936b63f8fb74298f42.tar.gz
Use SrcSpan from the binder as initial source estimate
There are some situations where we end up with no source notes in useful positions in an expression. In this case we currently fail to provide any source information about where an expression came from. This patch improves the initial estimate by using the position from the top-binder as the guess for the location of the whole inner expression. It provides quite a course estimate but it's better than nothing. Ticket #20847
-rw-r--r--compiler/GHC/Stg/Debug.hs9
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/GHC/Stg/Debug.hs b/compiler/GHC/Stg/Debug.hs
index 8452642288..7eb4155068 100644
--- a/compiler/GHC/Stg/Debug.hs
+++ b/compiler/GHC/Stg/Debug.hs
@@ -69,7 +69,14 @@ collectStgBind (StgRec pairs) = do
collectStgRhs :: Id -> StgRhs -> M StgRhs
collectStgRhs bndr (StgRhsClosure ext cc us bs e)= do
- e' <- collectExpr e
+ let
+ name = idName bndr
+ -- If the name has a span, use that initially as the source position in-case
+ -- we don't get anything better.
+ with_span = case nameSrcSpan name of
+ RealSrcSpan pos _ -> withSpan (pos, occNameString (getOccName name))
+ _ -> id
+ e' <- with_span $ collectExpr e
recordInfo bndr e'
return $ StgRhsClosure ext cc us bs e'
collectStgRhs _bndr (StgRhsCon cc dc _mn ticks args) = do