[GHC] #10288: -flate-dmd-anal triggers "Entered absent arg"

GHC ghc-devs at haskell.org
Tue Apr 21 08:18:15 UTC 2015


#10288: -flate-dmd-anal triggers "Entered absent arg"
-------------------------------------+-------------------------------------
        Reporter:  yongqli           |                   Owner:  simonpj
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:  7.10.2
       Component:  Compiler          |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  Runtime crash     |  Unknown/Multiple
      Blocked By:                    |               Test Case:
 Related Tickets:                    |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by Simon Peyton Jones <simonpj@…>):

 In [changeset:"d5773a4939b1feea51ec0db6624c9462751e948a/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="d5773a4939b1feea51ec0db6624c9462751e948a"
 Teach DmdAnal that coercions are value arguments!

 The demand analyser was treating coercion args like type args,
 which meant that the arguments in a strictness signature got
 out of step with the arguments of a call.  Result chaos and
 disaster.  Trac #10288 showed it up.

 It's hard to get this bug to show up in practice because
  - functions abstracted over coercions are usually abstracted
    over *boxed* coercions
  - we don't currently unbox a boxed-coercion arg because it's
    GADT (I see how to fix this too)

 But after floating, optimisation, and so on, Trac #10288 did
 get a function abstracted over an unboxed coercion, and then
 the -flate-dmd-anal pass went wrong.

 I don't think I can come up with a test case, but I don't think
 it matters too much.

 Still to come
  - Fix a second bug, namely that coercion variables are wrongly
    marked as absent because DmdAnal doesn't check the the free
    variables of casts. I think this never bites in practice
    (see the follow-up commit)

  - Make GADT products work with strictness analysis
 }}}

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


More information about the ghc-tickets mailing list