summaryrefslogtreecommitdiff
path: root/compiler/stgSyn
diff options
context:
space:
mode:
authorsimonpj@microsoft.com <unknown>2006-11-07 17:13:36 +0000
committersimonpj@microsoft.com <unknown>2006-11-07 17:13:36 +0000
commit6ef2fc2ebf11755a54386f8e317d83cb19913be1 (patch)
treee57aa149463a07c234abdf0740059054d5e3a61e /compiler/stgSyn
parent604121dfc02eaf2ba60d018bbc7f4c7b3e0698dd (diff)
downloadhaskell-6ef2fc2ebf11755a54386f8e317d83cb19913be1.tar.gz
Comment out deeply suspicious (and unused) function insertStableSymbol
The function insertStableSymbol looks utterly wrong, because it coerces a value of type 'a' to an Addr#! That was in turn making the code generator get confused (now improved), but since insertStableSymbol isn't used at all, I'm just commenting it out. Meanwhile, this patch also enhances CoreToStg to report the most egregious cases where an unsafe coerce is going to confuse the code generator.
Diffstat (limited to 'compiler/stgSyn')
-rw-r--r--compiler/stgSyn/CoreToStg.lhs15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/stgSyn/CoreToStg.lhs b/compiler/stgSyn/CoreToStg.lhs
index 66e2d6171d..64f9fe3ad3 100644
--- a/compiler/stgSyn/CoreToStg.lhs
+++ b/compiler/stgSyn/CoreToStg.lhs
@@ -548,6 +548,21 @@ coreToStgArgs (arg : args) -- Non-type argument
StgLit lit -> StgLitArg lit
_ -> pprPanic "coreToStgArgs" (ppr arg)
in
+ -- WARNING: what if we have an argument like (v `cast` co)
+ -- where 'co' changes the representation type?
+ -- (This really only happens if co is unsafe.)
+ -- Then all the getArgAmode stuff in CgBindery will set the
+ -- cg_rep of the CgIdInfo based on the type of v, rather
+ -- than the type of 'co'.
+ -- This matters particularly when the function is a primop
+ -- or foreign call.
+ -- Wanted: a better solution than this hacky warning
+ let
+ arg_ty = exprType arg
+ stg_arg_ty = stgArgType stg_arg
+ in
+ WARN( isUnLiftedType arg_ty /= isUnLiftedType stg_arg_ty,
+ ptext SLIT("Dangerous-looking argument. Probable cause: bad unsafeCoerce#") $$ ppr arg)
returnLne (stg_arg : stg_args, fvs)