SafeHaskell: Fix validation errors when unsafe base used
authorDavid Terei <davidterei@gmail.com>
Mon, 6 Jun 2011 20:45:46 +0000 (13:45 -0700)
committerDavid Terei <davidterei@gmail.com>
Sat, 18 Jun 2011 03:40:34 +0000 (20:40 -0700)
compiler/ghci/RtClosureInspect.hs
compiler/hsSyn/HsImpExp.lhs
compiler/main/InteractiveEval.hs
compiler/utils/FastMutInt.lhs
compiler/utils/StringBuffer.lhs
ghc/InteractiveUI.hs
mk/validate-settings.mk

index 8e2c92c..358c7e6 100644 (file)
@@ -66,7 +66,7 @@ import Data.List
 import qualified Data.Sequence as Seq
 import Data.Monoid
 import Data.Sequence (viewl, ViewL(..))
-import Foreign
+import Foreign.Safe
 import System.IO.Unsafe
 
 ---------------------------------------------
index 58bc4b0..9dbb441 100644 (file)
@@ -47,6 +47,7 @@ simpleImportDecl mn = ImportDecl {
       ideclName      = noLoc mn,
       ideclPkgQual   = Nothing,
       ideclSource    = False,
+      ideclSafe      = True,
       ideclQualified = False,
       ideclAs        = Nothing,
       ideclHiding    = Nothing
index 68685b6..1df5255 100644 (file)
@@ -75,7 +75,11 @@ import System.Directory
 import Data.Dynamic
 import Data.List (find)
 import Control.Monad
-import Foreign
+#if __GLASGOW_HASKELL__ >= 701
+import Foreign.Safe
+#else
+import Foreign hiding (unsafePerformIO)
+#endif
 import Foreign.C
 import GHC.Exts
 import Data.Array
index b27f9cf..3a18a13 100644 (file)
@@ -26,9 +26,11 @@ module FastMutInt(
 #endif
 
 import GHC.Base
-import GHC.Ptr
 #if __GLASGOW_HASKELL__ >= 701
+import GHC.Ptr.Safe
 import GHC.Ptr.Unsafe
+#else
+import GHC.Ptr
 #endif
 
 #else /* ! __GLASGOW_HASKELL__ */
index 326cb1c..3eb2f1f 100644 (file)
@@ -55,7 +55,7 @@ import System.IO.Unsafe         ( unsafePerformIO )
 import GHC.Exts
 
 #if __GLASGOW_HASKELL__ >= 701
-import Foreign
+import Foreign.Safe
 #else
 import Foreign hiding           ( unsafePerformIO )
 #endif
index 7f95125..b4fc2aa 100644 (file)
@@ -88,7 +88,7 @@ import Data.Char
 import Data.Array
 import Control.Monad as Monad
 import Text.Printf
-import Foreign
+import Foreign.Safe
 import GHC.Exts                ( unsafeCoerce# )
 
 import GHC.IO.Exception        ( IOErrorType(InvalidArgument) )
@@ -1336,7 +1336,10 @@ isSafeCmd m =
                 -- recently-added module occurs last, it seems.
         case (as,bs) of
           (as@(_:_), _)   -> isSafeModule $ last as
-          ([],  bs@(_:_)) -> isSafeModule $ fst (last bs)
+          ([],  bs@(_:_)) -> do
+             let i = last bs
+             m <- GHC.findModule (unLoc (ideclName i)) (ideclPkgQual i)
+             isSafeModule m
           ([], [])  -> ghcError (CmdLineError ":issafe: no current module")
     _ -> ghcError (CmdLineError "syntax:  :issafe <module>")
 
index e250fa6..7831f53 100644 (file)
@@ -7,6 +7,9 @@ HADDOCK_DOCS    = YES
 SRC_CC_OPTS     += -Wall $(WERROR)
 SRC_HC_OPTS     += -Wall $(WERROR) -H64m -O0
 
+# Safe by default
+#SRC_HC_OPTS += -Dsh_SAFE_DEFAULT
+
 GhcStage1HcOpts += -O
 
 GhcStage2HcOpts += -O