Commit ab90bf21 authored by David Terei's avatar David Terei
Browse files

Add in (disabled for now) test of a Safe Haskell bug.

parent fbd0586e
{-# 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])
{-# LANGUAGE FlexibleInstances #-}
module SafeInfered05_A where
class C a where
f :: a -> String
instance C [Int] where
f _ = "[Int]"
...@@ -21,6 +21,11 @@ test('SafeInfered04', ...@@ -21,6 +21,11 @@ test('SafeInfered04',
[ extra_clean(['SafeInfered04_A.hi', 'SafeInfered04_A.o']) ], [ extra_clean(['SafeInfered04_A.hi', 'SafeInfered04_A.o']) ],
multimod_compile, ['SafeInfered04', '']) 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 # Tests that should fail to compile as they should be infered unsafe
test('UnsafeInfered01', test('UnsafeInfered01',
[ extra_clean(['UnsafeInfered01_A.hi', 'UnsafeInfered01_A.o']) ], [ extra_clean(['UnsafeInfered01_A.hi', 'UnsafeInfered01_A.o']) ],
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment