[GHC] #11158: Combine exprIsTrivial and cpe_ExprIsTrivial
GHC
ghc-devs at haskell.org
Thu Oct 13 14:55:30 UTC 2016
#11158: Combine exprIsTrivial and cpe_ExprIsTrivial
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: task | Status: infoneeded
Priority: highest | Milestone: 8.2.1
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1656
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by nomeata):
It arose out of `main = return ()`. In CoreTidy, it is
{{{
main = return @ IO GHC.Base.$fMonadIO @ () GHC.Tuple.()
}}}
and CorePrep turns that (due to my change of `cpe_ExprIsTrivial`!) into
{{{
-- RHS size: {terms: 1, types: 0, coercions: 0}
sat_sNJ :: ()
[LclId]
sat_sNJ = GHC.Tuple.()
-- RHS size: {terms: 3, types: 2, coercions: 0}
T11158.main :: GHC.Types.IO ()
[GblId]
T11158.main =
GHC.Base.return @ GHC.Types.IO GHC.Base.$fMonadIO @ () sat_sNJ
}}}
which yields this STG
{{{
sat_sNJ :: ()
[LclId] =
NO_CCS ()! [];
T11158.main :: GHC.Types.IO ()
[GblId] =
\u [] GHC.Base.return GHC.Base.$fMonadIO sat_sNJ;
}}}
Given that the crash happens in `scavenge_static ()` I think it is likely
that the SRT table is related to the issue.
I don’t see anywhere in `cpeArg` (which creates the float) code that would
set CAF information on the floated argument. According to note `Note
[CafInfo and floating]` it is safe to have top-level binds with
`HasCafRef` even when they do not actually reference any CAFs.
(Trying to set `NoCafInfo` on all the extra floats I am generating here,
and rebuilding the libraries. Will report back.)
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11158#comment:18>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list