Fix handling of safe imports in inference mode
authorDavid Terei <davidterei@gmail.com>
Wed, 9 Nov 2011 00:26:09 +0000 (16:26 -0800)
committerDavid Terei <davidterei@gmail.com>
Wed, 9 Nov 2011 00:26:54 +0000 (16:26 -0800)
compiler/main/DynFlags.hs
compiler/main/HscMain.hs

index 92ed45e..3812ebe 100644 (file)
@@ -1066,12 +1066,12 @@ setSafeHaskell s = updM f
 -- | Are all direct imports required to be safe for this Safe Haskell mode?
 -- Direct imports are when the code explicitly imports a module
 safeDirectImpsReq :: DynFlags -> Bool
-safeDirectImpsReq d = safeLanguageOn d || safeInferOn d
+safeDirectImpsReq d = safeLanguageOn d
 
 -- | Are all implicit imports required to be safe for this Safe Haskell mode?
 -- Implicit imports are things in the prelude. e.g System.IO when print is used.
 safeImplicitImpsReq :: DynFlags -> Bool
-safeImplicitImpsReq d = safeLanguageOn d || safeInferOn d
+safeImplicitImpsReq d = safeLanguageOn d
 
 -- | Combine two Safe Haskell modes correctly. Used for dealing with multiple flags.
 -- This makes Safe Haskell very much a monoid but for now I prefer this as I don't
index c24c214..753f044 100644 (file)
@@ -920,7 +920,10 @@ checkSafeImports dflags hsc_env tcg_env
     condense :: (Module, [ImportedModsVal]) -> Hsc (Module, SrcSpan, IsSafeImport)
     condense (_, [])   = panic "HscMain.condense: Pattern match failure!"
     condense (m, x:xs) = do (_,_,l,s) <- foldlM cond' x xs
-                            return (m, l, s)
+                            -- we turn all imports into safe ones when
+                            -- inference mode is on.
+                            let s' = if safeInferOn dflags then True else s
+                            return (m, l, s')
         
     -- ImportedModsVal = (ModuleName, Bool, SrcSpan, IsSafeImport)
     cond' :: ImportedModsVal -> ImportedModsVal -> Hsc ImportedModsVal