Add in (disabled for now) test of a Safe Haskell bug.
authorDavid Terei <code@davidterei.com>
Sat, 2 Aug 2014 01:50:45 +0000 (18:50 -0700)
committerDavid Terei <code@davidterei.com>
Sat, 2 Aug 2014 01:59:35 +0000 (18:59 -0700)
testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs [new file with mode: 0644]
testsuite/tests/safeHaskell/safeInfered/SafeInfered05_A.hs [new file with mode: 0644]
testsuite/tests/safeHaskell/safeInfered/all.T

diff --git a/testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs b/testsuite/tests/safeHaskell/safeInfered/SafeInfered05.hs
new file mode 100644 (file)
index 0000000..0b42002
--- /dev/null
@@ -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 (file)
index 0000000..a1e12a6
--- /dev/null
@@ -0,0 +1,9 @@
+{-# LANGUAGE FlexibleInstances #-}
+module SafeInfered05_A where
+
+class C a where
+  f :: a -> String
+
+instance C [Int] where
+  f _ = "[Int]"
+
index 9fb587b..a995c76 100644 (file)
@@ -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']) ],