diff options
Diffstat (limited to 'testsuite/tests/overloadedrecflds/should_fail')
10 files changed, 83 insertions, 5 deletions
diff --git a/testsuite/tests/overloadedrecflds/should_fail/all.T b/testsuite/tests/overloadedrecflds/should_fail/all.T index fe7a85af70..5ff61e2735 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/all.T +++ b/testsuite/tests/overloadedrecflds/should_fail/all.T @@ -20,3 +20,5 @@ test('overloadedrecfldsfail11', normal, compile_fail, ['']) test('overloadedrecfldsfail12', extra_clean(['OverloadedRecFldsFail12_A.hi', 'OverloadedRecFldsFail12_A.o']), multimod_compile_fail, ['overloadedrecfldsfail12', '']) +test('overloadedrecfldsfail13', normal, compile_fail, ['']) +test('overloadedrecfldsfail14', normal, compile_fail, ['']) diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail01.stderr b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail01.stderr index fbf8a61176..4f51a6f6a9 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail01.stderr +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail01.stderr @@ -1,16 +1,22 @@ -overloadedrecfldsfail01.hs:11:10: +overloadedrecfldsfail01.hs:11:10: error: Record update is ambiguous, and requires a type signature In the expression: r {x = 3} In an equation for ‘upd1’: upd1 r = r {x = 3} -overloadedrecfldsfail01.hs:14:10: +overloadedrecfldsfail01.hs:14:10: error: No type has all these fields: ‘x’, ‘y’, ‘z’ In the expression: r {x = 3, y = True, z = False} In an equation for ‘upd2’: upd2 r = r {x = 3, y = True, z = False} -overloadedrecfldsfail01.hs:17:10: - Type U does not have fields: ‘w’, ‘x’ +overloadedrecfldsfail01.hs:17:10: error: + ‘w’ is not a (visible) field of type ‘U’ + In the expression: r {w = True, x = 3, y = True} :: U + In an equation for ‘upd3’: + upd3 r = r {w = True, x = 3, y = True} :: U + +overloadedrecfldsfail01.hs:17:10: error: + ‘x’ is not a (visible) field of type ‘U’ In the expression: r {w = True, x = 3, y = True} :: U In an equation for ‘upd3’: upd3 r = r {w = True, x = 3, y = True} :: U diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail04.hs b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail04.hs index 9d35bbe5dd..47f16da56d 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail04.hs +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail04.hs @@ -10,3 +10,5 @@ x' = I.x -- But this is okay f e = e { I.x = True, I.y = False } + +main = return () diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail09.stderr b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail09.stderr index 8d892e380a..415099d79b 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail09.stderr +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail09.stderr @@ -1,4 +1,4 @@ overloadedrecfldsfail09.hs:9:11: error: - ambiguous record updates not (yet) handled by Template Haskell + Ambiguous record updates not (yet) handled by Template Haskell x = 3 diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.hs b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.hs index 0516e43d63..56092b6ce0 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.hs +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.hs @@ -9,4 +9,7 @@ data S = MkS { foo :: Bool } f :: T -> T f e = e { foo = 3, bar = 3 } +s :: T -> Int +s = foo + main = return () diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.stderr b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.stderr index 65733ed6e8..f4a2f7bcfc 100644 --- a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.stderr +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.stderr @@ -9,5 +9,9 @@ overloadedrecfldsfail12.hs:10:20: warning: In the use of ‘bar’ (imported from OverloadedRecFldsFail12_A): "Deprecated bar" +overloadedrecfldsfail12.hs:13:5: warning: + In the use of ‘foo’ (imported from OverloadedRecFldsFail12_A): + "Deprecated foo" + <no location info>: error: Failing due to -Werror. diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.hs b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.hs new file mode 100644 index 0000000000..773bd60c8c --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.hs @@ -0,0 +1,20 @@ +-- Test that giving a stupid type annotation to an ambiguous field +-- yields a sensible error message + +{-# LANGUAGE DuplicateRecordFields #-} + +data S = MkS { x :: Int } +data T = MkT { x :: Bool } +data U = MkU + +a = x (MkU :: U) + +b = x (MkU :: a) + +c :: U -> Int +c = x + +d :: a -> Int +d = x + +main = return () diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.stderr b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.stderr new file mode 100644 index 0000000000..7c61ab769e --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.stderr @@ -0,0 +1,22 @@ + +overloadedrecfldsfail13.hs:10:5: error: + ‘x’ is not a (visible) field of type ‘U’ + In the expression: x (MkU :: U) + In an equation for ‘a’: a = x (MkU :: U) + +overloadedrecfldsfail13.hs:12:5: error: + Ambiguous occurrence ‘x’ + It could refer to either the field ‘x’, + defined at overloadedrecfldsfail13.hs:7:16 + or the field ‘x’, defined at overloadedrecfldsfail13.hs:6:16 + +overloadedrecfldsfail13.hs:15:5: error: + ‘x’ is not a (visible) field of type ‘U’ + In the expression: x + In an equation for ‘c’: c = x + +overloadedrecfldsfail13.hs:18:5: error: + Ambiguous occurrence ‘x’ + It could refer to either the field ‘x’, + defined at overloadedrecfldsfail13.hs:7:16 + or the field ‘x’, defined at overloadedrecfldsfail13.hs:6:16 diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.hs b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.hs new file mode 100644 index 0000000000..7785bb2403 --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.hs @@ -0,0 +1,14 @@ +{-# LANGUAGE DuplicateRecordFields #-} + +-- Test that we deal gracefully with non-fields in updates + +data S = MkS { x :: Int } +data T = MkT { x :: Int } + +y :: Bool +y = True + +-- y isn't a field +f r = r { x = 3, y = False } + +main = return () diff --git a/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.stderr b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.stderr new file mode 100644 index 0000000000..908996f39e --- /dev/null +++ b/testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.stderr @@ -0,0 +1,5 @@ + +overloadedrecfldsfail14.hs:12:7: error: + ‘y’ is not a record selector + In the expression: r {x = 3, y = False} + In an equation for ‘f’: f r = r {x = 3, y = False} |