This should fix Phobos CI, which expects such prerequisites provisioning
to happen in DMD's ci/cirrusci.sh. Because this YAML addition hasn't been
duplicated in Phobos, Phobos CI is still using the default make on macOS,
which is too old and doesn't support the newly required `private` modifier.
macOS-11 is going to be removed at the end of the month and undergoing brownouts.
We want to migrate away from it as fast as possible, but we only upgrade to macOS-12.
It's slow and prone to sporadic failures (possibly caused by a missing
initial `brew update` invocation), and seems superfluous for the
used macOS 12+13 GitHub Actions images, according to the CI logs.
* ci/run.sh: Avoid deprecated Makefiles
* ci/run.sh: Streamline OS_NAME from `darwin` to `osx` on macOS
As DMD uses `osx` as OS in most other places, including the
`generated/osx/release/64` output dir, which is currently wrong
in run.sh's `build_path` and leads to CI failures on macOS.
* GHA: Disable `-debug` for DMD unittests with old host compilers
* GHA: Work around linker errors with -g on macOS 13
See https://issues.dlang.org/show_bug.cgi?id=23517.
compiler/src/posix.mak sets it to 10.9, compiler/test/Makefile to 11.
* rt.minfo: Avoid calling realloc with size 0
This is not portable, and memcheck complains about this.
* Add C Valgrind API
Add the BSD-licensed C header files which provide the API for
controlling Valgrind from within programs executed under it.
The files are from Valgrind v3.21.0.
* Add some D bindings for the Valgrind C API
We will use these in the GC implementation to tell Valgrind which
memory operations are OK or not.
* Silence Valgrind warnings caused by GC marking
Allow the conservative GC to scan memory, whether it has been
initialized by the application or not.
* Add test suite for Valgrind
* Unify VALGRIND with MEMSTOMP
The two share the same goal: mark memory which should not be accessed
any more.
* Mask "invalid" access to free lists
The GC stores free lists in the cells of the objects on the list.
We would like to allow the GC to work with these lists, but still
raise a warning if application code attempts to access them.
* Distinguish between writable and unwritable invalidation
Freshly allocated memory should be writable but not readable.
Explicitly deallocated or GC-ed memory should be neither readable or
writable.
* Add use-after-free test
* Invalidate freshly-allocated memory
* Integrate VALGRIND with SENTINEL
* Fix reporting of arrays of structs with destructors
* Re-invalidate reused blocks during malloc/calloc
* Add Changelog entry
* .pre-commit-config.yaml: Exempt vendored files
* etc.valgrind.valgrind: Propagate return values of the vbits functions
* etc.valgrind.valgrind: Add documentation for functions
Copy/adapt the documentation in memcheck.h.
* druntime/test/valgrind: Add no_use_after_gc test
* ci/cirrusci.sh: Install Valgrind on Linux
Run the Druntime Valgrind integration tests.
libc6-dbg is needed to allow Valgrind to redirect certain functions.
* etc.valgrind.valgrind: Add @nogc
Although the GC is the primary user, this is not a restriction of
these Valgrind API wrappers.
* druntime/test/valgrind: Fix no_use_after_gc test with -release
Trick the optimizer to pretend we're doing something with the result
of those invalid memory accesses.
* ci(cirrusci): add llvm package
Signed-off-by: Luís Ferreira <contact@lsferreira.net>
* feat(test): Add DWARF_VERIFY flag on DWARF tests
DWARF readers and debuggers tend to ignore errors and try to proceed as much as
possible. objdump dumping the tags, doesn't necessarily mean that the DWARF
abbreviations are correct -- e.g. the reader could halt in the end, with the
last abbreviation, in which the output test can't verify. Introducing a DWARF
verifier is a good way to check conformancy with the standard.
Signed-off-by: Luís Ferreira <contact@lsferreira.net>
`coverage.sh` used to explicitly specify the commit associated with the
coverage report as a workaround to an issue when uploading without
`CODECOV_TOKEN` from a public Azure pipeline[1]. The workaround is not
required anymore as the uploads now succeeds with the default settings.
The upload to CodeCov probably broke because `$BUILD_SOURCEVERSION` now
points to a local merge commit (PR branch => target branch).
[1] https://github.com/codecov/codecov-bash/issues/287
The CodeCov script needs to be run with a `--login` shell s.t. it has
access to `shasum`,... .
(The previous draft PR was merged with an allowed failure...)
The currently used bash uploader is deprecated and will be removed in
the future[1]. This commit replaces the existing setup with the new
uploader for all currently supported platforms as proposed in [2].
Additional notes:
- FreeBSD support isn't supported yet and keeps using the old uploader
- Moved the new implementation into a dedicated file `source`d by
all coverage CI's (instead of changing each individual configuration)
[1] https://about.codecov.io/blog/codecov-uploader-deprecation-plan
[2] https://about.codecov.io/blog/introducing-codecovs-new-uploader