Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
-
917ab8ff
by Oleg Grenrus at 2026-01-23T10:52:55-05:00
-
3f5e8d80
by Cheng Shao at 2026-01-23T10:53:37-05:00
-
57a339d9
by Cheng Shao at 2026-01-23T12:27:33-05:00
-
12aebc0c
by Simon Hengel at 2026-01-23T12:27:34-05:00
12 changed files:
- .gitlab/ci.sh
- docs/users_guide/exts/roles.rst
- hadrian/src/Context.hs
- hadrian/src/Settings/Builders/Configure.hs
- hadrian/src/Settings/Builders/Make.hs
- libraries/base/changelog.md
- libraries/base/src/Control/Concurrent.hs
- libraries/base/src/System/Timeout.hs
- testsuite/tests/interface-stability/base-exports.stdout
- testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
- testsuite/tests/interface-stability/base-exports.stdout-mingw32
- testsuite/tests/interface-stability/base-exports.stdout-ws-32
Changes:
| ... | ... | @@ -493,6 +493,11 @@ function fetch_perf_notes() { |
| 493 | 493 | }
|
| 494 | 494 | |
| 495 | 495 | function push_perf_notes() {
|
| 496 | + if [[ "${CI_COMMIT_BRANCH:-}" != "master" ]] && [[ ! "${CI_COMMIT_BRANCH:-}" =~ ghc-[0-9]+\.[0-9]+ ]]; then
|
|
| 497 | + info "Perf notes are only pushed on master/release branches"
|
|
| 498 | + return
|
|
| 499 | + fi
|
|
| 500 | + |
|
| 496 | 501 | if [[ -z "${TEST_ENV:-}" ]]; then
|
| 497 | 502 | return
|
| 498 | 503 | fi
|
| ... | ... | @@ -38,7 +38,7 @@ trouble. |
| 38 | 38 | The way to identify such situations is to have *roles* assigned to type
|
| 39 | 39 | variables of datatypes, classes, and type synonyms.
|
| 40 | 40 | |
| 41 | -Roles as implemented in GHC are a from a simplified version of the work
|
|
| 41 | +Roles as implemented in GHC are based on a simplified version of the work
|
|
| 42 | 42 | described in `Generative type abstraction and type-level
|
| 43 | 43 | computation <https://www.seas.upenn.edu/~sweirich/papers/popl163af-weirich.pdf>`__,
|
| 44 | 44 | published at POPL 2011.
|
| ... | ... | @@ -11,7 +11,7 @@ module Context ( |
| 11 | 11 | pkgLibraryFile,
|
| 12 | 12 | pkgConfFile, pkgStampFile, resourcePath, objectPath, contextPath, getContextPath, libPath, distDir,
|
| 13 | 13 | distDynDir,
|
| 14 | - haddockStatsFilesDir, ensureConfigured, autogenPath, rtsContext, rtsBuildPath, libffiBuildPath
|
|
| 14 | + haddockStatsFilesDir, ensureConfigured, autogenPath, rtsContext, rtsBuildPath
|
|
| 15 | 15 | ) where
|
| 16 | 16 | |
| 17 | 17 | import Base
|
| ... | ... | @@ -93,14 +93,6 @@ rtsContext stage = vanillaContext stage rts |
| 93 | 93 | rtsBuildPath :: Stage -> Action FilePath
|
| 94 | 94 | rtsBuildPath stage = buildPath (rtsContext stage)
|
| 95 | 95 | |
| 96 | --- | Build directory for in-tree 'libffi' library.
|
|
| 97 | -libffiBuildPath :: Stage -> Action FilePath
|
|
| 98 | -libffiBuildPath stage = buildPath $ Context
|
|
| 99 | - stage
|
|
| 100 | - libffi
|
|
| 101 | - (error "libffiBuildPath: way not set.")
|
|
| 102 | - (error "libffiBuildPath: inplace not set.")
|
|
| 103 | - |
|
| 104 | 96 | pkgFileName :: Context -> Package -> String -> String -> Action FilePath
|
| 105 | 97 | pkgFileName context package prefix suffix = do
|
| 106 | 98 | pid <- pkgUnitId (stage context) package
|
| ... | ... | @@ -8,8 +8,7 @@ configureBuilderArgs :: Args |
| 8 | 8 | configureBuilderArgs = do
|
| 9 | 9 | stage <- getStage
|
| 10 | 10 | gmpPath <- expr (gmpBuildPath stage)
|
| 11 | - libffiPath <- expr (libffiBuildPath stage)
|
|
| 12 | - mconcat [ builder (Configure gmpPath) ? do
|
|
| 11 | + builder (Configure gmpPath) ? do
|
|
| 13 | 12 | targetArch <- queryTarget queryArch
|
| 14 | 13 | targetPlatform <- queryTarget targetPlatformTriple
|
| 15 | 14 | buildPlatform <- queryBuild targetPlatformTriple
|
| ... | ... | @@ -28,16 +27,3 @@ configureBuilderArgs = do |
| 28 | 27 | -- option.
|
| 29 | 28 | <> [ "--enable-alloca=malloc-notreentrant" | targetArch == "wasm32" ]
|
| 30 | 29 | <> [ "--with-pic=yes" ] |
| 31 | - |
|
| 32 | - , builder (Configure libffiPath) ? do
|
|
| 33 | - top <- expr topDirectory
|
|
| 34 | - targetPlatform <- queryTarget targetPlatformTriple
|
|
| 35 | - way <- getWay
|
|
| 36 | - pure [ "--prefix=" ++ top -/- libffiPath -/- "inst"
|
|
| 37 | - , "--libdir=" ++ top -/- libffiPath -/- "inst/lib"
|
|
| 38 | - , "--enable-static=yes"
|
|
| 39 | - , "--enable-shared="
|
|
| 40 | - ++ (if wayUnit Dynamic way
|
|
| 41 | - then "yes"
|
|
| 42 | - else "no")
|
|
| 43 | - , "--host=" ++ targetPlatform ] ] |
| ... | ... | @@ -12,12 +12,8 @@ makeBuilderArgs = do |
| 12 | 12 | threads <- shakeThreads <$> expr getShakeOptions
|
| 13 | 13 | stage <- getStage
|
| 14 | 14 | gmpPath <- expr (gmpBuildPath stage)
|
| 15 | - libffiPaths <- forM [Stage1, Stage2, Stage3 ] $ \s -> expr (libffiBuildPath s)
|
|
| 16 | 15 | let t = show $ max 4 (threads - 2) -- Don't use all Shake's threads
|
| 17 | - mconcat $
|
|
| 18 | - (builder (Make gmpPath ) ? pure ["MAKEFLAGS=-j" ++ t]) :
|
|
| 19 | - [ builder (Make libffiPath) ? pure ["MAKEFLAGS=-j" ++ t, "install"]
|
|
| 20 | - | libffiPath <- libffiPaths ]
|
|
| 16 | + builder (Make gmpPath) ? pure ["MAKEFLAGS=-j" ++ t]
|
|
| 21 | 17 | |
| 22 | 18 | validateBuilderArgs :: Args
|
| 23 | 19 | validateBuilderArgs = builder (Make "testsuite/tests") ? do
|
| ... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 | * `GHC.Conc.throwSTM` and `GHC.Conc.Sync.throwSTM` now carry a `HasCallStack` constraint and attach a `Backtrace` annotation to the thrown exception. ([GHC #25365](https://gitlab.haskell.org/ghc/ghc/-/issues/25365))
|
| 23 | 23 | * `GHC.Conc.catchSTM` and `GHC.Conc.Sync.catchSTM` now attach `WhileHandling` annotation to exceptions thrown from the handler. ([GHC #25365](https://gitlab.haskell.org/ghc/ghc/-/issues/25365))
|
| 24 | 24 | * Remove `GHC.JS.Prim.Internal.Build`, as per [CLC #329](https://github.com/haskell/core-libraries-committee/issues/329)
|
| 25 | + * Export `labelThread` from `Control.Concurrent`.([CLC proposal #376](https://github.com/haskell/core-libraries-committee/issues/376))
|
|
| 25 | 26 | |
| 26 | 27 | ## 4.22.0.0 *TBA*
|
| 27 | 28 | * Shipped with GHC 9.14.1
|
| ... | ... | @@ -82,6 +82,9 @@ module Control.Concurrent ( |
| 82 | 82 | -- * Weak references to ThreadIds
|
| 83 | 83 | mkWeakThreadId,
|
| 84 | 84 | |
| 85 | + -- * Thread debugging
|
|
| 86 | + labelThread,
|
|
| 87 | + |
|
| 85 | 88 | -- * GHC's implementation of concurrency
|
| 86 | 89 | |
| 87 | 90 | -- |This section describes features specific to GHC's
|
| ... | ... | @@ -29,7 +29,6 @@ import GHC.Internal.Control.Exception (Exception(..), handleJust, bracket, |
| 29 | 29 | asyncExceptionToException,
|
| 30 | 30 | asyncExceptionFromException)
|
| 31 | 31 | import GHC.Internal.Data.Unique (Unique, newUnique)
|
| 32 | -import GHC.Conc (labelThread)
|
|
| 33 | 32 | import Prelude
|
| 34 | 33 | |
| 35 | 34 | -- $setup
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|