diff options
author | sheaf <sam.derbyshire@gmail.com> | 2022-12-02 17:55:21 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-12-06 15:45:58 -0500 |
commit | cd31acad391582dd16b00a823271b364ab063ca9 (patch) | |
tree | 3204b649e321dea27b16b13247ad6cb4a0f4d328 /hadrian/src | |
parent | 1a767fa359d22ca7637af41e29434e76487c3f21 (diff) | |
download | haskell-cd31acad391582dd16b00a823271b364ab063ca9.tar.gz |
Hadrian: fix ghcDebugAssertions off-by-one error
Commit 6b2f7ffe changed the logic that decided whether to enable debug
assertions. However, it had an off-by-one error, as the stage parameter
to the function inconsistently referred to the stage of the compiler
being used to build or the stage of the compiler we are building.
This patch makes it consistent. Now the parameter always refers to the
the compiler which is being built.
In particular, this patch re-enables
assertions in the stage 2 compiler when building with devel2 flavour,
and disables assertions in the stage 2 compiler when building with
validate flavour.
Some extra performance tests are now run in the "validate" jobs because
the stage2 compiler no longer contains assertions.
-------------------------
Metric Decrease:
CoOpt_Singletons
MultiComponentModules
MultiComponentModulesRecomp
MultiLayerModulesTH_OneShot
T11374
T12227
T12234
T13253-spj
T13701
T14683
T14697
T15703
T17096
T17516
T18304
T18478
T18923
T5030
T9872b
TcPlugin_RewritePerf
Metric Increase:
MultiComponentModules
MultiComponentModulesRecomp
MultiLayerModules
MultiLayerModulesRecomp
MultiLayerModulesTH_Make
T13386
T13719
T3294
T9233
T9675
parsing001
-------------------------
Diffstat (limited to 'hadrian/src')
-rw-r--r-- | hadrian/src/Flavour/Type.hs | 21 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/RunTest.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Development.hs | 4 | ||||
-rw-r--r-- | hadrian/src/Settings/Packages.hs | 10 |
4 files changed, 22 insertions, 15 deletions
diff --git a/hadrian/src/Flavour/Type.hs b/hadrian/src/Flavour/Type.hs index 7718d63d7f..60021268fa 100644 --- a/hadrian/src/Flavour/Type.hs +++ b/hadrian/src/Flavour/Type.hs @@ -18,9 +18,9 @@ data Flavour = Flavour { args :: Args, -- | Build these packages. packages :: Stage -> Action [Package], - -- | 'native', 'gmp', 'ffi'. + -- | Bignum backend: 'native', 'gmp', 'ffi', etc. bignumBackend :: String, - -- | Check selected backend against native backend + -- | Check selected bignum backend against native backend bignumCheck :: Bool, -- | Build libraries these ways. libraryWays :: Ways, @@ -29,15 +29,20 @@ data Flavour = Flavour { -- | Build dynamic GHC programs. dynamicGhcPrograms :: Action Bool, -- | Enable GHCi debugger. - ghciWithDebugger :: Stage -> Bool, + ghciWithDebugger :: Stage -- ^ stage of the /built/ compiler + -> Bool, -- | Build profiled GHC. - ghcProfiled :: Stage -> Bool, + ghcProfiled :: Stage -- ^ stage of the /built/ compiler + -> Bool, -- | Build GHC with the debug RTS. - ghcDebugged :: Stage -> Bool, - -- | Build GHC with debug assertions. - ghcDebugAssertions :: Stage -> Bool, + ghcDebugged :: Stage -- ^ stage of the /built/ compiler + -> Bool, + -- | Build GHC with debug assertions (-DDEBUG). + ghcDebugAssertions :: Stage -- ^ stage of the /built/ compiler + -> Bool, -- | Build the GHC executable against the threaded runtime system. - ghcThreaded :: Stage -> Bool, + ghcThreaded :: Stage -- ^ stage of the /built/ compiler + -> Bool, -- | Whether to build docs and which ones -- (haddocks, user manual, haddock manual) ghcDocs :: Action DocTargets } diff --git a/hadrian/src/Settings/Builders/RunTest.hs b/hadrian/src/Settings/Builders/RunTest.hs index e7935a3a33..f450a13f91 100644 --- a/hadrian/src/Settings/Builders/RunTest.hs +++ b/hadrian/src/Settings/Builders/RunTest.hs @@ -101,7 +101,7 @@ inTreeCompilerArgs stg = do unregisterised <- flag GhcUnregisterised tables_next_to_code <- flag TablesNextToCode withSMP <- targetSupportsSMP - debugAssertions <- ($ stg) . ghcDebugAssertions <$> flavour + debugAssertions <- ($ succStage stg) . ghcDebugAssertions <$> flavour profiled <- ghcProfiled <$> flavour <*> pure stg os <- setting HostOs diff --git a/hadrian/src/Settings/Flavours/Development.hs b/hadrian/src/Settings/Flavours/Development.hs index 715532e08a..ccc592cdc6 100644 --- a/hadrian/src/Settings/Flavours/Development.hs +++ b/hadrian/src/Settings/Flavours/Development.hs @@ -16,12 +16,12 @@ developmentFlavour ghcStage = defaultFlavour , libraryWays = pure $ Set.fromList [vanilla] , rtsWays = Set.fromList <$> mconcat [pure [vanilla, debug], targetSupportsThreadedRts ? pure [threaded, threadedDebug]] , dynamicGhcPrograms = return False - , ghcDebugAssertions = (>= Stage2) } + , ghcDebugAssertions = (== ghcStage) } where stageString Stage2 = "2" stageString Stage1 = "1" stageString Stage3 = "3" - stageString s = error ("developmentFlavour not support for " ++ show s) + stageString s = error ("developmentFlavour not supported for " ++ show s) developmentArgs :: Stage -> Args developmentArgs ghcStage = do diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs index e99e639eb8..587dae16e8 100644 --- a/hadrian/src/Settings/Packages.hs +++ b/hadrian/src/Settings/Packages.hs @@ -13,7 +13,6 @@ packageArgs :: Args packageArgs = do stage <- getStage path <- getBuildPath - root <- getBuildRoot compilerPath <- expr $ buildPath (vanillaContext stage compiler) let -- Do not bind the result to a Boolean: this forces the configure rule @@ -29,7 +28,10 @@ packageArgs = do cursesLibraryDir <- getSetting CursesLibDir ffiIncludeDir <- getSetting FfiIncludeDir ffiLibraryDir <- getSetting FfiLibDir - debugAssertions <- ghcDebugAssertions <$> expr flavour + debugAssertions <- ( `ghcDebugAssertions` (succStage stage) ) <$> expr flavour + -- NB: in this function, "stage" is the stage of the compiler we are + -- using to build, but ghcDebugAssertions wants the stage of the compiler + -- we are building, which we get using succStage. mconcat --------------------------------- base --------------------------------- @@ -52,7 +54,7 @@ packageArgs = do [ builder Alex ? arg "--latin1" , builder (Ghc CompileHs) ? mconcat - [ debugAssertions stage ? arg "-DDEBUG" + [ debugAssertions ? arg "-DDEBUG" , inputs ["**/GHC.hs", "**/GHC/Driver/Make.hs"] ? arg "-fprof-auto" , input "**/Parser.hs" ? @@ -83,7 +85,7 @@ packageArgs = do , package ghc ? mconcat [ builder Ghc ? mconcat [ arg ("-I" ++ compilerPath) - , debugAssertions stage ? arg "-DDEBUG" ] + , debugAssertions ? arg "-DDEBUG" ] , builder (Cabal Flags) ? mconcat [ andM [expr ghcWithInterpreter, notStage0] `cabalFlag` "internal-interpreter" |