[GHC] #16096: let x = ... and x = ... are not the same in GHCi
GHC
ghc-devs at haskell.org
Wed Dec 26 04:40:38 UTC 2018
#16096: let x = ... and x = ... are not the same in GHCi
-------------------------------------+-------------------------------------
Reporter: osa1 | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: GHCi | Version: 8.6.3
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: |
-------------------------------------+-------------------------------------
Description changed by osa1:
Old description:
> With #7253 we implemented support for `x = ...` in GHCi which is supposed
> to do the same thing as `let x = ...`, but they're currently different,
> as observed in #16089, #15721, and probably in other tickets. Here's a
> reproducer:
>
> {{{
> ~ $ ghci -ddump-bcos
> GHCi, version 8.4.4: http://www.haskell.org/ghc/ :? for help
>
> ...
>
> λ:1> let x = [True,False]
>
> ==================== Proto-BCOs ====================
> ProtoBCO ExprTopLevel_E0#0 []:
> let sat_s1vF = ... in ...
> bitmap: 0 []
> PUSH_G GHC.Types.[]
> PUSH_G GHC.Types.False
> PACK : 2
> PUSH_L 0
> PUSH_G GHC.Types.True
> PACK : 2
> PUSH_G GHC.Types.[]
> PUSH_L 1
> PACK : 2
> PUSH_L 0
> PUSH_APPLY_P
> PUSH_G GHC.Base.returnIO
> SLIDE 3 3
> ENTER
>
> λ:2> x = [True,False]
>
> ==================== Proto-BCOs ====================
> ProtoBCO x1_r1wJ#0 []:
> GHC.Types.:
> @ GHC.Types.Bool GHC.Types.False (GHC.Types.[] @ GHC.Types.Bool)
> bitmap: 0 []
> PUSH_G GHC.Types.[]
> PUSH_G GHC.Types.False
> PACK : 2
> ENTER
>
> ProtoBCO Ghci2.x#0 []:
> GHC.Types.: @ GHC.Types.Bool GHC.Types.True x1_r1wJ
> bitmap: 0 []
> PUSH_G x1_r1wJ
> PUSH_G GHC.Types.True
> PACK : 2
> ENTER
>
> ...
> }}}
>
> Expected behavior: these two should generate the same byte code, and
> should be subject to same checks (e.g. for shadowing).
New description:
With #7253 we implemented support for `x = ...` in GHCi which is supposed
to do the same thing as `let x = ...`, but they're currently different, as
observed in #16089, #15721, and probably in other tickets. Here's a
reproducer:
{{{
~ $ ghci -ddump-bcos
GHCi, version 8.4.4: http://www.haskell.org/ghc/ :? for help
...
λ:1> let x = [True,False]
==================== Proto-BCOs ====================
ProtoBCO ExprTopLevel_E0#0 []:
let sat_s1vF = ... in ...
bitmap: 0 []
PUSH_G GHC.Types.[]
PUSH_G GHC.Types.False
PACK : 2
PUSH_L 0
PUSH_G GHC.Types.True
PACK : 2
PUSH_G GHC.Types.[]
PUSH_L 1
PACK : 2
PUSH_L 0
PUSH_APPLY_P
PUSH_G GHC.Base.returnIO
SLIDE 3 3
ENTER
λ:2> x = [True,False]
==================== Proto-BCOs ====================
ProtoBCO x1_r1wJ#0 []:
GHC.Types.:
@ GHC.Types.Bool GHC.Types.False (GHC.Types.[] @ GHC.Types.Bool)
bitmap: 0 []
PUSH_G GHC.Types.[]
PUSH_G GHC.Types.False
PACK : 2
ENTER
ProtoBCO Ghci2.x#0 []:
GHC.Types.: @ GHC.Types.Bool GHC.Types.True x1_r1wJ
bitmap: 0 []
PUSH_G x1_r1wJ
PUSH_G GHC.Types.True
PACK : 2
ENTER
...
}}}
Expected behavior: these two should generate the same byte code, and
should be subject to same checks (e.g. for shadowing).
(Example above uses 8.4.4, but this can be reproduced with GHC HEAD too)
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16096#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list