summaryrefslogtreecommitdiff
path: root/tests/examples/ghc86/T10638.hs
blob: 62af44eb935af5055f29f9ad7e311938c1ec435a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{-# LANGUAGE GHCForeignImportPrim, UnliftedFFITypes, QuasiQuotes, MagicHash #-}
{-# LANGUAGE TemplateHaskell #-}

import Language.Haskell.TH
import Language.Haskell.TH.Syntax

import GHC.Exts

{-
   the prim and javascript calling conventions do not support
   headers and the static keyword.
-}

-- check that quasiquoting roundtrips successfully and that the declaration
-- does not include the static keyword
test1 :: String
test1 = $(do (ds@[ForeignD (ImportF _ _ p _ _)]) <-
               [d| foreign import prim "test1" cmm_test1 :: Int# -> Int# |]
             addTopDecls ds
             case p of
              "test1" -> return (LitE . stringL $ p)
              _       -> error $ "unexpected value: " ++ show p
         )

-- check that constructed prim imports with the static keyword are rejected
test2 :: String
test2 = $(do t <- [t| Int# -> Int# |]
             cmm_test2 <- newName "cmm_test2"
             addTopDecls
               [ForeignD (ImportF Prim Safe "static test2" cmm_test2 t)]
             [| test1 |]
         )