Fix subtle bug in TcTyClsDecls.mkGADTVars
authorSimon Peyton Jones <simonpj@microsoft.com>
Sat, 2 Sep 2017 17:13:32 +0000 (18:13 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 14 Sep 2017 07:37:00 +0000 (08:37 +0100)
commit3a27e34f7a59a30f91fad9dd2ca194acdb1bcb1a
tree52b63965881cf57d280d7dd31b6368a03ace92af
parentab2d3d5db6e2a16cccdfdfc89c9b6f30834fa335
Fix subtle bug in TcTyClsDecls.mkGADTVars

This bug was revealed by Trac #14162.  In a GADT-style data-family
instance we ended up a data constructor whose type mentioned
an out-of-scope variable.  (This variable was in the kind of
a variable in the kind of a variable.)

Only Lint complained about this (actually only when the
data constructor was injected into the bindings by CorePrep).
So it doesn't matter much -- but it's a solid bug and might
bite us some day.

It took me quite a while to unravel because the test case was itself
quite tricky.  But the fix is easy; just add a missing binding to the
substitution we are building up.  It's in the regrettably-subtle
mkGADTVars function.
compiler/typecheck/TcTyClsDecls.hs
testsuite/tests/indexed-types/should_compile/T14162.hs [new file with mode: 0644]
testsuite/tests/indexed-types/should_compile/all.T