diff --git a/testsuite/tests/ffi/should_fail/T5664.hs b/testsuite/tests/ffi/should_fail/T5664.hs new file mode 100644 index 0000000000000000000000000000000000000000..4966f3abb927e064c889e4264c77bd39704cae6d --- /dev/null +++ b/testsuite/tests/ffi/should_fail/T5664.hs @@ -0,0 +1,25 @@ +module T5664 where + +import Foreign +import Foreign.C + +data D = D +newtype I = I CInt + +foreign import ccall "dynamic" + mkFun1 :: FunPtr (CInt -> IO ()) -> CInt -> IO () + +foreign import ccall "dynamic" + mkFun2 :: FunPtr (I -> IO ()) -> CInt -> IO () + +foreign import ccall "dynamic" + mkFun3 :: FunPtr (D -> IO ()) -> CInt -> IO () + +foreign import ccall "wrapper" + mkCallBack1 :: IO CInt -> IO (FunPtr (IO CInt)) + +foreign import ccall "wrapper" + mkCallBack2 :: IO CInt -> IO (FunPtr (IO I)) + +foreign import ccall "wrapper" + mkCallBack3 :: IO CInt -> IO (FunPtr (IO D)) diff --git a/testsuite/tests/ffi/should_fail/T5664.stderr b/testsuite/tests/ffi/should_fail/T5664.stderr new file mode 100644 index 0000000000000000000000000000000000000000..30bd017a1d43fff62c29900e91f386fdbf305c6e --- /dev/null +++ b/testsuite/tests/ffi/should_fail/T5664.stderr @@ -0,0 +1,13 @@ + +T5664.hs:15:1: + Unacceptable argument type in foreign declaration: + FunPtr (D -> IO ()) + When checking declaration: + foreign import ccall safe "dynamic" mkFun3 + :: FunPtr (D -> IO ()) -> CInt -> IO () + +T5664.hs:24:1: + Unacceptable result type in foreign declaration: IO (FunPtr (IO D)) + When checking declaration: + foreign import ccall safe "wrapper" mkCallBack3 + :: IO CInt -> IO (FunPtr (IO D)) diff --git a/testsuite/tests/ffi/should_fail/all.T b/testsuite/tests/ffi/should_fail/all.T index 188ef99bfb9e8920572b1b0b4a9867dfd630fdbf..8da27021d8fb0acc039d0dfeb7f21a08834dbe4e 100644 --- a/testsuite/tests/ffi/should_fail/all.T +++ b/testsuite/tests/ffi/should_fail/all.T @@ -10,3 +10,4 @@ test('ccfail004', only_compiler_types(['ghc']), multimod_compile_fail, ['ccfail0 test('ccfail005', only_compiler_types(['ghc']), compile_fail, ['']) test('ccall_value', normal, compile_fail, ['']) test('capi_value_function', normal, compile_fail, ['']) +test('T5664', normal, compile_fail, ['-v0']) diff --git a/testsuite/tests/th/T5555.hs b/testsuite/tests/th/T5555.hs new file mode 100644 index 0000000000000000000000000000000000000000..a874a7349c45de9c6bf67b4317c62c7e6b78f5bd --- /dev/null +++ b/testsuite/tests/th/T5555.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE TemplateHaskell, QuasiQuotes #-} +import qualified T5555_Lib as L + +test :: String +test = [L.s|hello world|] + +main :: IO () +main = putStrLn test diff --git a/testsuite/tests/th/T5555.stdout b/testsuite/tests/th/T5555.stdout new file mode 100644 index 0000000000000000000000000000000000000000..3b18e512dba79e4c8300dd08aeb37f8e728b8dad --- /dev/null +++ b/testsuite/tests/th/T5555.stdout @@ -0,0 +1 @@ +hello world diff --git a/testsuite/tests/th/T5555_Lib.hs b/testsuite/tests/th/T5555_Lib.hs new file mode 100644 index 0000000000000000000000000000000000000000..66c18d228bfa3f9aea70b57083ce0480be27a7bd --- /dev/null +++ b/testsuite/tests/th/T5555_Lib.hs @@ -0,0 +1,10 @@ +module T5555_Lib(s) where + +import Language.Haskell.TH +import Language.Haskell.TH.Quote + +s :: QuasiQuoter +s = QuasiQuoter expr undefined undefined undefined + +expr :: String -> Q Exp +expr = stringE diff --git a/testsuite/tests/th/T5976.hs b/testsuite/tests/th/T5976.hs new file mode 100644 index 0000000000000000000000000000000000000000..aa388c764e03188d5b0bbdfa5fb032b3a83ec65a --- /dev/null +++ b/testsuite/tests/th/T5976.hs @@ -0,0 +1,3 @@ +{-# LANGUAGE TemplateHaskell #-} + +$( error ("foo " ++ error "bar") ) diff --git a/testsuite/tests/th/T5976.stderr b/testsuite/tests/th/T5976.stderr new file mode 100644 index 0000000000000000000000000000000000000000..64cf33acef15933cd001db67cbb48144c62b980d --- /dev/null +++ b/testsuite/tests/th/T5976.stderr @@ -0,0 +1,5 @@ + +T5976.hs:1:1: + Exception when trying to run compile-time code: + bar + Code: error ((++) "foo " error "bar") diff --git a/testsuite/tests/th/T5984.hs b/testsuite/tests/th/T5984.hs new file mode 100644 index 0000000000000000000000000000000000000000..63f21b6548ce3ea002c11380650821eced1ee691 --- /dev/null +++ b/testsuite/tests/th/T5984.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE TemplateHaskell #-} + +module T5984 where + +import T5984_Lib + +$nt +$dt diff --git a/testsuite/tests/th/T5984.stderr b/testsuite/tests/th/T5984.stderr new file mode 100644 index 0000000000000000000000000000000000000000..50c7cbfdd0dca6be14279497dd9cab1e071a808a --- /dev/null +++ b/testsuite/tests/th/T5984.stderr @@ -0,0 +1,10 @@ +T5984.hs:1:1: Splicing declarations + nt + ======> + T5984.hs:7:1-3 + newtype Foo = Foo Int +T5984.hs:1:1: Splicing declarations + dt + ======> + T5984.hs:8:1-3 + data Bar = Bar Int diff --git a/testsuite/tests/th/T5984_Lib.hs b/testsuite/tests/th/T5984_Lib.hs new file mode 100644 index 0000000000000000000000000000000000000000..c3abfa21f988a7d3824f7805f44449007989b9fe --- /dev/null +++ b/testsuite/tests/th/T5984_Lib.hs @@ -0,0 +1,13 @@ +{-# LANGUAGE TemplateHaskell #-} + +module T5984_Lib where + +import Language.Haskell.TH + +nt :: Q [Dec] +nt = return [NewtypeD [] foo [] (NormalC foo [(NotStrict, ConT ''Int)]) []] + where foo = mkName "Foo" + +dt :: Q [Dec] +dt = return [DataD [] bar [] [NormalC bar [(NotStrict, ConT ''Int)]] []] + where bar = mkName "Bar" diff --git a/testsuite/tests/th/all.T b/testsuite/tests/th/all.T index 4bf6a324c20dfa02fabe9e6f93dbba04bd92dba9..fbe54f987c1138d874df474cc6b129b735f80b4f 100644 --- a/testsuite/tests/th/all.T +++ b/testsuite/tests/th/all.T @@ -228,4 +228,8 @@ test('T5886', extra_clean(['T5886a.hi','T5886a.o']), test('T4135', normal, compile, ['-v0']) test('T5971', normal, compile_fail, ['-v0 -dsuppress-uniques']) test('T5968', normal, compile, ['-v0']) - +test('T5984', extra_clean(['T5984_Lib.hi', 'T5984_Lib.o']), + multimod_compile, ['T5984', '-v0 -ddump-splices']) +test('T5555', extra_clean(['T5555_Lib.hi', 'T5555_Lib.o']), + multimod_compile, ['T5555', '-v0']) +test('T5976', normal, compile_fail, ['-v0'])