Fix utterly bogus TagToEnum rule in caseRules
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 7 Feb 2018 09:55:14 +0000 (09:55 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 7 Feb 2018 09:55:14 +0000 (09:55 +0000)
commit4aa98f4a3cb0c965c4df19af2f1ccc2c5483c3a5
tree43172218c0caef8b27d6fb1c870e92b3a338dc02
parentda4681303892804ea08b60bfd47cbb82ca8e6589
Fix utterly bogus TagToEnum rule in caseRules

In prelRules we had:

  tx_con_tte :: DynFlags -> AltCon -> AltCon
  tx_con_tte _      DEFAULT      = DEFAULT
  tx_con_tte dflags (DataAlt dc)
    | tag == 0  = DEFAULT   -- See Note [caseRules for tagToEnum]
    | otherwise = LitAlt (mkMachInt dflags (toInteger tag))

The tag==0 case is totally wrong, and led directly to Trac #14768.

See "Beware" in Note [caseRules for tagToEnum] (in the patch).

Easily fixed, though!
compiler/coreSyn/CoreLint.hs
compiler/prelude/PrelRules.hs
compiler/simplCore/SimplUtils.hs