[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: Add missing @since documentation for (!?) function
Marge Bot (@marge-bot)
gitlab at gitlab.haskell.org
Tue Dec 10 13:11:38 UTC 2024
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
11f81ba1 by Matthew Stephenson at 2024-12-10T08:11:01-05:00
Add missing @since documentation for (!?) function
- - - - -
ba18da37 by Ben Gamari at 2024-12-10T08:11:02-05:00
compiler: Don't attempt to TSAN-instrument SIMD operations
TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory
loads/stores. Don't attempt to instrument wider operations.
Fixes #25563.
- - - - -
cae23f8c by Ben Gamari at 2024-12-10T08:11:02-05:00
gitlab/ci: Don't clobber RUNTEST_ARGS
Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the
user's `RUNTEST_ARGS`. Fix this.
- - - - -
ac640423 by Ben Gamari at 2024-12-10T08:11:02-05:00
hadrian: Mitigate mktexfmt race
At least some versions of Texlive's `mktexfmt` utility cannot be invoked
concurrently in their initial run since they fail to handle failure of
`mkdir` due to racing. Specifically, we see
```
| Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866
| Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869
This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex)
restricted \write18 enabled.
kpathsea: Running mktexfmt xelatex.fmt
mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order):
mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf
mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes:
mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf
/usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937.
I can't find the format file `xelatex.fmt'!
```
That is two `mktexfmt` invocations (for the user's guide and haddock
builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and
raced. One of the two `mkdir`'s consequently failed, bringing down the
entire build.
We avoid this by ensuring that the first `xelatex` invocation is always
performed serially.
Fixes #25564.
- - - - -
15b659ac by Ben Gamari at 2024-12-10T08:11:03-05:00
rts/CheckUnload: Reset old_objects if unload is skipped
Previously `checkUnload` failed to reset `old_objects` when it decided
not to unload (e.g. due to heap profiling being enabled).
Fixes #24935.
- - - - -
5 changed files:
- .gitlab/ci.sh
- compiler/GHC/Cmm/ThreadSanitizer.hs
- hadrian/src/Rules/Documentation.hs
- libraries/ghc-internal/src/GHC/Internal/List.hs
- rts/CheckUnload.c
Changes:
=====================================
.gitlab/ci.sh
=====================================
@@ -954,7 +954,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/
fi
fi
if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then
- RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES"
+ RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" )
fi
if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi
=====================================
compiler/GHC/Cmm/ThreadSanitizer.hs
=====================================
@@ -209,8 +209,9 @@ tsanTarget fn formals args =
tsanStore :: Env
-> CmmType -> CmmExpr
-> Block CmmNode O O
-tsanStore env ty addr =
- mkUnsafeCall env ftarget [] [addr]
+tsanStore env ty addr
+ | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr]
+ | otherwise = emptyBlock
where
ftarget = tsanTarget fn [] [AddrHint]
w = widthInBytes (typeWidth ty)
@@ -219,8 +220,9 @@ tsanStore env ty addr =
tsanLoad :: Env
-> AlignmentSpec -> CmmType -> CmmExpr
-> Block CmmNode O O
-tsanLoad env align ty addr =
- mkUnsafeCall env ftarget [] [addr]
+tsanLoad env align ty addr
+ | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr]
+ | otherwise = emptyBlock
where
ftarget = tsanTarget fn [] [AddrHint]
w = widthInBytes (typeWidth ty)
=====================================
hadrian/src/Rules/Documentation.hs
=====================================
@@ -326,11 +326,27 @@ getPkgDocTarget root path =
-- | Build all PDF documentation
buildPdfDocumentation :: Rules ()
-buildPdfDocumentation = mapM_ buildSphinxPdf docPaths
+buildPdfDocumentation = do
+ -- Note [Avoiding mktexfmt race]
+ -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ -- We must ensure that the *first* xelatex invocation in the
+ -- build is performed serially (that is, not concurrently with
+ -- any other xelatex invocations) as mktexfmt does not handle
+ -- racing `mkdir` calls gracefully. However, we assume that
+ -- subsequent invocations are safe to run concurrently since the
+ -- initial call will have created the requisite directories (namely
+ -- $HOME/.texlive2020/texmf-var/web2c).
+ --
+ -- Fixes #25564.
+ let maxConcurrentReaders = 1000
+ xelatexMutex <- newResource "xelatex-mutex" maxConcurrentReaders
+ let rs = [(xelatexMutex, 1)]
+
+ mapM_ (buildSphinxPdf rs) docPaths
-- | Compile a Sphinx ReStructured Text package to LaTeX
-buildSphinxPdf :: FilePath -> Rules ()
-buildSphinxPdf path = do
+buildSphinxPdf :: [(Resource, Int)] -> FilePath -> Rules ()
+buildSphinxPdf rs path = do
root <- buildRootRules
root -/- pdfRoot -/- path <.> "pdf" %> \file -> do
@@ -344,7 +360,8 @@ buildSphinxPdf path = do
checkSphinxWarnings dir
-- LaTeX "fixed point"
- build $ target docContext Xelatex [path <.> "tex"] [dir]
+ -- See Note [Avoiding mktexfmt race] above.
+ buildWithResources rs $ target docContext Xelatex [path <.> "tex"] [dir]
build $ target docContext Xelatex [path <.> "tex"] [dir]
build $ target docContext Xelatex [path <.> "tex"] [dir]
build $ target docContext Makeindex [path <.> "idx"] [dir]
=====================================
libraries/ghc-internal/src/GHC/Internal/List.hs
=====================================
@@ -1643,6 +1643,8 @@ xs !! n
--
-- WARNING: This function takes linear time in the index.
--
+-- @since base-4.19.0.0
+--
-- ==== __Examples__
--
-- >>> ['a', 'b', 'c'] !? 0
=====================================
rts/CheckUnload.c
=====================================
@@ -467,48 +467,44 @@ bool prepareUnloadCheck(void)
void checkUnload(void)
{
- if (global_s_indices == NULL) {
- return;
- } else if (!safeToUnload()) {
- return;
- }
-
// At this point we've marked all dynamically loaded static objects
// (including their dependencies) during GC, but not the root set of object
// code (loaded_objects). Mark the roots first, then unload any unmarked
// objects.
- OCSectionIndices *s_indices = global_s_indices;
- ASSERT(s_indices->sorted);
+ if (global_s_indices != NULL && safeToUnload()) {
+ OCSectionIndices *s_indices = global_s_indices;
+ ASSERT(s_indices->sorted);
- // Mark roots
- for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) {
- markObjectLive(NULL, (W_)oc, NULL);
- }
+ // Mark roots
+ for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) {
+ markObjectLive(NULL, (W_)oc, NULL);
+ }
- // Free unmarked objects
- ObjectCode *next = NULL;
- for (ObjectCode *oc = old_objects; oc != NULL; oc = next) {
- next = oc->next;
- ASSERT(oc->status == OBJECT_UNLOADED);
-
- // Symbols should be removed by unloadObj_.
- // NB (osa): If this assertion doesn't hold then freeObjectCode below
- // will corrupt symhash as keys of that table live in ObjectCodes. If
- // you see a segfault in a hash table operation in linker (in non-debug
- // RTS) then it's probably because this assertion did not hold.
- ASSERT(oc->symbols == NULL);
-
- if (oc->unloadable) {
- removeOCSectionIndices(s_indices, oc);
- freeObjectCode(oc);
- n_unloaded_objects -= 1;
- } else {
- // If we don't have enough information to
- // accurately determine the reachability of
- // the object then hold onto it.
- oc->next = objects;
- objects = oc;
+ // Free unmarked objects
+ ObjectCode *next = NULL;
+ for (ObjectCode *oc = old_objects; oc != NULL; oc = next) {
+ next = oc->next;
+ ASSERT(oc->status == OBJECT_UNLOADED);
+
+ // Symbols should be removed by unloadObj_.
+ // NB (osa): If this assertion doesn't hold then freeObjectCode below
+ // will corrupt symhash as keys of that table live in ObjectCodes. If
+ // you see a segfault in a hash table operation in linker (in non-debug
+ // RTS) then it's probably because this assertion did not hold.
+ ASSERT(oc->symbols == NULL);
+
+ if (oc->unloadable) {
+ removeOCSectionIndices(s_indices, oc);
+ freeObjectCode(oc);
+ n_unloaded_objects -= 1;
+ } else {
+ // If we don't have enough information to
+ // accurately determine the reachability of
+ // the object then hold onto it.
+ oc->next = objects;
+ objects = oc;
+ }
}
}
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b4cecf1eef59f31a65d329ae9cc939c9dec5ca9b...15b659acccd1321946cd2ead3c7b839f4fa06813
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b4cecf1eef59f31a65d329ae9cc939c9dec5ca9b...15b659acccd1321946cd2ead3c7b839f4fa06813
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20241210/f554edba/attachment-0001.html>
More information about the ghc-commits
mailing list