summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2011-05-06 15:35:07 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2011-05-06 15:35:07 +0100
commit668ac8061c35fd5b72816fd3c4dd4881c46db737 (patch)
treeef59a3863b756af80ffa88b4e9a96d9148c5ae70
parentabfa45f26f9a5d2bc67b18b7820e0b4039f12ad3 (diff)
downloadhaskell-668ac8061c35fd5b72816fd3c4dd4881c46db737.tar.gz
Missing coercion case in byte code generation
-rw-r--r--compiler/ghci/ByteCodeGen.lhs7
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/ghci/ByteCodeGen.lhs b/compiler/ghci/ByteCodeGen.lhs
index b1d4bd7656..c07073aee6 100644
--- a/compiler/ghci/ByteCodeGen.lhs
+++ b/compiler/ghci/ByteCodeGen.lhs
@@ -1198,6 +1198,9 @@ pushAtom d p e
| Just e' <- bcView e
= pushAtom d p e'
+pushAtom _ _ (AnnCoercion {}) -- Coercions are zero-width things,
+ = return (nilOL, 0) -- treated just like a variable VoidArg
+
pushAtom d p (AnnVar v)
| idCgRep v == VoidArg
= return (nilOL, 0)
@@ -1271,9 +1274,6 @@ pushAtom _ _ (AnnLit lit)
-- Get the addr on the stack, untaggedly
return (unitOL (PUSH_UBX (Right addr) 1), 1)
-pushAtom d p (AnnCast e _)
- = pushAtom d p (snd e)
-
pushAtom _ _ expr
= pprPanic "ByteCodeGen.pushAtom"
(pprCoreExpr (deAnnotate (undefined, expr)))
@@ -1464,6 +1464,7 @@ bcView _ = Nothing
isVoidArgAtom :: AnnExpr' Var ann -> Bool
isVoidArgAtom e | Just e' <- bcView e = isVoidArgAtom e'
isVoidArgAtom (AnnVar v) = typePrimRep (idType v) == VoidRep
+isVoidArgAtom (AnnCoercion {}) = True
isVoidArgAtom _ = False
atomPrimRep :: AnnExpr' Id ann -> PrimRep