Skip to content

Inconsistent querying of DumpFlags in DynFlags and Logger

During the refactoring we'd like to replace calls to dopt with calls to logHasDumpFlag in order to eliminate DynFlag values from the various components. But we cannot do this easily as there is an inconsistency regarding how we query DumpFlags from DynFlags and Logger: In particular, the results for verbosity >= 4 of the two aforementioned functions differ for some flags.

For example, changing the definition of GHC.Core.Opt.Monad.nop to

nop :: a -> CoreIOEnv (a, CoreWriter)
nop x = do
    r <- getEnv
    dflags <- hsc_dflags . cr_hsc_env <$> getEnv
    let dflags_opt = dopt Opt_D_dump_simpl_stats dflags
    logger <- hsc_logger . cr_hsc_env <$> getEnv
    let logger_opt = logHasDumpFlag logger Opt_D_dump_simpl_stats
    when (dflags_opt /= logger_opt) $
      panic $ "Inconsistent -ddump-simpl-stats:"
        ++ " dflags=" ++ show dflags_opt
        ++ " logger=" ++ show logger_opt
    return (x, emptyWriter $ (hsc_dflags . cr_hsc_env) r)

results in a failure of T20218:

<no location info>: error:
    panic! (the 'impossible' happened)
  GHC version 9.5.20220714:
	Inconsistent -ddump-simpl-stats: dflags=True logger=False
Edited by Dominik Peteler
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information