summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-08-29 12:48:40 +0100
committerSimon Marlow <marlowsd@gmail.com>2012-08-31 16:43:58 +0100
commit6dd55e8a056bb6a4281fc6d730df6ba54505a6e2 (patch)
treeb4edc157168347943c0cc59c59dd602283e62ee9
parent4f656e89e802f3238c5d6cf1cd9bc420cd7f42ff (diff)
downloadhaskell-6dd55e8a056bb6a4281fc6d730df6ba54505a6e2.tar.gz
Fix a bug in foldExpDeep
This caused the CAF analysis to occasionally miss a CAF sometimes, resulting in a very hard to diagnose crash.
-rw-r--r--compiler/cmm/CmmNode.hs9
1 files changed, 1 insertions, 8 deletions
diff --git a/compiler/cmm/CmmNode.hs b/compiler/cmm/CmmNode.hs
index fa41ed5f42..ae7ac091de 100644
--- a/compiler/cmm/CmmNode.hs
+++ b/compiler/cmm/CmmNode.hs
@@ -395,14 +395,7 @@ foldExp f (CmmCall {cml_target=tgt}) z = f tgt z
foldExp f (CmmForeignCall {tgt=tgt, args=args}) z = foldr f (foldExpForeignTarget f tgt z) args
foldExpDeep :: (CmmExpr -> z -> z) -> CmmNode e x -> z -> z
-foldExpDeep f = foldExp go
- where -- go :: CmmExpr -> z -> z
- go e@(CmmMachOp _ es) z = gos es $! f e z
- go e@(CmmLoad addr _) z = go addr $! f e z
- go e z = f e z
-
- gos [] z = z
- gos (e:es) z = gos es $! f e z
+foldExpDeep f = foldExp (wrapRecExpf f)
-- -----------------------------------------------------------------------------