summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Eisenberg <eir@cis.upenn.edu>2015-06-05 09:56:21 -0400
committerRichard Eisenberg <eir@cis.upenn.edu>2015-06-05 11:09:24 -0400
commit61b96a86c5342fb1c850361177d60fe855d948f6 (patch)
tree755b996764698214d91277a038085c34ce59a7cd
parent53c13744210402151e58baf0d703d23927f5188d (diff)
downloadhaskell-61b96a86c5342fb1c850361177d60fe855d948f6.tar.gz
Fix #10489
Dang, roles are annoying. Test case: typecheck/should_compile/T10489
-rw-r--r--compiler/hsSyn/HsUtils.hs3
-rw-r--r--testsuite/tests/typecheck/should_compile/T10489.hs3
-rw-r--r--testsuite/tests/typecheck/should_compile/all.T19
3 files changed, 15 insertions, 10 deletions
diff --git a/compiler/hsSyn/HsUtils.hs b/compiler/hsSyn/HsUtils.hs
index f4737e7bdb..fd3d5efa6a 100644
--- a/compiler/hsSyn/HsUtils.hs
+++ b/compiler/hsSyn/HsUtils.hs
@@ -504,9 +504,10 @@ mkHsWrapPat :: HsWrapper -> Pat id -> Type -> Pat id
mkHsWrapPat co_fn p ty | isIdHsWrapper co_fn = p
| otherwise = CoPat co_fn p ty
+-- input coercion is Nominal
mkHsWrapPatCo :: TcCoercion -> Pat id -> Type -> Pat id
mkHsWrapPatCo co pat ty | isTcReflCo co = pat
- | otherwise = CoPat (mkWpCast co) pat ty
+ | otherwise = CoPat (mkWpCast (mkTcSubCo co)) pat ty
mkHsDictLet :: TcEvBinds -> LHsExpr Id -> LHsExpr Id
mkHsDictLet ev_binds expr = mkLHsWrap (mkWpLet ev_binds) expr
diff --git a/testsuite/tests/typecheck/should_compile/T10489.hs b/testsuite/tests/typecheck/should_compile/T10489.hs
new file mode 100644
index 0000000000..892965e8d8
--- /dev/null
+++ b/testsuite/tests/typecheck/should_compile/T10489.hs
@@ -0,0 +1,3 @@
+module T10489 where
+
+convert d = let d' = case d of '0' -> '!' in d'
diff --git a/testsuite/tests/typecheck/should_compile/all.T b/testsuite/tests/typecheck/should_compile/all.T
index 12e26128bc..dbd6328cae 100644
--- a/testsuite/tests/typecheck/should_compile/all.T
+++ b/testsuite/tests/typecheck/should_compile/all.T
@@ -254,9 +254,9 @@ test('tc236', normal, compile, [''])
test('tc237', normal, compile, [''])
test('tc238', normal, compile, [''])
-test('tc239', extra_clean(['Tc239_Help.hi', 'Tc239_Help.o']),
+test('tc239', extra_clean(['Tc239_Help.hi', 'Tc239_Help.o']),
multimod_compile, ['tc239', '-v0'])
-
+
test('tc240', normal, compile, [''])
test('tc241', normal, compile, [''])
test('tc242', normal, compile, [''])
@@ -278,13 +278,13 @@ test('FD4', normal, compile, [''])
test('faxen', normal, compile, [''])
test('T1495', normal, compile, [''])
test('T2045', normal, compile, ['']) # Needs -fhpc
-test('T2478', normal, compile, [''])
-test('T2433', extra_clean(['T2433_Help.hi', 'T2433_Help.o']),
+test('T2478', normal, compile, [''])
+test('T2433', extra_clean(['T2433_Help.hi', 'T2433_Help.o']),
multimod_compile, ['T2433', '-v0'])
-test('T2494', normal, compile_fail, [''])
-test('T2494-2', normal, compile, [''])
-test('T2497', normal, compile, [''])
-
+test('T2494', normal, compile_fail, [''])
+test('T2494-2', normal, compile, [''])
+test('T2497', normal, compile, [''])
+
# Omitting temporarily
test('syn-perf', normal, compile, ['-freduction-depth=30'])
@@ -332,7 +332,7 @@ test('T4498', normal, compile, [''])
test('T4524', normal, compile, [''])
test('T4917', normal, compile, [''])
-test('T4912', extra_clean(['T4912a.hi', 'T4912a.o']),
+test('T4912', extra_clean(['T4912a.hi', 'T4912a.o']),
multimod_compile, ['T4912', '-v0'])
test('T4952', normal, compile, [''])
@@ -457,3 +457,4 @@ test('T10390', normal, compile, [''])
test('T8555', normal, compile, [''])
test('T8799', normal, compile, [''])
test('T10423', normal, compile, [''])
+test('T10489', normal, compile, [''])