summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2011-11-01 22:54:38 -0700
committerDavid Terei <davidterei@gmail.com>2011-11-04 13:51:41 -0700
commitbaab7c1760fbf2ecf759b152aa2a19c6cd0bc54c (patch)
tree07e565294b2e5bf0b9f807830fb50eace1455b4a /compiler
parent70f631ee065a9b05ea128b02cf3666fd948d77cf (diff)
downloadhaskell-baab7c1760fbf2ecf759b152aa2a19c6cd0bc54c.tar.gz
Correctly handle safe inference in Safe Haskell.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/iface/MkIface.lhs8
1 files changed, 6 insertions, 2 deletions
diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs
index 6dbcc8c68b..af4d933422 100644
--- a/compiler/iface/MkIface.lhs
+++ b/compiler/iface/MkIface.lhs
@@ -234,7 +234,8 @@ mkIface_ hsc_env maybe_old_fingerprint
-- put exactly the info into the TypeEnv that we want
-- to expose in the interface
- = do { usages <- mkUsageInfo hsc_env this_mod dir_imp_mods used_names
+ = do { usages <- mkUsageInfo hsc_env this_mod dir_imp_mods used_names
+ ; safeInf <- hscGetSafeInf hsc_env
; let { entities = typeEnvElts type_env ;
decls = [ tyThingToIfaceDecl entity
@@ -253,7 +254,10 @@ mkIface_ hsc_env maybe_old_fingerprint
; iface_insts = map instanceToIfaceInst insts
; iface_fam_insts = map famInstToIfaceFamInst fam_insts
; iface_vect_info = flattenVectInfo vect_info
- ; trust_info = (setSafeMode . safeHaskell) dflags
+ ; safeMode = if safeInferOn dflags && not safeInf
+ then Sf_None
+ else safeHaskell dflags
+ ; trust_info = setSafeMode safeMode
; intermediate_iface = ModIface {
mi_module = this_mod,