summaryrefslogtreecommitdiff
path: root/testsuite/tests/safeHaskell/safeInfered
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2011-10-19 12:15:17 -0700
committerDavid Terei <davidterei@gmail.com>2011-10-25 14:47:31 -0700
commited0bb9bef3338d143bf27945123e3fe4cf7d0047 (patch)
tree8a59b3eb5e71031d330adf512c01a4eb0d98d809 /testsuite/tests/safeHaskell/safeInfered
parenta4a8a28f57dbcc4fac9cb2a5a6f326af65964366 (diff)
downloadhaskell-ed0bb9bef3338d143bf27945123e3fe4cf7d0047.tar.gz
Modify and add a bunch of new tests for Safe Haskell changes
Diffstat (limited to 'testsuite/tests/safeHaskell/safeInfered')
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/Makefile3
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/Mixed01.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/Mixed02.hs10
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered01.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered01_A.hs6
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered02.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered02_A.hs10
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered03.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered03_A.hs6
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01_A.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02_A.hs7
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03_A.hs7
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04_A.hs9
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05_A.hs10
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06.hs5
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06_A.hs6
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07.hs5
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07_A.hs10
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08_A.hs9
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_A.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_B.hs6
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/all.T29
29 files changed, 242 insertions, 0 deletions
diff --git a/testsuite/tests/safeHaskell/safeInfered/Makefile b/testsuite/tests/safeHaskell/safeInfered/Makefile
new file mode 100644
index 0000000000..9101fbd40a
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/Makefile
@@ -0,0 +1,3 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
diff --git a/testsuite/tests/safeHaskell/safeInfered/Mixed01.hs b/testsuite/tests/safeHaskell/safeInfered/Mixed01.hs
new file mode 100644
index 0000000000..cb895fe634
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/Mixed01.hs
@@ -0,0 +1,8 @@
+-- | Should fail compilation because safe imports aren't enabled
+module Mixed01 where
+
+import safe Data.Word
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/Mixed02.hs b/testsuite/tests/safeHaskell/safeInfered/Mixed02.hs
new file mode 100644
index 0000000000..062c2db64d
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/Mixed02.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE Unsafe #-}
+-- | Should fail compilation because we import Data.Word as safe and unsafe
+module Mixed02 where
+
+import safe qualified Data.Word as DW
+import Data.Word
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered01.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered01.hs
new file mode 100644
index 0000000000..1562a18592
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered01.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module SafeInfered01 where
+
+import safe SafeInfered01_A.hs
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered01_A.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered01_A.hs
new file mode 100644
index 0000000000..f66ac43d78
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered01_A.hs
@@ -0,0 +1,6 @@
+-- | Trivial Safe Module
+module SafeInfered01_A where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered02.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered02.hs
new file mode 100644
index 0000000000..6656c5acf7
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered02.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module SafeInfered02 where
+
+import safe SafeInfered02_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered02_A.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered02_A.hs
new file mode 100644
index 0000000000..fff3286de5
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered02_A.hs
@@ -0,0 +1,10 @@
+-- | Only uses deriving of Typeable so should be considered safe
+module SafeInfered02_A where
+
+import Data.Typeable
+
+data G = G Int deriving (Typeable)
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered03.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered03.hs
new file mode 100644
index 0000000000..9c7af12231
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered03.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module SafeInfered03 where
+
+import safe SafeInfered03_A
+
+g :: Int
+g = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered03_A.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered03_A.hs
new file mode 100644
index 0000000000..01c2839cfc
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered03_A.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+-- | FFI but in IO monad so safe
+module SafeInfered03_A where
+
+foreign import ccall "math.h" sin :: CDouble -> IO CDouble
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01.hs
new file mode 100644
index 0000000000..b1db9ea578
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered01 where
+
+import safe UnsafeInfered01_A
+
+g :: IO a -> a
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01_A.hs
new file mode 100644
index 0000000000..0fe65b9536
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered01_A.hs
@@ -0,0 +1,8 @@
+-- | Trivial Unsafe Module
+module UnsafeInfered01_A where
+
+import System.IO.Unsafe
+
+f :: IO a -> a
+f = unsafePerformIO
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.hs
new file mode 100644
index 0000000000..67105965d8
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered02 where
+
+import safe UnsafeInfered02_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02_A.hs
new file mode 100644
index 0000000000..5a9a0db7f0
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02_A.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE TemplateHaskell #-}
+-- | Unsafe as uses TH
+module UnsafeInfered02_A where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03.hs
new file mode 100644
index 0000000000..67220ac4d0
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered03 where
+
+import safe UnsafeInfered03_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03_A.hs
new file mode 100644
index 0000000000..ea3202ed5d
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered03_A.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+-- | Unsafe as uses GND
+module UnsafeInfered03_A where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04.hs
new file mode 100644
index 0000000000..85b7121bc3
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered04 where
+
+import safe UnsafeInfered04_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04_A.hs
new file mode 100644
index 0000000000..244c3be1be
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered04_A.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE RULES #-}
+-- | Unsafe as uses RULES
+-- Although only turns on the flag doesn't define? So mark safe
+-- maybe?
+module UnsafeInfered04_A where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05.hs
new file mode 100644
index 0000000000..712d02a350
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered05 where
+
+import safe UnsafeInfered05_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05_A.hs
new file mode 100644
index 0000000000..4d147716f5
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05_A.hs
@@ -0,0 +1,10 @@
+{-# OPTIONS_GHC -fenable-rewrite-rules #-}
+-- | Unsafe as uses RULES
+-- Although only turns on the flag doesn't define? So mark safe
+-- maybe?
+module UnsafeInfered05_A where
+
+{-# RULES "f" f = undefined #-}
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06.hs
new file mode 100644
index 0000000000..a5bb127202
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06.hs
@@ -0,0 +1,5 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered06 where
+
+import safe UnsafeInfered06_A
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06_A.hs
new file mode 100644
index 0000000000..f865193a69
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered06_A.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+-- | Unsafe as uses FFI with a pure function
+module UnsafeInfered06_A where
+
+foreign import ccall "math.h" sin :: CDouble -> CDouble
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07.hs
new file mode 100644
index 0000000000..dd6a830239
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07.hs
@@ -0,0 +1,5 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered07 where
+
+import safe UnsafeInfered07_A
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07_A.hs
new file mode 100644
index 0000000000..98e9249876
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered07_A.hs
@@ -0,0 +1,10 @@
+-- | Unsafe as hand crafts a typeable instance
+module UnsafeInfered07_A where
+
+import Data.Typeable
+
+data G = G Int
+
+instance Typeable G where
+ typeof _ = typeof (undefined::Int)
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08.hs
new file mode 100644
index 0000000000..394d7e6999
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered08 where
+
+import safe UnsafeInfered08_A
+
+f :: Int
+f = g
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08_A.hs
new file mode 100644
index 0000000000..13f22ce3d7
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered08_A.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE OverlappingInstances #-}
+-- | Unsafe as uses overlapping instances
+-- Although it isn't defining any so can we mark safe
+-- still?
+module UnsafeInfered08_A where
+
+g :: Int
+g = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09.hs
new file mode 100644
index 0000000000..1c1e61d3c5
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Safe #-}
+module UnsafeInfered09 where
+
+import safe UnsafeInfered09_A
+
+h :: Int
+h = g
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_A.hs
new file mode 100644
index 0000000000..d2e0893f75
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_A.hs
@@ -0,0 +1,8 @@
+-- | Unsafe as we explicitly marked UnsafeInfered09_B as unsafe
+module UnsafeInfered09_A where
+
+import UnsafeInfered09_B
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_B.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_B.hs
new file mode 100644
index 0000000000..8ba8720b03
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered09_B.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE Unsafe #-}
+module UnsafeInfered09_B where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/all.T b/testsuite/tests/safeHaskell/safeInfered/all.T
new file mode 100644
index 0000000000..19a788b792
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/all.T
@@ -0,0 +1,29 @@
+# safeInfered tests are for testing that the Safe Haskell
+# mode safe inference works correctly.
+
+# Just do the normal way, SafeHaskell is all in the frontend
+def f( opts ):
+ opts.only_ways = ['normal']
+
+setTestOpts(f)
+
+# Tests that should compile fine as they should be infered safe
+test('SafeInfered01', normal, multimod_compile, ['SafeInfered01', ''])
+test('SafeInfered02', normal, multimod_compile, ['SafeInfered02', ''])
+test('SafeInfered03', normal, multimod_compile, ['SafeInfered03', ''])
+
+# Tests that should fail to compile as they should be infered unsafe
+test('UnsafeInfered01', normal, multimod_compile_fail, ['UnsafeInfered01', ''])
+test('UnsafeInfered02', normal, multimod_compile_fail, ['UnsafeInfered02', ''])
+test('UnsafeInfered03', normal, multimod_compile_fail, ['UnsafeInfered03', ''])
+test('UnsafeInfered04', normal, multimod_compile_fail, ['UnsafeInfered04', ''])
+test('UnsafeInfered05', normal, multimod_compile_fail, ['UnsafeInfered05', ''])
+test('UnsafeInfered06', normal, multimod_compile_fail, ['UnsafeInfered06', ''])
+test('UnsafeInfered07', normal, multimod_compile_fail, ['UnsafeInfered07', ''])
+test('UnsafeInfered08', normal, multimod_compile_fail, ['UnsafeInfered08', ''])
+test('UnsafeInfered09', normal, multimod_compile_fail, ['UnsafeInfered09', ''])
+
+# Mixed tests
+test('Mixed01', normal, compile_fail, [''])
+test('Mixed02', normal, compile_fail, [''])
+