diff options
Diffstat (limited to 'testsuite/tests/overloadedrecflds/should_fail')
13 files changed, 95 insertions, 0 deletions
diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRF9156.hs b/testsuite/tests/overloadedrecflds/should_fail/DRF9156.hs new file mode 100644 index 0000000000..107b8047ec --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRF9156.hs @@ -0,0 +1,4 @@ +{-# LANGUAGE DuplicateRecordFields #-} +module DRF9156 where +data D = D1 { f1 :: Int } + | D2 { f1, f1 :: Int } diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRF9156.stderr b/testsuite/tests/overloadedrecflds/should_fail/DRF9156.stderr new file mode 100644 index 0000000000..ea1d10dc10 --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRF9156.stderr @@ -0,0 +1,5 @@ + +DRF9156.hs:4:19: error: + Multiple declarations of ‘f1’ + Declared at: DRF9156.hs:3:15 + DRF9156.hs:4:19 diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits.hs b/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits.hs new file mode 100644 index 0000000000..bc7248f642 --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE DuplicateRecordFields #-} +module DRFHoleFits where +import qualified DRFHoleFits_A as A + +data T = MkT { foo :: Int } + +bar = _ :: T -> Int +baz = _ :: A.S -> Int diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits.stderr b/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits.stderr new file mode 100644 index 0000000000..a5b406567f --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits.stderr @@ -0,0 +1,24 @@ +[1 of 2] Compiling DRFHoleFits_A ( DRFHoleFits_A.hs, DRFHoleFits_A.o ) +[2 of 2] Compiling DRFHoleFits ( DRFHoleFits.hs, DRFHoleFits.o ) + +DRFHoleFits.hs:7:7: error: + • Found hole: _ :: T -> Int + • In the expression: _ :: T -> Int + In an equation for ‘bar’: bar = _ :: T -> Int + • Relevant bindings include + bar :: T -> Int (bound at DRFHoleFits.hs:7:1) + Valid hole fits include + foo :: T -> Int (defined at DRFHoleFits.hs:5:16) + bar :: T -> Int (defined at DRFHoleFits.hs:7:1) + +DRFHoleFits.hs:8:7: error: + • Found hole: _ :: A.S -> Int + • In the expression: _ :: A.S -> Int + In an equation for ‘baz’: baz = _ :: A.S -> Int + • Relevant bindings include + baz :: A.S -> Int (bound at DRFHoleFits.hs:8:1) + Valid hole fits include + baz :: A.S -> Int (defined at DRFHoleFits.hs:8:1) + DRFHoleFits_A.foo :: A.S -> Int + (imported qualified from ‘DRFHoleFits_A’ at DRFHoleFits.hs:3:1-35 + (and originally defined at DRFHoleFits_A.hs:5:16-18)) diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits_A.hs b/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits_A.hs new file mode 100644 index 0000000000..02d9bddb99 --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRFHoleFits_A.hs @@ -0,0 +1,6 @@ +{-# LANGUAGE DuplicateRecordFields #-} + +module DRFHoleFits_A where + +data S = MkS { foo :: Int } +data U = MkU { foo :: Int } diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRFPartialFields.hs b/testsuite/tests/overloadedrecflds/should_fail/DRFPartialFields.hs new file mode 100644 index 0000000000..5c5ec744bb --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRFPartialFields.hs @@ -0,0 +1,4 @@ +{-# LANGUAGE DuplicateRecordFields #-} +{-# OPTIONS_GHC -Werror=partial-fields #-} +module DRFPartialFields where +data T = MkT1 { foo :: Int } | MkT2 diff --git a/testsuite/tests/overloadedrecflds/should_fail/DRFPartialFields.stderr b/testsuite/tests/overloadedrecflds/should_fail/DRFPartialFields.stderr new file mode 100644 index 0000000000..1f9034e7b2 --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/DRFPartialFields.stderr @@ -0,0 +1,3 @@ + +DRFPartialFields.hs:4:17: error: [-Wpartial-fields, -Werror=partial-fields] + Use of partial record field selector: ‘foo’ diff --git a/testsuite/tests/overloadedrecflds/should_fail/T16745.stderr b/testsuite/tests/overloadedrecflds/should_fail/T16745.stderr new file mode 100644 index 0000000000..6e1cac2fbe --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/T16745.stderr @@ -0,0 +1,14 @@ +[1 of 4] Compiling T16745C ( T16745C.hs, T16745C.o ) +[2 of 4] Compiling T16745B ( T16745B.hs, T16745B.o ) +[3 of 4] Compiling T16745D ( T16745D.hs, T16745D.o ) +[4 of 4] Compiling T16745A ( T16745A.hs, T16745A.o ) + +T16745A.hs:3:24: error: + Ambiguous name ‘field’ in import item. It could refer to: + T16745C.field + T16745B.R(field) + +T16745A.hs:4:24: error: + Ambiguous name ‘foo’ in import item. It could refer to: + T16745D.T(foo) + T16745D.S(foo) diff --git a/testsuite/tests/overloadedrecflds/should_fail/T16745A.hs b/testsuite/tests/overloadedrecflds/should_fail/T16745A.hs new file mode 100644 index 0000000000..49dbeb3fac --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/T16745A.hs @@ -0,0 +1,6 @@ +module T16745A where + +import T16745B hiding (field) +import T16745D hiding (foo) + +wrong = foo -- should not be in scope diff --git a/testsuite/tests/overloadedrecflds/should_fail/T16745B.hs b/testsuite/tests/overloadedrecflds/should_fail/T16745B.hs new file mode 100644 index 0000000000..1e549ba05d --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/T16745B.hs @@ -0,0 +1,11 @@ +{-# LANGUAGE DuplicateRecordFields #-} +-- This module tries to export a record field 'field' (defined below) and a +-- function 'field' (defined in another module), which shouldn't be allowed. +module T16745B + ( R(field) + , module T16745C + ) where + +import T16745C + +data R = R { field :: Int} diff --git a/testsuite/tests/overloadedrecflds/should_fail/T16745C.hs b/testsuite/tests/overloadedrecflds/should_fail/T16745C.hs new file mode 100644 index 0000000000..ddafe2db95 --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/T16745C.hs @@ -0,0 +1,2 @@ +module T16745C where +field = () diff --git a/testsuite/tests/overloadedrecflds/should_fail/T16745D.hs b/testsuite/tests/overloadedrecflds/should_fail/T16745D.hs new file mode 100644 index 0000000000..ee98217d4c --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/T16745D.hs @@ -0,0 +1,4 @@ +{-# LANGUAGE DuplicateRecordFields #-} +module T16745D where +data S = MkS { foo :: Char } +data T = MkT { foo :: Int } diff --git a/testsuite/tests/overloadedrecflds/should_fail/all.T b/testsuite/tests/overloadedrecflds/should_fail/all.T index bc3c0650d2..09bee3ba06 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/all.T +++ b/testsuite/tests/overloadedrecflds/should_fail/all.T @@ -33,3 +33,7 @@ test('T14953', [extra_files(['T14953_A.hs', 'T14953_B.hs'])], multimod_compile_fail, ['T14953', '']) test('DuplicateExports', normal, compile_fail, ['']) test('T17965', normal, compile_fail, ['']) +test('DRFHoleFits', extra_files(['DRFHoleFits_A.hs']), multimod_compile_fail, ['DRFHoleFits', '']) +test('DRFPartialFields', normal, compile_fail, ['']) +test('T16745', extra_files(['T16745C.hs', 'T16745B.hs']), multimod_compile_fail, ['T16745A', '']) +test('DRF9156', normal, compile_fail, ['']) |