Files
bitcoin/test/sanitizer_suppressions/valgrind.supp
MarcoFalke fa70b9ebaa ci: Temporarily use clang in valgrind tasks
valgrind currently does not work on GCC -O2 compiled executables, which
contain std::optional use, due to an upstream bug. See
https://bugs.kde.org/show_bug.cgi?id=472329

One workaround could be to use -O1. However, that seems brittle, as
variantions of the bug were seen with -O1 as well.

So temporarily use clang in the valgrind CI tasks, because this also
allows to drop a false-positive suppression for:
-DCMAKE_CXX_FLAGS='-Wno-error=array-bounds'

Also, update the comment in contrib/valgrind.supp to mention the
background:

* GCC -O2 wasn't tested with the suppressions file, due to the mentioned
  bug.
* Clang-17 (or later) on aarch64 wasn't tested due to bug
  https://github.com/bitcoin/bitcoin/issues/29635 and the minimum
  supported clang version is clang-17 right now.
* GUI isn't tested, because it requires a debug build, see the prior
  commit.

This means the only tested config right now is the one mentioned in the
suppression file.
2026-03-18 10:27:44 +01:00

55 lines
1.6 KiB
Plaintext

# This valgrind suppressions file includes known Valgrind warnings in our
# dependencies that cannot be fixed in-tree.
#
# Example use:
# $ valgrind --suppressions=test/sanitizer_suppressions/valgrind.supp build/bin/test_bitcoin
# $ valgrind --suppressions=test/sanitizer_suppressions/valgrind.supp --leak-check=full \
# --show-leak-kinds=all build/bin/test_bitcoin
#
# To create suppressions for found issues, use the --gen-suppressions=all option:
# $ valgrind --suppressions=test/sanitizer_suppressions/valgrind.supp --leak-check=full \
# --show-leak-kinds=all --gen-suppressions=all --show-reachable=yes \
# --error-limit=no build/bin/test_bitcoin
#
# Note that suppressions may depend on OS and/or library versions.
# Tested on Debian Trixie system libs,
# * using clang (only x86_64, see https://bugs.kde.org/show_bug.cgi?id=485276),
# * and GCC (only -O1, see https://bugs.kde.org/show_bug.cgi?id=472329),
# without gui (because it only passes with a DEBUG=1 depends build).
{
Suppress leaks on shutdown
Memcheck:Leak
...
fun:_Z8ShutdownR11NodeContext
}
{
Suppress leveldb leak
Memcheck:Leak
match-leak-kinds: reachable
fun:_Znwm
...
fun:_ZN7leveldb6DBImpl14BackgroundCallEv
}
{
Suppress leveldb leak
Memcheck:Leak
fun:_Znwm
...
fun:GetCoin
}
{
Suppress LogInstance still reachable memory warning
Memcheck:Leak
match-leak-kinds: reachable
fun:_Znwm
fun:_Z11LogInstancev
}
{
Suppress BCLog::Logger::StartLogging() still reachable memory warning
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
...
fun:_ZN5BCLog6Logger12StartLoggingEv
}