[commit: ghc] ghc-7.4: Ignore -fpackage-trust if no other Safe Haskell flags (508b027)
Ian Lynagh
igloo at earth.li
Fri Jan 6 20:28:34 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : ghc-7.4
http://hackage.haskell.org/trac/ghc/changeset/508b02729ef0653b675980f1803d35c29bd9335e
>---------------------------------------------------------------
commit 508b02729ef0653b675980f1803d35c29bd9335e
Author: David Terei <davidterei at gmail.com>
Date: Mon Dec 19 18:37:47 2011 -0800
Ignore -fpackage-trust if no other Safe Haskell flags
>---------------------------------------------------------------
compiler/main/DynFlags.hs | 35 ++++++++++++++++++++++++++---------
1 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 3cab442..2ec7132 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -562,11 +562,12 @@ data DynFlags = DynFlags {
language :: Maybe Language,
-- | Safe Haskell mode
safeHaskell :: SafeHaskellMode,
- -- We store the location of where template haskell and newtype deriving were
- -- turned on so we can produce accurate error messages when Safe Haskell turns
- -- them off.
+ -- We store the location of where some extension and flags were turned on so
+ -- we can produce accurate error messages when Safe Haskell fails due to
+ -- them.
thOnLoc :: SrcSpan,
newDerivOnLoc :: SrcSpan,
+ pkgTrustOnLoc :: SrcSpan,
warnSafeOnLoc :: SrcSpan,
warnUnsafeOnLoc :: SrcSpan,
-- Don't change this without updating extensionFlags:
@@ -906,6 +907,7 @@ defaultDynFlags mySettings =
safeHaskell = Sf_SafeInfered,
thOnLoc = noSrcSpan,
newDerivOnLoc = noSrcSpan,
+ pkgTrustOnLoc = noSrcSpan,
warnSafeOnLoc = noSrcSpan,
warnUnsafeOnLoc = noSrcSpan,
extensions = [],
@@ -1301,19 +1303,28 @@ parseDynamicFlags dflags0 args cmdline = do
when (not (null errs)) $ ghcError $ errorsToGhcException errs
-- check for disabled flags in safe haskell
- let (dflags2, sh_warns) = safeFlagCheck dflags1
+ let (dflags2, sh_warns) = safeFlagCheck cmdline dflags1
return (dflags2, leftover, sh_warns ++ warns)
-- | Check (and potentially disable) any extensions that aren't allowed
-- in safe mode.
-safeFlagCheck :: DynFlags -> (DynFlags, [Located String])
-safeFlagCheck dflags | not (safeLanguageOn dflags || safeInferOn dflags)
- = (dflags, [])
-safeFlagCheck dflags =
+safeFlagCheck :: Bool -> DynFlags -> (DynFlags, [Located String])
+safeFlagCheck _ dflags | not (safeLanguageOn dflags || safeInferOn dflags)
+ = (dflags, [])
+
+safeFlagCheck cmdl dflags =
case safeLanguageOn dflags of
True -> (dflags', warns)
+ -- throw error if -fpackage-trust by itself with no safe haskell flag
+ False | not cmdl && safeInferOn dflags && packageTrustOn dflags
+ -> (dopt_unset dflags' Opt_PackageTrust,
+ [L (pkgTrustOnLoc dflags') $
+ "Warning: -fpackage-trust ignored;" ++
+ " must be specified with a Safe Haskell flag"]
+ )
+
False | null warns && safeInfOk
-> (dflags', [])
@@ -1659,7 +1670,7 @@ dynamic_flags = [
, Flag "fno-glasgow-exts" (NoArg (disableGlasgowExts >> deprecate "Use individual extensions instead"))
------ Safe Haskell flags -------------------------------------------
- , Flag "fpackage-trust" (NoArg (setDynFlag Opt_PackageTrust))
+ , Flag "fpackage-trust" (NoArg setPackageTrust)
, Flag "fno-safe-infer" (NoArg (setSafeHaskell Sf_None))
]
++ map (mkFlag turnOn "f" setDynFlag ) fFlags
@@ -2171,6 +2182,12 @@ setWarnUnsafe :: Bool -> DynP ()
setWarnUnsafe True = getCurLoc >>= \l -> upd (\d -> d { warnUnsafeOnLoc = l })
setWarnUnsafe False = return ()
+setPackageTrust :: DynP ()
+setPackageTrust = do
+ setDynFlag Opt_PackageTrust
+ l <- getCurLoc
+ upd $ \d -> d { pkgTrustOnLoc = l }
+
setGenDeriving :: Bool -> DynP ()
setGenDeriving True = getCurLoc >>= \l -> upd (\d -> d { newDerivOnLoc = l })
setGenDeriving False = return ()
More information about the Cvs-ghc
mailing list