[Git][ghc/ghc][wip/torsten.schmits/23612] Avoid substituting constructors for breakpoint FVs
Torsten Schmits (@torsten.schmits)
gitlab at gitlab.haskell.org
Wed Aug 2 17:41:33 UTC 2023
Torsten Schmits pushed to branch wip/torsten.schmits/23612 at Glasgow Haskell Compiler / GHC
Commits:
b13ae6e3 by Torsten Schmits at 2023-08-02T19:41:15+02:00
Avoid substituting constructors for breakpoint FVs
Fixes #23612
MR: !11026
The fingerprinting logic in Iface.Recomp gets the constructor's tycon as
an additional element of a decl group's dependency graph, although it's
not in its local OccEnv.
It's probably also generally nonsense to keep a constructor in the
inspectable breakpoint vars.
- - - - -
4 changed files:
- compiler/GHC/Core/Subst.hs
- + testsuite/tests/codeGen/should_run/T23612.hs
- + testsuite/tests/codeGen/should_run/T23612.script
- testsuite/tests/codeGen/should_run/all.T
Changes:
=====================================
compiler/GHC/Core/Subst.hs
=====================================
@@ -592,9 +592,22 @@ substDVarSet subst@(Subst _ _ tv_env cv_env) fvs
------------------
substTickish :: Subst -> CoreTickish -> CoreTickish
substTickish subst (Breakpoint ext n ids modl)
- = Breakpoint ext n (mapMaybe do_one ids) modl
+ = Breakpoint ext n (filter not_datacon (mapMaybe do_one ids)) modl
where
do_one = getIdFromTrivialExpr_maybe . lookupIdSubst subst
+
+ -- If a variable is substituted with a constructor, there's no point in
+ -- inspecting it anymore, and it would cause problems with the dependency
+ -- computation when fingerprinting iface decls, since it pulls in the name
+ -- of the tycon even when it's not in the decl's OccEnv.
+ not_datacon s
+ | isId s
+ = case idDetails s of
+ DataConWorkId {} -> False
+ DataConWrapId {} -> False
+ _ -> True
+ | otherwise = True
+
substTickish _subst other = other
{- Note [Substitute lazily]
=====================================
testsuite/tests/codeGen/should_run/T23612.hs
=====================================
@@ -0,0 +1,11 @@
+module Main where
+
+data X = A1
+
+foo :: X -> ()
+foo A1 = ()
+
+bar :: X -> ()
+bar y = foo y
+
+main = seq (map bar [A1]) (return ())
=====================================
testsuite/tests/codeGen/should_run/T23612.script
=====================================
@@ -0,0 +1 @@
+:load T23612
=====================================
testsuite/tests/codeGen/should_run/all.T
=====================================
@@ -237,3 +237,5 @@ test('MulMayOflo_full',
ignore_stdout],
multi_compile_and_run,
['MulMayOflo', [('MulMayOflo_full.cmm', '')], ''])
+
+test('T23612', only_ways(['ghci-opt']), ghci_script, ['T23612.script'])
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b13ae6e3e9cd2d8b8ff21106ecc4bc5c6862a1dc
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b13ae6e3e9cd2d8b8ff21106ecc4bc5c6862a1dc
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230802/6d172859/attachment-0001.html>
More information about the ghc-commits
mailing list