summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2011-06-06 13:45:46 -0700
committerDavid Terei <davidterei@gmail.com>2011-06-17 20:40:34 -0700
commitc838658103c644ef6c32e92025b1d4999aa0f9bd (patch)
treed38d76f235e20fb76f8321bd060fe57b45216c43
parent4f9675b2e0533000aeda861f3b4c04dd9ad79970 (diff)
downloadhaskell-c838658103c644ef6c32e92025b1d4999aa0f9bd.tar.gz
SafeHaskell: Fix validation errors when unsafe base used
-rw-r--r--compiler/ghci/RtClosureInspect.hs2
-rw-r--r--compiler/hsSyn/HsImpExp.lhs1
-rw-r--r--compiler/main/InteractiveEval.hs6
-rw-r--r--compiler/utils/FastMutInt.lhs4
-rw-r--r--compiler/utils/StringBuffer.lhs2
-rw-r--r--ghc/InteractiveUI.hs7
-rw-r--r--mk/validate-settings.mk3
7 files changed, 19 insertions, 6 deletions
diff --git a/compiler/ghci/RtClosureInspect.hs b/compiler/ghci/RtClosureInspect.hs
index 8e2c92cd37..358c7e63c3 100644
--- a/compiler/ghci/RtClosureInspect.hs
+++ b/compiler/ghci/RtClosureInspect.hs
@@ -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
---------------------------------------------
diff --git a/compiler/hsSyn/HsImpExp.lhs b/compiler/hsSyn/HsImpExp.lhs
index 58bc4b0464..9dbb4417ae 100644
--- a/compiler/hsSyn/HsImpExp.lhs
+++ b/compiler/hsSyn/HsImpExp.lhs
@@ -47,6 +47,7 @@ simpleImportDecl mn = ImportDecl {
ideclName = noLoc mn,
ideclPkgQual = Nothing,
ideclSource = False,
+ ideclSafe = True,
ideclQualified = False,
ideclAs = Nothing,
ideclHiding = Nothing
diff --git a/compiler/main/InteractiveEval.hs b/compiler/main/InteractiveEval.hs
index 68685b6556..1df5255dbe 100644
--- a/compiler/main/InteractiveEval.hs
+++ b/compiler/main/InteractiveEval.hs
@@ -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
diff --git a/compiler/utils/FastMutInt.lhs b/compiler/utils/FastMutInt.lhs
index b27f9cf2c9..3a18a13501 100644
--- a/compiler/utils/FastMutInt.lhs
+++ b/compiler/utils/FastMutInt.lhs
@@ -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__ */
diff --git a/compiler/utils/StringBuffer.lhs b/compiler/utils/StringBuffer.lhs
index 326cb1c3f9..3eb2f1f5bd 100644
--- a/compiler/utils/StringBuffer.lhs
+++ b/compiler/utils/StringBuffer.lhs
@@ -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
diff --git a/ghc/InteractiveUI.hs b/ghc/InteractiveUI.hs
index 7f95125331..b4fc2aa821 100644
--- a/ghc/InteractiveUI.hs
+++ b/ghc/InteractiveUI.hs
@@ -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>")
diff --git a/mk/validate-settings.mk b/mk/validate-settings.mk
index e250fa6fb4..7831f530a8 100644
--- a/mk/validate-settings.mk
+++ b/mk/validate-settings.mk
@@ -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