[GHC] #13242: Panic "StgCmmEnv: variable not found" with ApplicativeDo and ExistentialQuantification

GHC ghc-devs at haskell.org
Wed Feb 8 08:39:07 UTC 2017


#13242: Panic "StgCmmEnv: variable not found" with ApplicativeDo and
ExistentialQuantification
-------------------------------------+-------------------------------------
        Reporter:  ljli              |                Owner:  simonmar
            Type:  bug               |               Status:  new
        Priority:  highest           |            Milestone:
       Component:  Compiler          |              Version:  8.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:                    |
-------------------------------------+-------------------------------------
Changes (by simonpj):

 * priority:  normal => highest
 * owner:   => simonmar


Comment:

 Simon M: this is an outright bug somewhere in `ApplicativeDo`.  Using
 `-dcore-lint` nails it immediately in the output of the desugarer:
 {{{
 *** Core Lint errors : in result of Desugar (before optimization) ***
 <no location info>: warning:
     In the expression: >>=
                          @ (ST s)
                          $dMonad_aRm
                          @ (STRef s Integer)
                          @ ()
                          (newSTRef @ Integer @ s 1)
                          (\ (ref_aFs :: STRef s Integer) ->
                             >>
                               @ (ST s)
                               $dMonad_a12S
                               @ Integer
                               @ ()
                               (readSTRef @ s @ Integer ref_aFs)
                               (return @ (ST s) $dMonad_a131 @ () ()))
     $dMonad_aRm :: Monad m_aRl[tau:3]
     [LclId] is out of scope
 <no location info>: warning:
     In the expression: >>=
                          @ (ST s)
                          $dMonad_aRm
                          @ (STRef s Integer)
                          @ ()
                          (newSTRef @ Integer @ s 1)
                          (\ (ref_aFs :: STRef s Integer) ->
                             >>
                               @ (ST s)
                               $dMonad_a12S
                               @ Integer
                               @ ()
                               (readSTRef @ s @ Integer ref_aFs)
                               (return @ (ST s) $dMonad_a131 @ () ()))
     Argument value doesn't match argument type:
     Fun type:
         Monad (ST s) => forall a b. ST s a -> (a -> ST s b) -> ST s b
     Arg type: Monad m_aRl[tau:3]
     Arg: $dMonad_aRm
 *** Offending Program ***
 Rec {
 $tcA :: TyCon
 [LclIdX]
 $tcA =
   TyCon
     4740327979976134328##
     15826189822472469109##
     $trModule
     (TrNameS "A"#)

 $tc'A :: TyCon
 [LclIdX]
 $tc'A =
   TyCon
     9840332441209672147##
     16375955839481284679##
     $trModule
     (TrNameS "'A"#)

 $trModule :: Module
 [LclIdX]
 $trModule = Module (TrNameS "main"#) (TrNameS "T13242"#)

 st :: forall s. ST s ()
 [LclIdX]
 st =
   \ (@ s_aQu) ->
     let {
       $dApplicative_aR0 :: Applicative (ST s)
       [LclId]
       $dApplicative_aR0 = $fApplicativeST @ s } in
     let {
       $dApplicative_aR7 :: Applicative (ST s)
       [LclId]
       $dApplicative_aR7 = $dApplicative_aR0 } in
     let {
       $dFunctor_aQK :: Functor (ST s)
       [LclId]
       $dFunctor_aQK = $fFunctorST @ s } in
     <*>
       @ (ST s)
       $dApplicative_aR0
       @ ()
       @ ()
       (fmap
          @ (ST s)
          $dFunctor_aQK
          @ A
          @ (() -> ())
          (\ (ds_d13u :: A) (ds_d13v :: ()) ->
             case ds_d13u of wild_00 { A @ a_aRa ds_d13w ->
             let {
               $dNum_a12O :: Num Integer
               [LclId]
               $dNum_a12O = $fNumInteger } in
             let {
               $dMonad_aRm :: Monad (ST s)
               [LclId]
               $dMonad_aRm = $fMonadST @ s } in
             let {
               $dMonad_a12S :: Monad (ST s)
               [LclId]
               $dMonad_a12S = $dMonad_aRm } in
             let {
               $dMonad_a131 :: Monad (ST s)
               [LclId]
               $dMonad_a131 = $dMonad_aRm } in
             let {
               ds_d13x :: ()
               [LclId]
               ds_d13x = ds_d13v } in
             case ds_d13x of wild_00 { () -> () }
             })
          ($ @ 'LiftedRep
             @ A
             @ (ST s A)
             (pure @ (ST s) $dApplicative_aR7 @ A)
             (A @ Bool True)))
       (>>=
          @ (ST s)
          $dMonad_aRm
          @ (STRef s Integer)
          @ ()
          (newSTRef @ Integer @ s 1)
          (\ (ref_aFs :: STRef s Integer) ->
             >>
               @ (ST s)
               $dMonad_a12S
               @ Integer
               @ ()
               (readSTRef @ s @ Integer ref_aFs)
               (return @ (ST s) $dMonad_a131 @ () ())))
 end Rec }
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13242#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list