diff options
Diffstat (limited to 'testsuite/tests/codeGen')
-rw-r--r-- | testsuite/tests/codeGen/should_run/T14251.hs | 27 | ||||
-rw-r--r-- | testsuite/tests/codeGen/should_run/T14251.stdout | 4 | ||||
-rw-r--r-- | testsuite/tests/codeGen/should_run/all.T | 3 |
3 files changed, 34 insertions, 0 deletions
diff --git a/testsuite/tests/codeGen/should_run/T14251.hs b/testsuite/tests/codeGen/should_run/T14251.hs new file mode 100644 index 0000000000..d31498efe4 --- /dev/null +++ b/testsuite/tests/codeGen/should_run/T14251.hs @@ -0,0 +1,27 @@ +{-# LANGUAGE MagicHash, BangPatterns #-} +module Main where + +import GHC.Exts + +{-# NOINLINE f #-} +f :: (Int# -> Float# -> Double# -> Float# -> Double# -> String) -> String +f g = g 3# 4.0# 5.0## 6.0# 6.9## ++ " World!" + +{-# NOINLINE p #-} +p :: Int# -> Float# -> Double# -> Float# -> Double# -> String +p i j k l m = "Hello" + +{-# NOINLINE q #-} +q :: Int# -> Int# -> Float# -> Double# -> Float# -> Double# -> String +q _ i j k l m = "Hello " ++ show (F# l) ++ " " ++ show (D# m) + +{-# NOINLINE r #-} +r :: Int# -> Float# -> Double# -> Float# -> Double# -> String +r i = let !(I# z) = length [I# 1# .. I# i] in \j k l m -> p z j k l m + -- ghc won't eta-expand around the length, because it has unknown cost + +main = do + putStrLn (f p) -- fast call + putStrLn (f r) -- slow call: function but wrong arity + let g = last [q 1#] + putStrLn (f g) -- slow call: thunk diff --git a/testsuite/tests/codeGen/should_run/T14251.stdout b/testsuite/tests/codeGen/should_run/T14251.stdout new file mode 100644 index 0000000000..de803214d4 --- /dev/null +++ b/testsuite/tests/codeGen/should_run/T14251.stdout @@ -0,0 +1,4 @@ +Hello World! +Hello World! +Hello 6.0 6.9 World! + diff --git a/testsuite/tests/codeGen/should_run/all.T b/testsuite/tests/codeGen/should_run/all.T index 60f86d766f..025acb4244 100644 --- a/testsuite/tests/codeGen/should_run/all.T +++ b/testsuite/tests/codeGen/should_run/all.T @@ -172,3 +172,6 @@ test('T13825-unit', test('T14619', normal, compile_and_run, ['']) test('T14754', normal, compile_and_run, ['']) test('T14346', only_ways(['threaded1','threaded2']), compile_and_run, ['-O -threaded']) +test('T14251', [extra_ways(['llvm', 'optllvm']), + expect_broken_for(14251, ['optllvm'])], + compile_and_run, ['']) |