Fix an egregious bug in the NonRec case of bindFreeVars
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 23 May 2014 07:15:52 +0000 (08:15 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 28 Aug 2014 10:14:14 +0000 (11:14 +0100)
We were missing the free variables of rules etc.  It's correct
for Rec but wrong for NonRec.  I'm not sure how this bug hasn't
bitten us before, but it cropped up when I was doing trimAutoRules.

compiler/coreSyn/CoreFVs.lhs

index 4011191..69da1ad 100644 (file)
@@ -82,7 +82,7 @@ exprsFreeVars = foldr (unionVarSet . exprFreeVars) emptyVarSet
 
 -- | Find all locally defined free Ids in a binding group
 bindFreeVars :: CoreBind -> VarSet
-bindFreeVars (NonRec _ r) = exprFreeVars r
+bindFreeVars (NonRec b r) = rhs_fvs (b,r) isLocalVar emptyVarSet
 bindFreeVars (Rec prs)    = addBndrs (map fst prs)
                                      (foldr (union . rhs_fvs) noVars prs)
                                      isLocalVar emptyVarSet