Fix dependencies among specialisations for imported Ids
authorsimonpj@microsoft.com <unknown>
Wed, 26 Jan 2011 17:21:12 +0000 (17:21 +0000)
committersimonpj@microsoft.com <unknown>
Wed, 26 Jan 2011 17:21:12 +0000 (17:21 +0000)
commit869984cd0306c18dcd103b9ef7dd315573dc3c6d
treecbacc3bd6bd806fc4cf5666751f6a765ba8e929e
parent6740a5dc1f10832ba87827a5f6fdbf627078e563
Fix dependencies among specialisations for imported Ids

This was a subtle one (Trac #4903).  See
  Note [Glom the bindings if imported functions are specialised]
in Speclialise.

Fundamentally, a specialised binding for an imported Id was being
declared non-recursive, whereas in fact it can become recursive
via a RULE.  Once it's specified non-recurive the OccAnal pass
treats that as gospel -- and that in turn led to infinite inlining.

Easily fixed by glomming all the specialised bindings in a Rec;
now the OccAnal will sort them out correctly.
compiler/specialise/Specialise.lhs