diff options
author | David Terei <code@davidterei.com> | 2014-11-07 14:11:19 -0800 |
---|---|---|
committer | David Terei <code@davidterei.com> | 2014-11-12 16:09:33 -0800 |
commit | 1f8b4ee074b4d9e3d847b3139dc89fff1bb5d2e6 (patch) | |
tree | d77b9d8316d780ffc6604cddcbbee08884afc132 /testsuite/tests/safeHaskell | |
parent | 064c28960730ed2f592fb675c9a11310e2371b66 (diff) | |
download | haskell-1f8b4ee074b4d9e3d847b3139dc89fff1bb5d2e6.tar.gz |
Add in `-fwarn-trustworthy-safe` flag.
This warns when a module marked as `-XTrustworthy` could have been
inferred as safe instead.
Diffstat (limited to 'testsuite/tests/safeHaskell')
36 files changed, 291 insertions, 5 deletions
diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe01.hs b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe01.hs index deb0d57f8d..107881b2d8 100644 --- a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe01.hs +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe01.hs @@ -1,6 +1,6 @@ {-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} -module ImpSafe ( MyWord ) where +module ImpSafe01 ( MyWord ) where -- While Data.Word is safe it imports trustworthy -- modules in base, hence base needs to be trusted. diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe02.hs b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe02.hs index deb0d57f8d..c6ba0968d0 100644 --- a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe02.hs +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe02.hs @@ -1,6 +1,6 @@ {-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} -module ImpSafe ( MyWord ) where +module ImpSafe02 ( MyWord ) where -- While Data.Word is safe it imports trustworthy -- modules in base, hence base needs to be trusted. diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03.hs b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03.hs new file mode 100644 index 0000000000..485e9e238c --- /dev/null +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE Trustworthy #-} +module Main where + +import safe Prelude +import safe ImpSafe03_A + +main = putStrLn "test" + diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03.stderr b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03.stderr new file mode 100644 index 0000000000..2fdf45ce13 --- /dev/null +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03.stderr @@ -0,0 +1,4 @@ +[2 of 2] Compiling Main ( ImpSafe03.hs, ImpSafe03.o ) + +<no location info>: + The package (bytestring-0.10.4.0) is required to be trusted but it isn't! diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03_A.hs b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03_A.hs new file mode 100644 index 0000000000..06f5d39754 --- /dev/null +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe03_A.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE Trustworthy #-} +module ImpSafe03_A where + +import safe Prelude +import safe qualified Data.ByteString.Char8 as BS + +s = BS.pack "Hello World" + diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe04.hs b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe04.hs new file mode 100644 index 0000000000..3a8882905f --- /dev/null +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe04.hs @@ -0,0 +1,13 @@ +{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE NoImplicitPrelude #-} +module ImpSafe04 ( MyWord ) where + +-- While Data.Word is safe it imports trustworthy +-- modules in base, hence base needs to be trusted. +-- Note: Worthwhile giving out better error messages for cases +-- like this if I can. +import safe Data.Word +import System.IO.Unsafe + +type MyWord = Word + diff --git a/testsuite/tests/safeHaskell/check/pkg01/ImpSafe04.stderr b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe04.stderr new file mode 100644 index 0000000000..50a12e027b --- /dev/null +++ b/testsuite/tests/safeHaskell/check/pkg01/ImpSafe04.stderr @@ -0,0 +1,4 @@ + +ImpSafe04.hs:9:1: + Data.Word: Can't be safely imported! + The package (base-4.8.0.0) the module resides in isn't trusted. diff --git a/testsuite/tests/safeHaskell/check/pkg01/all.T b/testsuite/tests/safeHaskell/check/pkg01/all.T index f121b99add..e1ed80dd7c 100644 --- a/testsuite/tests/safeHaskell/check/pkg01/all.T +++ b/testsuite/tests/safeHaskell/check/pkg01/all.T @@ -51,6 +51,15 @@ test('ImpSafe01', normal, compile_fail, ['-fpackage-trust -distrust base']) # Succeed since we don't enable package trust test('ImpSafe02', normal, compile, ['-distrust base']) +# Fail since we don't trust base of bytestring +test('ImpSafe03', normal, multi_compile_fail, + ['ImpSafe03 -trust base -distrust bytestring', [ + ('ImpSafe03_A.hs', ' -trust base -trust bytestring') + ], '-fpackage-trust' ]) + +# Fail same as ImpSafe01 but testing with -XTrustworthy now +test('ImpSafe04', normal, compile_fail, ['-fpackage-trust -distrust base']) + test('ImpSafeOnly01', [pre_cmd('$MAKE -s --no-print-directory mkPackageDatabase.ImpSafeOnly01 ' + make_args), clean_cmd('$MAKE -s --no-print-directory cleanPackageDatabase.ImpSafeOnly01')], @@ -95,7 +104,7 @@ test('ImpSafeOnly07', clean_cmd('$MAKE -s --no-print-directory cleanPackageDatabase.ImpSafeOnly07'), normalise_errmsg_fun(normaliseBytestringPackage)], compile_fail, - ['-fpackage-trust -package-db pdb.ImpSafeOnly07/local.db -trust safePkg01']) + ['-fpackage-trust -package-db pdb.ImpSafeOnly07/local.db -trust safePkg01 -distrust bytestring']) test('ImpSafeOnly08', [pre_cmd('$MAKE -s --no-print-directory mkPackageDatabase.ImpSafeOnly08 ' + make_args), clean_cmd('$MAKE -s --no-print-directory cleanPackageDatabase.ImpSafeOnly08'), diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeWarn01.hs b/testsuite/tests/safeHaskell/safeInfered/SafeWarn01.hs new file mode 100644 index 0000000000..507367929b --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/SafeWarn01.hs @@ -0,0 +1,11 @@ +{-# LANGUAGE Unsafe #-} +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} +{-# OPTIONS_GHC -fenable-rewrite-rules #-} + +-- | Trivial Safe Module +module SafeWarn01 where + +g :: Int +g = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeWarn01.stderr b/testsuite/tests/safeHaskell/safeInfered/SafeWarn01.stderr new file mode 100644 index 0000000000..e9849d9eef --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/SafeWarn01.stderr @@ -0,0 +1,3 @@ + +SafeWarn01.hs:2:16: Warning: + ‘SafeWarn01’ has been inferred as safe! diff --git a/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe01.hs b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe01.hs new file mode 100644 index 0000000000..6d65130a84 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe01.hs @@ -0,0 +1,9 @@ +{-# LANGUAGE Trustworthy #-} + +-- | This module is marked trustworthy but should be inferable as -XSafe. +-- But no warning enabled. +module TrustworthySafe01 where + +g :: Int +g = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe02.hs b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe02.hs new file mode 100644 index 0000000000..9dfaccd950 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe02.hs @@ -0,0 +1,10 @@ +{-# LANGUAGE Trustworthy #-} +{-# OPTIONS_GHC -fwarn-trustworthy-safe #-} + +-- | This module is marked trustworthy but should be inferable as -XSafe. +-- Warning enabled. +module TrustworthySafe02 where + +g :: Int +g = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe02.stderr b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe02.stderr new file mode 100644 index 0000000000..68bf4e998e --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe02.stderr @@ -0,0 +1,3 @@ + +TrustworthySafe02.hs:1:14: Warning: + ‘TrustworthySafe02’ is marked as Trustworthy but has been inferred as safe! diff --git a/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe04.hs b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe04.hs new file mode 100644 index 0000000000..0b96de1d2a --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/TrustworthySafe04.hs @@ -0,0 +1,10 @@ +{-# LANGUAGE Trustworthy #-} +{-# OPTIONS_GHC -W -fno-warn-trustworthy-safe #-} + +-- | This module is marked trustworthy but should be inferable as -XSafe. +-- Warning enabled through `-W` but then disabled with `-fno-warn...`. +module TrustworthySafe04 where + +g :: Int +g = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn01.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn01.hs new file mode 100644 index 0000000000..afe188db4f --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn01.hs @@ -0,0 +1,11 @@ +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} + +-- | Trivial Unsafe Module +module UnsafeWarn01 where + +import System.IO.Unsafe + +f :: IO a -> a +f = unsafePerformIO + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn01.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn01.stderr new file mode 100644 index 0000000000..1ef043a9fd --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn01.stderr @@ -0,0 +1,7 @@ + +UnsafeWarn01.hs:2:16: Warning: + ‘UnsafeWarn01’ has been inferred as unsafe! + Reason: + UnsafeWarn01.hs:7:1: + System.IO.Unsafe: Can't be safely imported! + The module itself isn't safe. diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn02.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn02.hs new file mode 100644 index 0000000000..6f62ca5c94 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn02.hs @@ -0,0 +1,10 @@ +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} + +{-# LANGUAGE TemplateHaskell #-} +-- | Unsafe as uses TH +module UnsafeWarn02 where + +f :: Int +f = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn02.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn02.stderr new file mode 100644 index 0000000000..7421ad0333 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn02.stderr @@ -0,0 +1,6 @@ + +UnsafeWarn02.hs:2:16: Warning: + ‘UnsafeWarn02’ has been inferred as unsafe! + Reason: + UnsafeWarn02.hs:4:14: + -XTemplateHaskell is not allowed in Safe Haskell diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn03.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn03.hs new file mode 100644 index 0000000000..ded02de888 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn03.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE Trustworthy #-} +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} + +-- | Trivial Unsafe Module +module UnsafeWarn03 where + +import System.IO.Unsafe + +f :: IO a -> a +f = unsafePerformIO + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn03.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn03.stderr new file mode 100644 index 0000000000..a3d44ba375 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn03.stderr @@ -0,0 +1,7 @@ + +UnsafeWarn03.hs:3:16: Warning: + ‘UnsafeWarn03’ has been inferred as unsafe! + Reason: + UnsafeWarn03.hs:8:1: + System.IO.Unsafe: Can't be safely imported! + The module itself isn't safe. diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn04.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn04.hs new file mode 100644 index 0000000000..d8e8b84fa5 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn04.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE Trustworthy #-} +{-# OPTIONS_GHC -fwarn-trustworthy-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} + +-- | Trivial Unsafe Module +module UnsafeWarn04 where + +import System.IO.Unsafe + +f :: IO a -> a +f = unsafePerformIO + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn04.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn04.stderr new file mode 100644 index 0000000000..66deff4edc --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn04.stderr @@ -0,0 +1,7 @@ + +UnsafeWarn04.hs:3:16: Warning: + ‘UnsafeWarn04’ has been inferred as unsafe! + Reason: + UnsafeWarn04.hs:8:1: + System.IO.Unsafe: Can't be safely imported! + The module itself isn't safe. diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn05.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn05.hs new file mode 100644 index 0000000000..76258d362b --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn05.hs @@ -0,0 +1,19 @@ +{-# LANGUAGE Unsafe #-} +{-# OPTIONS_GHC -fwarn-trustworthy-safe #-} +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} +{-# OPTIONS_GHC -fenable-rewrite-rules #-} + +-- | Trivial Unsafe Module +module UnsafeWarn05 where + +import System.IO.Unsafe + +f :: IO a -> a +f = unsafePerformIO + +{-# RULES "g" g = undefined #-} +{-# NOINLINE [1] g #-} +g :: Int +g = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn05.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn05.stderr new file mode 100644 index 0000000000..229ce3d56f --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn05.stderr @@ -0,0 +1,14 @@ + +UnsafeWarn05.hs:4:16: Warning: + ‘UnsafeWarn05’ has been inferred as unsafe! + Reason: + UnsafeWarn05.hs:10:1: + System.IO.Unsafe: Can't be safely imported! + The module itself isn't safe. + +UnsafeWarn05.hs:4:16: Warning: + ‘UnsafeWarn05’ has been inferred as unsafe! + Reason: + UnsafeWarn05.hs:15:11: Warning: + Rule "g" ignored + User defined rules are disabled under Safe Haskell diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn06.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn06.hs new file mode 100644 index 0000000000..671a64822b --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn06.hs @@ -0,0 +1,12 @@ +{-# OPTIONS_GHC -fenable-rewrite-rules #-} +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} + +-- | Unsafe as uses RULES +module UnsafeWarn06 where + +{-# RULES "f" f = undefined #-} +{-# NOINLINE [1] f #-} +f :: Int +f = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn06.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn06.stderr new file mode 100644 index 0000000000..8fde73ee0b --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn06.stderr @@ -0,0 +1,7 @@ + +UnsafeWarn06.hs:3:16: Warning: + ‘UnsafeWarn06’ has been inferred as unsafe! + Reason: + UnsafeWarn06.hs:8:11: Warning: + Rule "f" ignored + User defined rules are disabled under Safe Haskell diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn07.hs b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn07.hs new file mode 100644 index 0000000000..43982939b8 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn07.hs @@ -0,0 +1,13 @@ +{-# LANGUAGE Trustworthy #-} +{-# OPTIONS_GHC -fenable-rewrite-rules #-} +{-# OPTIONS_GHC -fwarn-safe #-} +{-# OPTIONS_GHC -fwarn-unsafe #-} + +-- | Unsafe as uses RULES +module UnsafeWarn07 where + +{-# RULES "f" f = undefined #-} +{-# NOINLINE [1] f #-} +f :: Int +f = 1 + diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn07.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn07.stderr new file mode 100644 index 0000000000..c5c5e632d7 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeWarn07.stderr @@ -0,0 +1,7 @@ + +UnsafeWarn07.hs:4:16: Warning: + ‘UnsafeWarn07’ has been inferred as unsafe! + Reason: + UnsafeWarn07.hs:9:11: Warning: + Rule "f" ignored + User defined rules are disabled under Safe Haskell diff --git a/testsuite/tests/safeHaskell/safeInfered/all.T b/testsuite/tests/safeHaskell/safeInfered/all.T index c2222a3549..89062cd174 100644 --- a/testsuite/tests/safeHaskell/safeInfered/all.T +++ b/testsuite/tests/safeHaskell/safeInfered/all.T @@ -73,3 +73,20 @@ test('Mixed01', normal, compile_fail, ['']) test('Mixed02', normal, compile_fail, ['']) test('Mixed03', normal, compile_fail, ['']) +# Trustworthy Safe modules +test('TrustworthySafe01', normal, compile, ['']) +test('TrustworthySafe02', normal, compile, ['']) +test('TrustworthySafe04', normal, compile, ['']) + +# Check -fwarn-unsafe works +test('UnsafeWarn01', normal, compile, ['']) +test('UnsafeWarn02', normal, compile, ['']) +test('UnsafeWarn03', normal, compile, ['']) +test('UnsafeWarn04', normal, compile, ['']) +test('UnsafeWarn05', normal, compile, ['']) +test('UnsafeWarn06', normal, compile, ['']) +test('UnsafeWarn07', normal, compile, ['']) + +# Chck -fwa-safe works +test('SafeWarn01', normal, compile, ['']) + diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeLang18.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeLang18.hs new file mode 100644 index 0000000000..330a80d069 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeLang18.hs @@ -0,0 +1,14 @@ +{-# LANGUAGE CPP #-} +#if __GLASGOW_HASKELL__ >= 703 +{-# LANGUAGE Safe #-} +#endif +module SafeLang18 where + +#define p377 toPair + +data StrictPair a b = !a :*: !b + +toPair :: StrictPair a b -> (a, b) +toPair (x :*: y) = (x, y) +{-# INLINE p377 #-} + diff --git a/testsuite/tests/safeHaskell/safeLanguage/all.T b/testsuite/tests/safeHaskell/safeLanguage/all.T index 926c576434..8dad0efee6 100644 --- a/testsuite/tests/safeHaskell/safeLanguage/all.T +++ b/testsuite/tests/safeHaskell/safeLanguage/all.T @@ -51,6 +51,8 @@ test('SafeLang17', multimod_compile_fail, ['SafeLang17', '']) +test('SafeLang18', normal, compile, ['']) + # Test building a package, that trust values are set correctly # and can be changed correctly #test('SafeRecomp01', diff --git a/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.hs b/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.hs index 18c50dfab8..d2688fab80 100644 --- a/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.hs +++ b/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.hs @@ -2,7 +2,7 @@ -- | Import unsafe module Control.ST to make sure it fails module Main where -import Control.Monad.ST +import Control.Monad.ST.Unsafe f :: Int f = 2 diff --git a/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.stderr b/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.stderr index d3f193cff7..aa8b5a57f4 100644 --- a/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.stderr +++ b/testsuite/tests/safeHaskell/unsafeLibs/BadImport08.stderr @@ -1,4 +1,4 @@ BadImport08.hs:5:1: - Control.Monad.ST: Can't be safely imported! + Control.Monad.ST.Unsafe: Can't be safely imported! The module itself isn't safe. diff --git a/testsuite/tests/safeHaskell/unsafeLibs/BadImport09.hs b/testsuite/tests/safeHaskell/unsafeLibs/BadImport09.hs new file mode 100644 index 0000000000..90d1c49090 --- /dev/null +++ b/testsuite/tests/safeHaskell/unsafeLibs/BadImport09.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE Safe #-} +-- | Import unsafe module Control.ST to make sure it fails +module Main where + +import Control.Monad.ST.Lazy.Unsafe + +f :: Int +f = 2 + +main :: IO () +main = putStrLn $ "X is: " ++ show f + diff --git a/testsuite/tests/safeHaskell/unsafeLibs/BadImport09.stderr b/testsuite/tests/safeHaskell/unsafeLibs/BadImport09.stderr new file mode 100644 index 0000000000..88556c8997 --- /dev/null +++ b/testsuite/tests/safeHaskell/unsafeLibs/BadImport09.stderr @@ -0,0 +1,4 @@ + +BadImport09.hs:5:1: + Control.Monad.ST.Lazy.Unsafe: Can't be safely imported! + The module itself isn't safe. diff --git a/testsuite/tests/safeHaskell/unsafeLibs/all.T b/testsuite/tests/safeHaskell/unsafeLibs/all.T index 4ed5aab700..03ca0e4d18 100644 --- a/testsuite/tests/safeHaskell/unsafeLibs/all.T +++ b/testsuite/tests/safeHaskell/unsafeLibs/all.T @@ -23,6 +23,7 @@ test('BadImport05', normal, compile_fail, ['']) test('BadImport06', normal, compile_fail, ['']) test('BadImport07', normal, compile_fail, ['']) test('BadImport08', normal, compile_fail, ['']) +test('BadImport09', normal, compile_fail, ['']) # check safe modules are marked safe test('GoodImport01', normal, compile, ['']) |