summaryrefslogtreecommitdiff
path: root/testsuite/tests/overloadedrecflds/should_fail
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/overloadedrecflds/should_fail')
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/all.T2
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail01.stderr14
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail04.hs2
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail09.stderr2
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.hs3
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail12.stderr4
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.hs20
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail13.stderr22
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.hs14
-rw-r--r--testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail14.stderr5
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}