[GHC] #14779: Compiling with -g fails -lint-core checks
GHC
ghc-devs at haskell.org
Thu Feb 8 14:50:30 UTC 2018
#14779: Compiling with -g fails -lint-core checks
-------------------------------------+-------------------------------------
Reporter: niteria | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version:
(Debugging) |
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Compile-time | Unknown/Multiple
crash or panic | Test Case:
Blocked By: | Blocking:
Related Tickets: #14122, #14123, | Differential Rev(s):
#8472, #14406 |
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by niteria):
> That is bad, and we should not allow it. In which case whichever code is
generating it needs to be fixed.
https://phabricator.haskell.org/D3925 suggests that this is the way we
want to proceed. It refers to this note:
{{{
Note [CoreSyn top-level string literals]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
As an exception to the usual rule that top-level binders must be lifted,
we allow binding primitive string literals (of type Addr#) of type Addr#
at the
top level. This allows us to share string literals earlier in the pipeline
and
crucially allows other optimizations in the Core2Core pipeline to fire.
Consider,
f n = let a::Addr# = "foo"#
in \x -> blah
In order to be able to inline `f`, we would like to float `a` to the top.
Another option would be to inline `a`, but that would lead to duplicating
string
literals, which we want to avoid. See Trac #8472.
The solution is simply to allow top-level unlifted binders. We can't allow
arbitrary unlifted expression at the top-level though, unlifted binders
cannot
be thunks, so we just allow string literals.
It is important to note that top-level primitive string literals cannot be
wrapped in Ticks, as is otherwise done with lifted bindings. CoreToStg
expects
to see just a plain (Lit (MachStr ...)) expression on the RHS of primitive
string bindings; anything else and things break. CoreLint checks this
invariant.
Also see Note [Compilation plan for top-level string literals].
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14779#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list