Skip to content
  • Simon Peyton Jones's avatar
    Stop the specialiser generating loopy code · 2b74bd9d
    Simon Peyton Jones authored
    This patch fixes a bad bug in the specialiser, which showed up as
    Trac #13429.  When specialising an imported DFun, the specialiser could
    generate a recusive loop where none existed in the original program.
    
    It's all rather tricky, and I've documented it at some length in
       Note [Avoiding loops]
    
    We'd encoutered exactly this before (Trac #3591) but I had failed
    to realise that the very same thing could happen for /imported/
    DFuns.
    
    I did quite a bit of refactoring.
    
    The compiler seems to get a tiny bit faster on
       deriving/perf/T10858
    but almost all the gain had occurred before now; this
    patch just pushed it over the line.
    2b74bd9d