diff options
author | David Terei <code@davidterei.com> | 2014-08-01 18:50:45 -0700 |
---|---|---|
committer | David Terei <code@davidterei.com> | 2014-08-01 18:59:35 -0700 |
commit | ab90bf214bac86890b3533ff77272780828004e2 (patch) | |
tree | 71d6943cefd1a67861cb7b9d8ac56fcffd6c2399 /testsuite/tests/safeHaskell | |
parent | fbd0586ea55c753f6c81b592ae01e88e22f8f0cd (diff) | |
download | haskell-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.hs | 32 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/safeInfered/SafeInfered05_A.hs | 9 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/safeInfered/all.T | 5 |
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']) ], |