summaryrefslogtreecommitdiff
path: root/testsuite/tests/safeHaskell
diff options
context:
space:
mode:
authorDavid Terei <code@davidterei.com>2014-08-01 18:50:45 -0700
committerDavid Terei <code@davidterei.com>2014-08-01 18:59:35 -0700
commitab90bf214bac86890b3533ff77272780828004e2 (patch)
tree71d6943cefd1a67861cb7b9d8ac56fcffd6c2399 /testsuite/tests/safeHaskell
parentfbd0586ea55c753f6c81b592ae01e88e22f8f0cd (diff)
downloadhaskell-ab90bf214bac86890b3533ff77272780828004e2.tar.gz
Add in (disabled for now) test of a Safe Haskell bug.
Diffstat (limited to 'testsuite/tests/safeHaskell')
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs32
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/SafeInfered05_A.hs9
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/all.T5
3 files changed, 46 insertions, 0 deletions
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs
new file mode 100644
index 0000000000..0b42002b25
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE Unsafe #-}
+{-# LANGUAGE OverlappingInstances #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+-- |
+-- This module should actually fail to compile since we have the instances C
+-- [Int] from the -XSafe module SafeInfered05_A overlapping as the most
+-- specific instance the other instance C [a] from this module. This is in
+-- violation of our single-origin-policy.
+--
+-- Right now though, the above actually compiles fine but *this is a bug*.
+-- Compiling module SafeInfered05_A with -XSafe has the right affect of causing
+-- the compilation of module SafeInfered05 to then subsequently fail. So we
+-- have a discrepancy between a safe-inferred module and a -XSafe module, which
+-- there should not be.
+--
+-- It does raise a question of if this bug should be fixed. Right now we've
+-- designed Safe Haskell to be completely opt-in, even with safe-inference.
+-- Fixing this of course changes this, causing safe-inference to alter the
+-- compilation success of some cases. How common it is to have overlapping
+-- declarations without -XOverlappingInstances specified needs to be tested.
+--
+module SafeInfered05 where
+
+import safe SafeInfered05_A
+
+instance C [a] where
+ f _ = "[a]"
+
+test2 :: String
+test2 = f ([1,2,3,4] :: [Int])
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered05_A.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered05_A.hs
new file mode 100644
index 0000000000..a1e12a6526
--- /dev/null
+++ b/testsuite/tests/safeHaskell/safeInfered/SafeInfered05_A.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE FlexibleInstances #-}
+module SafeInfered05_A where
+
+class C a where
+ f :: a -> String
+
+instance C [Int] where
+ f _ = "[Int]"
+
diff --git a/testsuite/tests/safeHaskell/safeInfered/all.T b/testsuite/tests/safeHaskell/safeInfered/all.T
index 9fb587b5f7..a995c76c6d 100644
--- a/testsuite/tests/safeHaskell/safeInfered/all.T
+++ b/testsuite/tests/safeHaskell/safeInfered/all.T
@@ -21,6 +21,11 @@ test('SafeInfered04',
[ extra_clean(['SafeInfered04_A.hi', 'SafeInfered04_A.o']) ],
multimod_compile, ['SafeInfered04', ''])
+# Test should fail, tests an earlier bug in 7.8
+# test('SafeInfered05',
+# [ extra_clean(['SafeInfered05_A.hi', 'SafeInfered05_A.o']) ],
+# multimod_compile_fail, ['SafeInfered05', ''])
+
# Tests that should fail to compile as they should be infered unsafe
test('UnsafeInfered01',
[ extra_clean(['UnsafeInfered01_A.hi', 'UnsafeInfered01_A.o']) ],