ghci: fix trac issue #11481
authorBenjamin Bykowski <alpha-theta@web.de>
Wed, 27 Jan 2016 10:05:13 +0000 (11:05 +0100)
committerBen Gamari <ben@smart-cactus.org>
Wed, 27 Jan 2016 10:32:15 +0000 (11:32 +0100)
Test Plan: validate

Reviewers: thomie, austin, bgamari

Reviewed By: bgamari

Differential Revision: https://phabricator.haskell.org/D1833

GHC Trac Issues: #11481

compiler/main/DynFlags.hs
ghc/GHCi/UI.hs
testsuite/tests/ghci/scripts/Defer03.hs
testsuite/tests/ghci/scripts/T8353.stderr

index 0e9d420..83de48c 100644 (file)
@@ -28,7 +28,7 @@ module DynFlags (
         ProfAuto(..),
         glasgowExtsFlags,
         dopt, dopt_set, dopt_unset,
-        gopt, gopt_set, gopt_unset,
+        gopt, gopt_set, gopt_unset, setGeneralFlag', unSetGeneralFlag',
         wopt, wopt_set, wopt_unset,
         xopt, xopt_set, xopt_unset,
         lang_set,
index fc03b5f..2528503 100644 (file)
@@ -1460,17 +1460,14 @@ checkModule m = do
 -- :load, :add, :reload
 
 -- | Sets '-fdefer-type-errors' if 'defer' is true, executes 'load' and unsets
--- '-fdefer-type-errors' again if it has not been set before
+-- '-fdefer-type-errors' again if it has not been set before.
 deferredLoad :: Bool -> InputT GHCi SuccessFlag -> InputT GHCi ()
 deferredLoad defer load = do
-  flags <- getDynFlags
-  deferredBefore <- return (gopt Opt_DeferTypeErrors flags)
-  when (defer) $ Monad.void $
-    GHC.setProgramDynFlags $ gopt_set flags Opt_DeferTypeErrors
+  originalFlags <- getDynFlags
+  when defer $ Monad.void $
+    GHC.setProgramDynFlags $ setGeneralFlag' Opt_DeferTypeErrors originalFlags
   Monad.void $ load
-  flags <- getDynFlags
-  when (not deferredBefore) $ Monad.void $
-    GHC.setProgramDynFlags $ gopt_unset flags Opt_DeferTypeErrors
+  Monad.void $ GHC.setProgramDynFlags $ originalFlags
 
 loadModule :: [(FilePath, Maybe Phase)] -> InputT GHCi SuccessFlag
 loadModule fs = timeIt (const Nothing) (loadModule' fs)
index b91a7ac..b0f65fb 100755 (executable)
@@ -3,5 +3,8 @@ module Main where
 a :: Int
 a = 'p'
 
+f :: Int
+f = _
+
 main :: IO ()
-main = print "No errors!"
+main = print f
index 7303142..8914820 100644 (file)
@@ -1,25 +1,55 @@
 
 Defer03.hs:4:5: warning:
-    Couldn't match expected type ‘Int’ with actual type ‘Char’
-    In the expression: 'p'
-    In an equation for ‘a’: a = 'p'
+    • Couldn't match expected type ‘Int’ with actual type ‘Char’
+    • In the expression: 'p'
+      In an equation for ‘a’: a = 'p'
+
+Defer03.hs:7:5: warning:
+    • Found hole: _ :: Int
+    • In the expression: _
+      In an equation for ‘f’: f = _
+    • Relevant bindings include f :: Int (bound at Defer03.hs:7:1)
 
 Defer03.hs:4:5: error:
-    Couldn't match expected type ‘Int’ with actual type ‘Char’
-    In the expression: 'p'
-    In an equation for ‘a’: a = 'p'
+    • Couldn't match expected type ‘Int’ with actual type ‘Char’
+    • In the expression: 'p'
+      In an equation for ‘a’: a = 'p'
+
+Defer03.hs:7:5: error:
+    • Found hole: _ :: Int
+    • In the expression: _
+      In an equation for ‘f’: f = _
+    • Relevant bindings include f :: Int (bound at Defer03.hs:7:1)
 
 Defer03.hs:4:5: warning:
-    Couldn't match expected type ‘Int’ with actual type ‘Char’
-    In the expression: 'p'
-    In an equation for ‘a’: a = 'p'
+    • Couldn't match expected type ‘Int’ with actual type ‘Char’
+    • In the expression: 'p'
+      In an equation for ‘a’: a = 'p'
+
+Defer03.hs:7:5: warning:
+    • Found hole: _ :: Int
+    • In the expression: _
+      In an equation for ‘f’: f = _
+    • Relevant bindings include f :: Int (bound at Defer03.hs:7:1)
 
 Defer03.hs:4:5: error:
-    Couldn't match expected type ‘Int’ with actual type ‘Char’
-    In the expression: 'p'
-    In an equation for ‘a’: a = 'p'
+    • Couldn't match expected type ‘Int’ with actual type ‘Char’
+    • In the expression: 'p'
+      In an equation for ‘a’: a = 'p'
+
+Defer03.hs:7:5: error:
+    • Found hole: _ :: Int
+    • In the expression: _
+      In an equation for ‘f’: f = _
+    • Relevant bindings include f :: Int (bound at Defer03.hs:7:1)
 
 Defer03.hs:4:5: warning:
-    Couldn't match expected type ‘Int’ with actual type ‘Char’
-    In the expression: 'p'
-    In an equation for ‘a’: a = 'p'
+    • Couldn't match expected type ‘Int’ with actual type ‘Char’
+    • In the expression: 'p'
+      In an equation for ‘a’: a = 'p'
+
+Defer03.hs:7:5: warning:
+    • Found hole: _ :: Int
+    • In the expression: _
+      In an equation for ‘f’: f = _
+    • Relevant bindings include f :: Int (bound at Defer03.hs:7:1)