Fix a bug in -foptimal-applicative-do
authorSimon Marlow <marlowsd@gmail.com>
Mon, 12 Jun 2017 21:00:39 +0000 (17:00 -0400)
committerBen Gamari <ben@smart-cactus.org>
Mon, 12 Jun 2017 21:00:40 +0000 (17:00 -0400)
Test Plan: validate

Reviewers: bgamari, niteria, austin, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3640

compiler/rename/RnExpr.hs
testsuite/tests/ado/ado-optimal.hs
testsuite/tests/ado/ado-optimal.stdout

index e1a314f..2c779d2 100644 (file)
@@ -1605,7 +1605,7 @@ mkStmtTreeOptimal stmts =
               (StmtTreeOne (stmt_arr ! hi), 1))
            | left_cost < right_cost
            = ((left,left_cost), (StmtTreeOne (stmt_arr ! hi), 1))
               (StmtTreeOne (stmt_arr ! hi), 1))
            | left_cost < right_cost
            = ((left,left_cost), (StmtTreeOne (stmt_arr ! hi), 1))
-           | otherwise -- left_cost > right_cost
+           | left_cost > right_cost
            = ((StmtTreeOne (stmt_arr ! lo), 1), (right,right_cost))
            | otherwise = minimumBy (comparing cost) alternatives
            where
            = ((StmtTreeOne (stmt_arr ! lo), 1), (right,right_cost))
            | otherwise = minimumBy (comparing cost) alternatives
            where
index aab8d53..d67aa4f 100644 (file)
@@ -18,8 +18,19 @@ test1 = do
   x5 <- const e (x1,x4)
   return (const () x5)
 
   x5 <- const e (x1,x4)
   return (const () x5)
 
+-- (a | c); (b | d); e
+test2 :: M ()
+test2 = do
+  x1 <- a
+  x3 <- c
+  x2 <- const b x1
+  x4 <- const d x3
+  x5 <- const e (x1,x4)
+  return (const () x5)
+
 main = mapM_ run
  [ test1
 main = mapM_ run
  [ test1
+ , test2
  ]
 
 -- Testing code, prints out the structure of a monad/applicative expression
  ]
 
 -- Testing code, prints out the structure of a monad/applicative expression
index 29f9856..1df5e57 100644 (file)
@@ -1 +1,2 @@
 ((a; b) | (c; d)); e
 ((a; b) | (c; d)); e
+(a | c); ((b | d); e)