[GHC] #15783: Quoting an internal variable causes an error when splicing
GHC
ghc-devs at haskell.org
Fri Oct 19 16:49:08 UTC 2018
#15783: Quoting an internal variable causes an error when splicing
-------------------------------------+-------------------------------------
Reporter: mpickering | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Template Haskell | Version: 8.6.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by RyanGlScott):
Another curious thing. If you compile `B.hs` with `-ddump-simpl`, you'll
get this:
{{{
$ /opt/ghc/8.6.1/bin/ghc B.hs -fforce-recomp -ddump-simpl
[1 of 1] Compiling B ( B.hs, B.o )
==================== Tidy Core ====================
Result size of Tidy Core
= {terms: 24, types: 9, coercions: 0, joins: 0/0}
-- RHS size: {terms: 9, types: 1, coercions: 0, joins: 0/0}
f :: Language.Haskell.TH.Syntax.Q
(Language.Haskell.TH.Syntax.TExp Integer)
[GblId]
f = Language.Haskell.TH.Syntax.unsafeTExpCoerce
@ Integer
(Language.Haskell.TH.Lib.Internal.varE
(Language.Haskell.TH.Syntax.mkNameG_v
(GHC.CString.unpackCString# "main"#)
(GHC.CString.unpackCString# "B"#)
(GHC.CString.unpackCString# "d"#)))
<Typeable stuff elided>
}}}
Now change the typed quote to an untyped one (i.e., change `f = [|| d ||]`
to `f = [| d |]`) and recompile it:
{{{
$ /opt/ghc/8.6.1/bin/ghc B.hs -fforce-recomp -ddump-simpl
[1 of 1] Compiling B ( B.hs, B.o )
==================== Tidy Core ====================
Result size of Tidy Core
= {terms: 25, types: 7, coercions: 0, joins: 0/0}
-- RHS size: {terms: 8, types: 0, coercions: 0, joins: 0/0}
f :: Language.Haskell.TH.Lib.Internal.ExpQ
[GblId]
f = Language.Haskell.TH.Lib.Internal.varE
(Language.Haskell.TH.Syntax.mkNameG_v
(GHC.CString.unpackCString# "main"#)
(GHC.CString.unpackCString# "B"#)
(GHC.CString.unpackCString# "d"#))
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
d :: Integer
[GblId, Caf=NoCafRefs, Unf=OtherCon []]
d = 0
<Typeable stuff elided>
}}}
Notice that `d` actually makes an appearance this time! This makes me
wonder if `d` is being mistakenly removed under the pretense of it being
dead code.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15783#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list