summaryrefslogtreecommitdiff
path: root/testsuite/tests/stranal
diff options
context:
space:
mode:
authorJoachim Breitner <mail@joachim-breitner.de>2016-07-21 17:44:25 +0200
committerJoachim Breitner <mail@joachim-breitner.de>2016-08-25 18:24:43 +0200
commitd6fd2e3787802265586aef7d51db35e66ef2507a (patch)
treed4c22cd8f8ebef1e2fce38798aefddc8b0e1fadb /testsuite/tests/stranal
parent8d92b88df7c1c04606c8a9e12c1d4bee65c990e4 (diff)
downloadhaskell-d6fd2e3787802265586aef7d51db35e66ef2507a.tar.gz
DmdAnal: Testcase about splitFVs and dmdFix abortion
Any variable with useful information (strict or used-once) will not be included in lazy_fv (according to splitFVs). If we now also remove them from the strictness signatures, their uses are not recorded anywhere – and then probably considered absent.
Diffstat (limited to 'testsuite/tests/stranal')
-rw-r--r--testsuite/tests/stranal/should_run/T12368a.hs27
-rw-r--r--testsuite/tests/stranal/should_run/T12368a.stderr3
2 files changed, 30 insertions, 0 deletions
diff --git a/testsuite/tests/stranal/should_run/T12368a.hs b/testsuite/tests/stranal/should_run/T12368a.hs
new file mode 100644
index 0000000000..301d044493
--- /dev/null
+++ b/testsuite/tests/stranal/should_run/T12368a.hs
@@ -0,0 +1,27 @@
+-- Needs to be a product type
+data Stream = S Int Stream
+
+-- a is wrongly recorded abstent if the non-lazy-fv from foo are thrown away.
+bar :: Int -> Int -> Stream -> Int
+bar a n s = foo n s
+ where
+ -- Non terminating local rec, strict in a
+ foo :: Int -> Stream -> Int
+ foo 0 (S n s) = a
+ foo i (S n s) = a `seq` n + foo (i-1) s
+{-# NOINLINE bar #-}
+
+
+baz :: Int -> Int -> Int
+baz 0 not_absent = 0
+baz 1 not_absent = baz 2 not_absent
+baz x not_absent = bar not_absent 1000 arg
+ where
+ arg = S 1 arg
+
+bamf x = baz x (error "This is good!")
+{-# NOINLINE bamf #-}
+
+
+main :: IO ()
+main = bamf 10 `seq` return ()
diff --git a/testsuite/tests/stranal/should_run/T12368a.stderr b/testsuite/tests/stranal/should_run/T12368a.stderr
new file mode 100644
index 0000000000..98246d33d0
--- /dev/null
+++ b/testsuite/tests/stranal/should_run/T12368a.stderr
@@ -0,0 +1,3 @@
+T12368a: This is good!
+CallStack (from HasCallStack):
+ error, called at T12368a.hs:22:17 in main:Main