diff options
Diffstat (limited to 'testsuite/tests/stranal/should_run')
-rw-r--r-- | testsuite/tests/stranal/should_run/Makefile | 3 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/T2756b.hs | 15 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/all.T | 9 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun001.hs | 15 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun001.stdout | 1 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun002.hs | 12 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun002.stderr | 1 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun003.hs | 23 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun003.stdout | 1 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun004.hs | 10 | ||||
-rw-r--r-- | testsuite/tests/stranal/should_run/strun004.stdout | 1 |
11 files changed, 91 insertions, 0 deletions
diff --git a/testsuite/tests/stranal/should_run/Makefile b/testsuite/tests/stranal/should_run/Makefile new file mode 100644 index 0000000000..9101fbd40a --- /dev/null +++ b/testsuite/tests/stranal/should_run/Makefile @@ -0,0 +1,3 @@ +TOP=../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk diff --git a/testsuite/tests/stranal/should_run/T2756b.hs b/testsuite/tests/stranal/should_run/T2756b.hs new file mode 100644 index 0000000000..cb59d50c9b --- /dev/null +++ b/testsuite/tests/stranal/should_run/T2756b.hs @@ -0,0 +1,15 @@ +module Main where + +data X = X () + +{-# NOINLINE newX #-} +newX :: () -> IO X +newX n = do + let {-# NOINLINE value #-} + value = n + return (X value) + +main = do + x <- newX (error "Why?") + case x of + X _ -> return () diff --git a/testsuite/tests/stranal/should_run/all.T b/testsuite/tests/stranal/should_run/all.T new file mode 100644 index 0000000000..d94a7c492d --- /dev/null +++ b/testsuite/tests/stranal/should_run/all.T @@ -0,0 +1,9 @@ +# Optimised only, we're testing the strictness analyser here +setTestOpts( only_ways(['optasm']) ) + +test('strun001', normal, compile_and_run, ['']) +test('strun002', exit_code(1), compile_and_run, ['']) +test('strun003', normal, compile_and_run, ['']) +test('strun004', normal, compile_and_run, ['']) +test('T2756b', normal, compile_and_run, ['']) + diff --git a/testsuite/tests/stranal/should_run/strun001.hs b/testsuite/tests/stranal/should_run/strun001.hs new file mode 100644 index 0000000000..43820f3028 --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun001.hs @@ -0,0 +1,15 @@ +-- Made the new demand analyser enter an absent arg +-- Reason: it thought 'a' was unused in g. + +module Main where + +-- Strictness: SS(AL) -> T +f True p@(x,y) = (p,y) +f False p@(x,y) = f y p + +-- Easy to get the wrong strictness, +-- by thinking 'a' is absent +g True a b = f False (a,b) +g False a b = g b a b + +main = print (g True 'a' True) diff --git a/testsuite/tests/stranal/should_run/strun001.stdout b/testsuite/tests/stranal/should_run/strun001.stdout new file mode 100644 index 0000000000..9cba23c739 --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun001.stdout @@ -0,0 +1 @@ +(('a',True),True) diff --git a/testsuite/tests/stranal/should_run/strun002.hs b/testsuite/tests/stranal/should_run/strun002.hs new file mode 100644 index 0000000000..145166964d --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun002.hs @@ -0,0 +1,12 @@ +-- This showed up an "entered-absent-arg" error in 5.02.1 + +module Main where + +is_volatile :: [Int] -> (String,Int) -> Int +is_volatile [] (destVarName, destPtr) + = error ("Variable not found: " ++ "(" ++ (show destPtr) ++ ") " ++ destVarName) +is_volatile (a:allWrites) (destVarName, destPtr) + | a == destPtr = a + | otherwise = is_volatile allWrites (destVarName, destPtr) + +main = print (is_volatile [] ("hello",2)) diff --git a/testsuite/tests/stranal/should_run/strun002.stderr b/testsuite/tests/stranal/should_run/strun002.stderr new file mode 100644 index 0000000000..ac89b7f80b --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun002.stderr @@ -0,0 +1 @@ +strun002: Variable not found: (2) hello diff --git a/testsuite/tests/stranal/should_run/strun003.hs b/testsuite/tests/stranal/should_run/strun003.hs new file mode 100644 index 0000000000..eaedd59e8c --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun003.hs @@ -0,0 +1,23 @@ +-- This module should run fine with an empty argument list +-- But it won't if the strictness analyser thinks that 'len' is use +-- strictly, which was the case in GHC 6.0 + +-- See the io_hack_reqd in DmdAnal.lhs + +module Main where + +import System.Environment +import System.Exit + +main = do + args <- getArgs + let len = read (head args) :: Int + + (if null args && useLazily len + then putStrLn "ok" >> exitWith ExitSuccess + else return () ) + + print len + +useLazily :: Int -> Bool +useLazily len = ([len,3,4] !! 1) == 3 diff --git a/testsuite/tests/stranal/should_run/strun003.stdout b/testsuite/tests/stranal/should_run/strun003.stdout new file mode 100644 index 0000000000..9766475a41 --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun003.stdout @@ -0,0 +1 @@ +ok diff --git a/testsuite/tests/stranal/should_run/strun004.hs b/testsuite/tests/stranal/should_run/strun004.hs new file mode 100644 index 0000000000..ff58f72ce5 --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun004.hs @@ -0,0 +1,10 @@ +module Main where + +f 0 = 0 +f x = x + g (x-1) + +g 0 = 0 +g x = x - f (x-1) + +main = print (f 300) + diff --git a/testsuite/tests/stranal/should_run/strun004.stdout b/testsuite/tests/stranal/should_run/strun004.stdout new file mode 100644 index 0000000000..697cb3a26d --- /dev/null +++ b/testsuite/tests/stranal/should_run/strun004.stdout @@ -0,0 +1 @@ +300 |