Fix core-lint bug in GHCi
authorSimon Marlow <marlowsd@gmail.com>
Tue, 8 Nov 2011 13:25:00 +0000 (13:25 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 8 Nov 2011 13:25:33 +0000 (13:25 +0000)
The special dead-code eliminator in CorePrep was not taking into
account free variables inside Breakpoint ticks.

compiler/coreSyn/CorePrep.lhs

index df568fc..a8985d0 100644 (file)
@@ -1056,8 +1056,10 @@ dropDeadCode (Cast e c)
   = (Cast e' c, fvs)
   where !(e', fvs) = dropDeadCode e
 dropDeadCode (Tick t e)
-  = (Tick t e', fvs)
+  = (Tick t e', fvs')
   where !(e', fvs) = dropDeadCode e
+        fvs' | Breakpoint _ xs <- t =  fvs `unionVarSet` mkVarSet xs
+             | otherwise            =  fvs
 dropDeadCode e = (e, emptyVarSet)  -- Lit, Type, Coercion
 
 dropDeadCodeAlts :: [CoreAlt] -> ([CoreAlt], VarSet)