Typechecker tests failures

Yuras Shumovich shumovichy at gmail.com
Mon Dec 8 05:48:12 UTC 2014


Simon,

I tracked T7891 and tc124 failure down to simplifier, namely
`simplExprF1` for `Case`. Core lint catches the bug (requires -O1 at
least), but without -dcore-lint compiler hangs in busy loop. I made it
work with simple patch:

> diff --git a/compiler/simplCore/Simplify.hs b/compiler/simplCore/Simplify.hs
> index 7611f56..d396b60 100644
> --- a/compiler/simplCore/Simplify.hs
> +++ b/compiler/simplCore/Simplify.hs
> @@ -950,8 +950,10 @@ simplExprF1 env expr@(Lam {}) cont
>      zap b | isTyVar b = b
>            | otherwise = zapLamIdInfo b
>  
> -simplExprF1 env (Case scrut bndr _ alts) cont
> -  = simplExprF env scrut (Select NoDup bndr alts env cont)
> +simplExprF1 env (Case scrut bndr alts_ty alts) cont
> +  = do { expr <- simplExprC env scrut (Select NoDup bndr alts env
> +                                        (mkBoringStop alts_ty))
> +       ; rebuild env expr cont }
>  
>  simplExprF1 env (Let (Rec pairs) body) cont
>    = do  { env' <- simplRecBndrs env (map fst pairs)

(I have no idea what most of this code does, but I learned a lot while
investigating this issue :) )

The relevant commit is:

> commit a0b2897ee406e24a05c41768a0fc2395442dfa06
> Author: Simon Peyton Jones <simonpj at microsoft.com>
> Date:   Tue May 27 09:09:28 2014 +0100
> 
>     Simple refactor of the case-of-case transform
>     
>     More modular, less code.  No change in behaviour.

The T7861 failed because additional lambda abstraction in Core. Not sure
whether it is important.

Thanks,
Yuras

On Sat, 2014-12-06 at 19:04 +0300, Yuras Shumovich wrote:
> Hello,
> 
> I was working on #9605, and found a number of failed tests:
> 
> Unexpected failures:
>    should_compile  T7891 [exit code non-0] (hpc,optasm,optllvm)
>    should_compile  tc124 [exit code non-0] (hpc,optasm,optllvm)
>    should_run      T7861 [bad exit code]
> (normal,hpc,optasm,ghci,threaded1,threaded2,dyn,optllvm)
> 
> They seem to be unrelated to my work, and they are skipped when "fast"
> is enabled.
> 
> T7891 and tc124 fail with Core Lint errors.
> 
> Looks like Phabricator uses "fast" way to validate revisions, so the
> failures were not noticed.
> 
> Thanks,
> Yuras
> 
> 




More information about the ghc-devs mailing list