Commit 2f629beb authored by Ben Gamari's avatar Ben Gamari 🐢 Committed by Marge Bot

testsuite: Add test for #19149

parent 10499f55
Pipeline #29609 canceled with stages
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE TypeOperators #-}
-- The idea:
--
-- 1. Register a CAFfy foreign export
-- 2. Force a CAF reachable from the export
-- 3. Do a GC
-- 4. Then call the foreign export.
import System.Mem
import Foreign.C.Types
x :: Integer
x = fib 80
{-# NOINLINE x #-}
test_export :: IO CInt
test_export = return $ fromIntegral x
fib :: Int -> Integer
fib 0 = 1
fib 1 = 1
fib n = go 1 1 n
where
go :: Integer -> Integer -> Int -> Integer
go !n0 !n1 0 = n1
go n0 n1 i = let n0' = n1
n1' = n0 + n1
in go n0' n1' (i-1)
{-# NOINLINE fib #-}
foreign export ccall test_export :: IO CInt
foreign import ccall test :: IO CInt
main :: IO ()
main = do
print (fromIntegral x :: CInt)
_ <- return $! fib 100000
performMajorGC
test >>= print
int test_export();
int test() {
return test_export();
}
......@@ -209,3 +209,4 @@ test('T16846', [only_ways(['optasm']), exit_code(1)], compile_and_run, [''])
test('T17920', cmm_src, compile_and_run, [''])
test('T18527', normal, compile_and_run, ['T18527FFI.c'])
test('T19149', only_ways('sanity'), compile_and_run, ['T19149_c.c'])
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment