summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorAustin Seipp <austin@well-typed.com>2015-05-19 07:28:00 -0500
committerAustin Seipp <austin@well-typed.com>2015-05-19 07:28:00 -0500
commitedb8dc5cd2350206fcbe0ab8aa0954b3db50d7ab (patch)
treeef940042460f4a8493c74928837f1e8bd9dcc8b5 /compiler
parentfc8c5e7a516803c04f2a38b53b9e8beb2066c056 (diff)
downloadhaskell-edb8dc5cd2350206fcbe0ab8aa0954b3db50d7ab.tar.gz
Revert "compiler: make sure we reject -O + HscInterpreted" (again)
Apparently my machine likes this commit, but Harbormaster does not? This reverts commit b199536be25ea046079587933cc73d0a948a0626.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/main/DynFlags.hs12
-rw-r--r--compiler/main/ErrUtils.hs6
-rw-r--r--compiler/main/GHC.hs41
-rw-r--r--compiler/simplCore/FloatOut.hs27
4 files changed, 12 insertions, 74 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 26f89c3a15..22615c5f14 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -52,7 +52,6 @@ module DynFlags (
dynFlagDependencies,
tablesNextToCode, mkTablesNextToCode,
SigOf, getSigOf,
- checkOptLevel,
Way(..), mkBuildTag, wayRTSOnly, addWay', updateWays,
wayGeneralFlags, wayUnsetGeneralFlags,
@@ -3838,14 +3837,13 @@ setObjTarget l = updM set
| otherwise = return dflags
setOptLevel :: Int -> DynFlags -> DynP DynFlags
-setOptLevel n dflags = return (updOptLevel n dflags)
-
-checkOptLevel :: Int -> DynFlags -> Either String DynFlags
-checkOptLevel n dflags
+setOptLevel n dflags
| hscTarget dflags == HscInterpreted && n > 0
- = Left "-O conflicts with --interactive; -O ignored."
+ = do addWarn "-O conflicts with --interactive; -O ignored."
+ return dflags
| otherwise
- = Right dflags
+ = return (updOptLevel n dflags)
+
-- -Odph is equivalent to
--
diff --git a/compiler/main/ErrUtils.hs b/compiler/main/ErrUtils.hs
index 1155b4b874..d42db57808 100644
--- a/compiler/main/ErrUtils.hs
+++ b/compiler/main/ErrUtils.hs
@@ -29,7 +29,7 @@ module ErrUtils (
-- * Messages during compilation
putMsg, printInfoForUser, printOutputForUser,
logInfo, logOutput,
- errorMsg, warningMsg,
+ errorMsg,
fatalErrorMsg, fatalErrorMsg', fatalErrorMsg'',
compilationProgressMsg,
showPass,
@@ -351,10 +351,6 @@ errorMsg :: DynFlags -> MsgDoc -> IO ()
errorMsg dflags msg
= log_action dflags dflags SevError noSrcSpan (defaultErrStyle dflags) msg
-warningMsg :: DynFlags -> MsgDoc -> IO ()
-warningMsg dflags msg
- = log_action dflags dflags SevWarning noSrcSpan (defaultErrStyle dflags) msg
-
fatalErrorMsg :: DynFlags -> MsgDoc -> IO ()
fatalErrorMsg dflags msg = fatalErrorMsg' (log_action dflags) dflags msg
diff --git a/compiler/main/GHC.hs b/compiler/main/GHC.hs
index d6aa2273dc..d04f092c17 100644
--- a/compiler/main/GHC.hs
+++ b/compiler/main/GHC.hs
@@ -570,19 +570,17 @@ checkBrokenTablesNextToCode' dflags
--
setSessionDynFlags :: GhcMonad m => DynFlags -> m [PackageKey]
setSessionDynFlags dflags = do
- dflags' <- checkNewDynFlags dflags
- (dflags'', preload) <- liftIO $ initPackages dflags'
- modifySession $ \h -> h{ hsc_dflags = dflags''
- , hsc_IC = (hsc_IC h){ ic_dflags = dflags'' } }
+ (dflags', preload) <- liftIO $ initPackages dflags
+ modifySession $ \h -> h{ hsc_dflags = dflags'
+ , hsc_IC = (hsc_IC h){ ic_dflags = dflags' } }
invalidateModSummaryCache
return preload
-- | Sets the program 'DynFlags'.
setProgramDynFlags :: GhcMonad m => DynFlags -> m [PackageKey]
setProgramDynFlags dflags = do
- dflags' <- checkNewDynFlags dflags
- (dflags'', preload) <- liftIO $ initPackages dflags'
- modifySession $ \h -> h{ hsc_dflags = dflags'' }
+ (dflags', preload) <- liftIO $ initPackages dflags
+ modifySession $ \h -> h{ hsc_dflags = dflags' }
invalidateModSummaryCache
return preload
@@ -621,8 +619,7 @@ getProgramDynFlags = getSessionDynFlags
-- 'pkgState' into the interactive @DynFlags@.
setInteractiveDynFlags :: GhcMonad m => DynFlags -> m ()
setInteractiveDynFlags dflags = do
- dflags' <- checkNewDynFlags dflags
- modifySession $ \h -> h{ hsc_IC = (hsc_IC h) { ic_dflags = dflags' }}
+ modifySession $ \h -> h{ hsc_IC = (hsc_IC h) { ic_dflags = dflags }}
-- | Get the 'DynFlags' used to evaluate interactive expressions.
getInteractiveDynFlags :: GhcMonad m => m DynFlags
@@ -634,32 +631,6 @@ parseDynamicFlags :: MonadIO m =>
-> m (DynFlags, [Located String], [Located String])
parseDynamicFlags = parseDynamicFlagsCmdLine
-{- Note [GHCi and -O]
-~~~~~~~~~~~~~~~~~~~~~
-When using optimization, the compiler can introduce several things
-(such as unboxed tuples) into the intermediate code, which GHCi later
-chokes on since the bytecode interpreter can't handle this (and while
-this is arguably a bug these aren't handled, there are no plans to fix
-it.)
-
-While the driver pipeline always checks for this particular erroneous
-combination when parsing flags, we also need to check when we update
-the flags; this is because API clients may parse flags but update the
-DynFlags afterwords, before finally running code inside a session (see
-T10052 and #10052).
--}
-
--- | Checks the set of new DynFlags for possibly erroneous option
--- combinations when invoking 'setSessionDynFlags' and friends, and if
--- found, returns a fixed copy (if possible).
-checkNewDynFlags :: MonadIO m => DynFlags -> m DynFlags
-checkNewDynFlags dflags
- -- See Note [GHCi and -O]
- | Left e <- checkOptLevel (optLevel dflags) dflags
- = do liftIO $ warningMsg dflags (text e)
- return (dflags { optLevel = 0 })
- | otherwise
- = return dflags
-- %************************************************************************
-- %* *
diff --git a/compiler/simplCore/FloatOut.hs b/compiler/simplCore/FloatOut.hs
index 7f920a230e..7f7b921fa8 100644
--- a/compiler/simplCore/FloatOut.hs
+++ b/compiler/simplCore/FloatOut.hs
@@ -257,32 +257,6 @@ floatBody lvl arg -- Used rec rhss, and case-alternative rhss
(fsa, floats', install heres arg') }}
-----------------
-
-{- Note [Floating past breakpoints]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Notes from Peter Wortmann (re: #10052)
-
-"This case clearly means we're trying to float past a breakpoint..."
-
-Further:
-
-"Breakpoints as they currently exist are the only Tikish that is not
-scoped, counting, and not splittable.
-
-This means that we can't:
- - Simply float code out of it, because the payload must still be covered (scoped)
- - Copy the tick, because it would change entry counts (here: duplicate breakpoints)"
-
-While this seems like an odd case, it can apparently occur in real
-life: through the combination of optimizations + GHCi usage. For an
-example, see #10052 as mentioned above. So not only does the
-interpreter not like some compiler-generated things (like unboxed
-tuples), the compiler doesn't like interpreter-introduced things!
-
-Also see Note [GHCi and -O] in GHC.hs.
--}
-
floatExpr :: LevelledExpr
-> (FloatStats, FloatBinds, CoreExpr)
floatExpr (Var v) = (zeroStats, emptyFloats, Var v)
@@ -318,7 +292,6 @@ floatExpr (Tick tickish expr)
in
(fs, annotated_defns, Tick tickish expr') }
- -- Note [Floating past breakpoints]
| otherwise
= pprPanic "floatExpr tick" (ppr tickish)