summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2011-11-16 13:24:29 -0800
committerDavid Terei <davidterei@gmail.com>2011-11-16 13:25:20 -0800
commit0031457059187f7417e48a93e3fcd3a2ef538e9a (patch)
tree371dac9eaef6cab015dc40ed0844fe8057514b4d /testsuite
parentf9073a7e0a3244b2d50647814c8e0518ba5fbf74 (diff)
downloadhaskell-0031457059187f7417e48a93e3fcd3a2ef538e9a.tar.gz
Add Safe Haskell tests for new '-fwarn-safe', '-fwarn-unsafe'
and '-fno-safe-infer' flags.
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags21.hs9
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags22.hs11
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags22.stderr5
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags23.hs11
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags23.stderr8
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags24.hs11
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags25.hs9
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags25.stderr3
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags26.hs9
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags26.stderr6
-rw-r--r--testsuite/tests/safeHaskell/flags/SafeFlags27.hs9
-rw-r--r--testsuite/tests/safeHaskell/flags/all.T18
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.hs9
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.stderr5
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10_A.hs8
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.hs9
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.stderr11
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11_A.hs37
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/all.T8
19 files changed, 194 insertions, 2 deletions
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags21.hs b/testsuite/tests/safeHaskell/flags/SafeFlags21.hs
new file mode 100644
index 0000000000..c7e8b0d87a
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags21.hs
@@ -0,0 +1,9 @@
+{-# OPTIONS_GHC -fwarn-unsafe #-}
+-- | Basic test to see if Safe warning flags compile
+-- Warn if module is infered unsafe
+-- In this test the warning _shouldn't_ fire
+module SafeFlags21 where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags22.hs b/testsuite/tests/safeHaskell/flags/SafeFlags22.hs
new file mode 100644
index 0000000000..0b94cff91c
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags22.hs
@@ -0,0 +1,11 @@
+{-# OPTIONS_GHC -fwarn-unsafe #-}
+-- | Basic test to see if Safe warning flags compile
+-- Warn if module is infered unsafe
+-- In this test the warning _should_ fire
+module SafeFlags22 where
+
+import System.IO.Unsafe
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags22.stderr b/testsuite/tests/safeHaskell/flags/SafeFlags22.stderr
new file mode 100644
index 0000000000..7913f6847d
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags22.stderr
@@ -0,0 +1,5 @@
+
+SafeFlags22.hs:1:16:
+ Warning: `SafeFlags22' has been infered as unsafe!
+ Reason:
+ base:System.IO.Unsafe can't be safely imported! The module itself isn't safe.
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags23.hs b/testsuite/tests/safeHaskell/flags/SafeFlags23.hs
new file mode 100644
index 0000000000..87f7b2dc5d
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags23.hs
@@ -0,0 +1,11 @@
+{-# OPTIONS_GHC -fwarn-unsafe -Werror #-}
+-- | Basic test to see if Safe warning flags compile
+-- Warn if module is infered unsafe
+-- In this test the warning _should_ fire and cause a compile fail
+module SafeFlags22 where
+
+import System.IO.Unsafe
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags23.stderr b/testsuite/tests/safeHaskell/flags/SafeFlags23.stderr
new file mode 100644
index 0000000000..bf8b7d937e
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags23.stderr
@@ -0,0 +1,8 @@
+
+SafeFlags23.hs:1:16:
+ Warning: `SafeFlags22' has been infered as unsafe!
+ Reason:
+ base:System.IO.Unsafe can't be safely imported! The module itself isn't safe.
+
+<no location info>:
+Failing due to -Werror.
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags24.hs b/testsuite/tests/safeHaskell/flags/SafeFlags24.hs
new file mode 100644
index 0000000000..928d322e3c
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags24.hs
@@ -0,0 +1,11 @@
+{-# OPTIONS_GHC -fwarn-safe #-}
+-- | Basic test to see if Safe warning flags compile
+-- Warn if module is infered safe
+-- In this test the warning _shouldn't_ fire
+module SafeFlags23 where
+
+import System.IO.Unsafe
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags25.hs b/testsuite/tests/safeHaskell/flags/SafeFlags25.hs
new file mode 100644
index 0000000000..c97fa885d1
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags25.hs
@@ -0,0 +1,9 @@
+{-# OPTIONS_GHC -fwarn-safe #-}
+-- | Basic test to see if Safe warning flags compile
+-- Warn if module is infered safe
+-- In this test the warning _should_ fire
+module SafeFlags25 where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags25.stderr b/testsuite/tests/safeHaskell/flags/SafeFlags25.stderr
new file mode 100644
index 0000000000..2889ca6a36
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags25.stderr
@@ -0,0 +1,3 @@
+
+SafeFlags25.hs:1:16:
+ Warning: `SafeFlags25' has been infered as safe!
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags26.hs b/testsuite/tests/safeHaskell/flags/SafeFlags26.hs
new file mode 100644
index 0000000000..0767448bca
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags26.hs
@@ -0,0 +1,9 @@
+{-# OPTIONS_GHC -fwarn-safe -Werror #-}
+-- | Basic test to see if Safe warning flags compile
+-- Warn if module is infered safe
+-- In this test the warning _should_ fire and cause a compile fail
+module SafeFlags26 where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags26.stderr b/testsuite/tests/safeHaskell/flags/SafeFlags26.stderr
new file mode 100644
index 0000000000..3079a7a20d
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags26.stderr
@@ -0,0 +1,6 @@
+
+SafeFlags26.hs:1:16:
+ Warning: `SafeFlags26' has been infered as safe!
+
+<no location info>:
+Failing due to -Werror.
diff --git a/testsuite/tests/safeHaskell/flags/SafeFlags27.hs b/testsuite/tests/safeHaskell/flags/SafeFlags27.hs
new file mode 100644
index 0000000000..e6da435db4
--- /dev/null
+++ b/testsuite/tests/safeHaskell/flags/SafeFlags27.hs
@@ -0,0 +1,9 @@
+{-# OPTIONS_GHC -fno-safe-infer #-}
+-- | Basic test to see if no safe infer flag compiles
+-- This module would usually infer safely, so it shouldn't be safe now.
+-- We don't actually check that here though, see test '' for that.
+module SafeFlags27 where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/flags/all.T b/testsuite/tests/safeHaskell/flags/all.T
index 9e7ef4b433..f5e9a896d0 100644
--- a/testsuite/tests/safeHaskell/flags/all.T
+++ b/testsuite/tests/safeHaskell/flags/all.T
@@ -41,6 +41,20 @@ test('SafeFlags18', normal, compile, ['-trust base'])
test('SafeFlags19', normal, compile_fail, [''])
test('SafeFlags20', normal, compile, ['-trust base'])
-test('Flags01', normal, compile, [''])
-test('Flags02', normal, compile, [''])
+# test -Wunsafe flag
+test('SafeFlags21', normal, compile, [''])
+test('SafeFlags22', normal, compile, [''])
+test('SafeFlags23', normal, compile_fail, [''])
+
+# test -Wsafe flag
+test('SafeFlags24', normal, compile, [''])
+test('SafeFlags25', normal, compile, [''])
+test('SafeFlags26', normal, compile_fail, [''])
+
+# test -fno-safe-infer
+test('SafeFlags27', normal, compile, [''])
+
+# test certain flags are still allowed under -XSafe
+test('Flags01', normal, compile, ['-XSafe'])
+test('Flags02', normal, compile, ['-XSafe'])
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.hs
new file mode 100644
index 0000000000..3ba1584b08
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE Safe #-}
+-- | Basic test to see if no safe infer flag works
+module UnsafeInfered10 where
+
+import UnsafeInfered10_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.stderr
new file mode 100644
index 0000000000..25bca5dd08
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10.stderr
@@ -0,0 +1,5 @@
+[1 of 2] Compiling UnsafeInfered10_A ( UnsafeInfered10_A.hs, UnsafeInfered10_A.o )
+[2 of 2] Compiling UnsafeInfered10 ( UnsafeInfered10.hs, UnsafeInfered10.o )
+
+UnsafeInfered10.hs:5:1:
+ main:UnsafeInfered10_A can't be safely imported! The module itself isn't safe.
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10_A.hs
new file mode 100644
index 0000000000..87957a4875
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered10_A.hs
@@ -0,0 +1,8 @@
+{-# OPTIONS_GHC -fno-safe-infer #-}
+-- | Basic test to see if no safe infer flag works
+-- This module would usually infer safely, so it shouldn't be safe now.
+module UnsafeInfered10_A where
+
+f :: Int
+f = 1
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.hs
new file mode 100644
index 0000000000..34555594e9
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE Safe #-}
+-- | Basic test to see if no safe infer flag works
+module UnsafeInfered11 where
+
+import UnsafeInfered11_A
+
+g :: Int
+g = f
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.stderr
new file mode 100644
index 0000000000..fc809c3372
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11.stderr
@@ -0,0 +1,11 @@
+[1 of 2] Compiling UnsafeInfered11_A ( UnsafeInfered11_A.hs, UnsafeInfered11_A.o )
+
+UnsafeInfered11_A.hs:1:16:
+ Warning: `UnsafeInfered11_A' has been infered as unsafe!
+ Reason:
+ Rule "lookupx/T" ignored
+ User defined rules are disabled under Safe Haskell
+[2 of 2] Compiling UnsafeInfered11 ( UnsafeInfered11.hs, UnsafeInfered11.o )
+
+UnsafeInfered11.hs:5:1:
+ main:UnsafeInfered11_A can't be safely imported! The module itself isn't safe.
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11_A.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11_A.hs
new file mode 100644
index 0000000000..9d1d2ecf31
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11_A.hs
@@ -0,0 +1,37 @@
+{-# OPTIONS_GHC -fwarn-unsafe #-}
+{-# OPTIONS_GHC -fenable-rewrite-rules #-}
+-- | Basic test to see if no safe infer flag works
+-- This module would usually infer safely, so it shouldn't be safe now.
+module UnsafeInfered11_A where
+
+f :: Int
+f = 1
+
+data T = T1 | T2 | T3 deriving ( Eq, Ord, Show )
+
+lookupx :: Ord key => Show val => [(key,val)] -> key -> Maybe val
+lookupx [] _ = Nothing
+lookupx ((t,a):xs) t' | t == t' = Just a
+ | otherwise = lookupx xs t'
+
+{-# RULES "lookupx/T" lookupx = tLookup #-}
+tLookup :: [(T,a)] -> T -> Maybe a
+tLookup [] _ = Nothing
+tLookup ((t,a):xs) t' | t /= t' = Just a
+ | otherwise = tLookup xs t'
+
+space = [(T1,"a"),(T2,"b"),(T3,"c")]
+key = T3
+
+main = do
+ putStrLn $ "looking for " ++ show key
+ putStrLn $ "in space " ++ show space
+ putStrLn $ "Found: " ++ show (fromMaybe "Not Found!" $ lookupx space key)
+ let b | Just "c" <- lookupx space key = "YES"
+ | otherwise = "NO"
+ putStrLn $ "Rules Disabled: " ++ b
+
+fromMaybe :: a -> Maybe a -> a
+fromMaybe a Nothing = a
+fromMaybe _ (Just a) = a
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/all.T b/testsuite/tests/safeHaskell/safeInfered/all.T
index 53ad759a80..a685a79b6b 100644
--- a/testsuite/tests/safeHaskell/safeInfered/all.T
+++ b/testsuite/tests/safeHaskell/safeInfered/all.T
@@ -48,6 +48,14 @@ test('UnsafeInfered09',
'UnsafeInfered09_B.hi', 'UnsafeInfered09_B.o']) ],
multimod_compile_fail, ['UnsafeInfered09', ''])
+# Test that should fail as we disable safe inference
+test('UnsafeInfered10',
+ [ extra_clean(['UnsafeInfered10_A.hi', 'UnsafeInfered10_A.o']) ],
+ multimod_compile_fail, ['UnsafeInfered10', ''])
+test('UnsafeInfered11',
+ [ extra_clean(['UnsafeInfered11_A.hi', 'UnsafeInfered11_A.o']) ],
+ multimod_compile_fail, ['UnsafeInfered11', ''])
+
# Mixed tests
test('Mixed01', normal, compile_fail, [''])
test('Mixed02', normal, compile_fail, [''])