diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 5425ace05bacf98579622091876d7474b65d358f..dbf5ff9f362fa8a10810555f929cfd3573a392c4 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -152,6 +152,7 @@ data DynFlag
| Opt_D_dump_view_pattern_commoning
| Opt_D_faststring_stats
| Opt_DumpToFile -- ^ Append dump output to files instead of stdout.
+ | Opt_D_no_debug_output
| Opt_DoCoreLinting
| Opt_DoStgLinting
| Opt_DoCmmLinting
diff --git a/compiler/main/StaticFlags.hs b/compiler/main/StaticFlags.hs
index 538fe33a98769f4eb470d2b4409376e8bbbcad2d..6fa6032bb05be8cc949038a50b88f9b9561f098e 100644
--- a/compiler/main/StaticFlags.hs
+++ b/compiler/main/StaticFlags.hs
@@ -21,6 +21,7 @@ module StaticFlags (
opt_PprUserLength,
opt_SuppressUniques,
opt_PprStyle_Debug,
+ opt_NoDebugOutput,
-- profiling opts
opt_AutoSccsOnAllToplevs,
@@ -166,6 +167,7 @@ static_flags = [
, ( "dsuppress-uniques", PassFlag addOpt )
, ( "dppr-user-length", AnySuffix addOpt )
, ( "dopt-fuel", AnySuffix addOpt )
+ , ( "dno-debug-output", PassFlag addOpt )
-- rest of the debugging flags are dynamic
--------- Profiling --------------------------------------------------
@@ -289,6 +291,9 @@ opt_PprUserLength :: Int
opt_PprUserLength = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
opt_Fuel :: Int
opt_Fuel = lookup_def_int "-dopt-fuel" maxBound
+opt_NoDebugOutput :: Bool
+opt_NoDebugOutput = lookUp (fsLit "-dno-debug-output")
+
-- profiling opts
opt_AutoSccsOnAllToplevs :: Bool
diff --git a/compiler/utils/Outputable.lhs b/compiler/utils/Outputable.lhs
index b5d451ad642320aa94e6100e8733bb029ee925f1..61ad4ddd22216a6465956639cb539d2f66480260 100644
--- a/compiler/utils/Outputable.lhs
+++ b/compiler/utils/Outputable.lhs
@@ -53,7 +53,7 @@ module Outputable (
import {-# SOURCE #-} Module( Module, ModuleName, moduleName )
import {-# SOURCE #-} OccName( OccName )
-import StaticFlags ( opt_PprStyle_Debug, opt_PprUserLength )
+import StaticFlags
import FastString
import FastTypes
import qualified Pretty
@@ -622,7 +622,9 @@ pprPanic = pprAndThen panic -- Throw an exn saying "bug in GHC"
pprPgmError = pprAndThen pgmError -- Throw an exn saying "bug in pgm being compiled"
-- (used for unusual pgm errors)
-pprTrace = pprAndThen trace
+pprTrace str doc x
+ | opt_NoDebugOutput = x
+ | otherwise = pprAndThen trace str doc x
pprPanicFastInt :: String -> SDoc -> FastInt
pprPanicFastInt heading pretty_msg = panicFastInt (show (doc PprDebug))
@@ -644,6 +646,7 @@ assertPprPanic file line msg
msg]
warnPprTrace :: Bool -> String -> Int -> SDoc -> a -> a
+warnPprTrace _ _file _line _msg x | opt_NoDebugOutput = x
warnPprTrace False _file _line _msg x = x
warnPprTrace True file line msg x
= trace (show (doc PprDebug)) x
diff --git a/docs/users_guide/debugging.xml b/docs/users_guide/debugging.xml
index 638ab7a4b50d732352fa82a0db4caefe7100a8d1..e00cd8fa4e028e5bd24860cabbd764a5205fe2e3 100644
--- a/docs/users_guide/debugging.xml
+++ b/docs/users_guide/debugging.xml
@@ -435,14 +435,18 @@
-
-
-
+
+
+
-
- Have the renamer report what imports does not
- contribute.
-
+
+ Suppress any unsolicited debugging output. When GHC
+ has been built with the DEBUG option it
+ occasionally emits debug output of interest to developers.
+ The extra output can confuse the testing framework and
+ cause bogus test failures, so this flag is provided to
+ turn it off.
+
diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml
index 7de1ae8e86a3d822bf980af182eacfcf50fe0239..9b1e272d9b257a8543539fce5356b67ae4b6e971 100644
--- a/docs/users_guide/flags.xml
+++ b/docs/users_guide/flags.xml
@@ -2213,6 +2213,12 @@
dynamic
-
+
+
+ Suppress unsolicited debugging output
+ static
+ -
+
Turn on debug printing (more verbose)