Refine test case for #9938
authorJoachim Breitner <mail@joachim-breitner.de>
Tue, 30 Dec 2014 10:38:25 +0000 (11:38 +0100)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 30 Dec 2014 10:38:25 +0000 (11:38 +0100)
By passing -O2, the bug appears depending on the order of clauses in
"solve", hence adding T9938B as the other variant.

Currently, T9938 is marked as broken, but maybe the bug is actually in
T9938B, where something (possibly inlining, as suggested by rwbarton)
affected the requirement to link against transformers.

testsuite/tests/driver/Makefile
testsuite/tests/driver/T9938B.hs [new file with mode: 0644]
testsuite/tests/driver/all.T

index 2acedfc..3bec5b7 100644 (file)
@@ -590,5 +590,11 @@ write_interface_make:
 .PHONY: T9938
 T9938:
        $(RM) -rf T9938.o T9938.hi T9938
-       "$(TEST_HC)" -c T9938.hs
-       "$(TEST_HC)" T9938.o -o T9938
+       "$(TEST_HC)" $(TEST_HC_OPTS) -O2 -c T9938.hs
+       "$(TEST_HC)" $(TEST_HC_OPTS) -O2 T9938.o -o T9938
+
+.PHONY: T9938B
+T9938B:
+       $(RM) -rf T9938B.o T9938B.hi T9938B
+       "$(TEST_HC)" $(TEST_HC_OPTS) -O2 -c T9938B.hs
+       "$(TEST_HC)" $(TEST_HC_OPTS) -O2 T9938B.o -o T9938B
diff --git a/testsuite/tests/driver/T9938B.hs b/testsuite/tests/driver/T9938B.hs
new file mode 100644 (file)
index 0000000..8b92369
--- /dev/null
@@ -0,0 +1,13 @@
+module Main where
+
+import Control.Monad
+import Control.Monad.Trans.State
+
+solve :: Int -> StateT () [] ()
+solve 0 = mzero
+solve carry | carry > 0 =
+  do guard (0 == carry)
+     solve (carry -1)
+
+main :: IO ()
+main = return ()
index cd38ceb..fbacf2e 100644 (file)
@@ -414,3 +414,8 @@ test('T9938',
      [ extra_clean(['T9938.hi', 'T9938.o', 'T9938']), expect_broken(9938)],
      run_command,
      ['$MAKE -s --no-print-directory T9938'])
+
+test('T9938B',
+     [ extra_clean(['T9938B.hi', 'T9938B.o', 'T9938B']) ],
+     run_command,
+     ['$MAKE -s --no-print-directory T9938B'])