Skip to content
  • Simon Peyton Jones's avatar
    Teach DmdAnal that coercions are value arguments! · d5773a49
    Simon Peyton Jones authored
    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
    d5773a49