From c4d9be040da3044866cf11637ce6523bab9194c2 Mon Sep 17 00:00:00 2001 From: simonpj Date: Mon, 27 Apr 1998 09:04:10 +0000 Subject: [PATCH] [project @ 1998-04-27 09:04:10 by simonpj] Fix subst_envs bug in SimplCase --- ghc/compiler/simplCore/SimplCase.lhs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ghc/compiler/simplCore/SimplCase.lhs b/ghc/compiler/simplCore/SimplCase.lhs index 99e34ab..7e47bd4 100644 --- a/ghc/compiler/simplCore/SimplCase.lhs +++ b/ghc/compiler/simplCore/SimplCase.lhs @@ -116,7 +116,13 @@ simplCase env (Case inner_scrut inner_alts) (subst_envs, outer_alts) rhs_c resul rhs_c' = \env rhs -> simplExpr env rhs [] result_ty in simplCase env inner_scrut (getSubstEnvs env, inner_alts) - (\env rhs -> simplCase env rhs (emptySubstEnvs, outer_alts') rhs_c' result_ty) + (\env rhs -> simplCase env rhs (subst_envs, outer_alts') rhs_c' result_ty) + -- We used to have "emptySubstEnvs" instead of subst_envs here, + -- but that is *wrong*. The outer_alts' still have the old + -- binders from outer_alts, with un-substituted types, + -- so we must keep their subst_envs with them. It does + -- no harm to the freshly-manufactured part of outer_alts', + -- because it'll have nothing in the domain of subst_envs anyway result_ty `thenSmpl` \ case_expr -> returnSmpl (mkCoLetsNoUnboxed extra_bindings case_expr) -- 1.7.10.4