#36167 [RFC] Enable `-Wunused`

full analysis

https://github.com/bitcoin/bitcoin/pull/36167 · fanquake · +594/-577 in 168 files, 7 commits · labels: CI failed · draft

Goal

  • Catch dead code, unused variables, and missed calls automatically during CI builds
  • Spare developers and maintainers from manual audits and ad-hoc dead code cleanups

This PR enables `-Wunused` and related compiler warning flags in CMake to catch unused and dead code in CI. It silences existing warnings across 168 files by removing unused parameter names, adding `[[maybe_unused]]`, or marking variables `inline constexpr`. Several commits modify vendored subtrees (minisketch, libmultiprocess, leveldb, crc32c) with temporary `[[nomerge]]` commits.

Problem: Unused variables, forgotten dead code, and functions that fail to call intended helpers (such as #36137) can slip into the codebase without compiler warnings enabled. Developers and maintainers currently have to rely on manual audits and ad-hoc dead code cleanup PRs.

Category: Build and CI (#38 of 55)

P3 · cleanup

  • P3 because compiler warnings for dead code provide developer hygiene rather than fix active build bugs
  • It prevents subtle mistakes like forgotten calls, but remains deferrable work

Enabling compiler warnings to detect dead code and unused declarations in CI prevents mistakes like forgotten function calls (#36137), but it is general developer hygiene and deferrable compared to build breakages or release integrity issues.

Membership: Modifies CMakeLists.txt to add compiler warning flags (-Wunused and friends) to warning interfaces.

Factors: security/stability 0, bug 1, performance 0, user value 0, leverage 1

Reviewability: Stale: CI failing

  • Not ready for full review because CI is failing with a compiler error
  • Marked RFC with temporary commits requiring upstream subtree changes first

CI is failing on a compiler error (`BCLog::RATELIMIT_MAX_BYTES defined but not used [-Werror=unused-const-variable=]`). Additionally, the PR is marked RFC/Draft and contains `[[nomerge]]` commits that depend on upstream subtree repositories.

Author status: active

Open concerns:

  • maflcko suggested separating unused parameters from the rest, keeping `-Wno-unused-parameter` initially, and enabling finer-grained flags like `-Wunused-const-variable=2` first to avoid massive tree-wide churn.

Resolved concerns:

  • fanquake split the `-Wunused-const-variable` flag into separate PR #36275.

Agreement: Neutral

  • Receptive to enabling the warnings but suggested splitting them up (maflcko)
  • Suggested isolating fine-grained flags first to avoid massive tree-wide churn (maflcko)
  • Author split one warning flag out into a dedicated PR in response (fanquake)

maflcko suggested splitting finer-grained warning flags from tree-wide parameter cleanups; author split #36275

Reviewer feedback was generally receptive ('Nice') but suggested splitting the work so individual warning flags land without requiring massive parameter modifications across the entire project. The author split out #36275 in response.

  • maflcko suggested: 'Maybe be split up into a separate pull from the unused parameter warnings... leave the -Wno-unused-parameter as-is for now?'
  • fanquake replied: 'Split a portion out into #36275.'

Review verdicts (DrahtBot): 0

Files

116 lines under test/bench/ci.

  • src/rpc/blockchain.cpp +25/-25
  • src/wallet/scriptpubkeyman.h +18/-18
  • src/wallet/walletdb.cpp +16/-16
  • src/memusage.h +15/-15
  • src/ipc/libmultiprocess/include/mp/type-struct.h +14/-14
  • src/wallet/rpc/addresses.cpp +14/-14
  • src/rpc/net.cpp +13/-13
  • src/rpc/rawtransaction.cpp +13/-13
  • src/ipc/libmultiprocess/include/mp/type-number.h +12/-12
  • src/kernel/bitcoinkernel_wrapper.h +12/-12
  • src/script/descriptor.cpp +12/-12
  • src/script/signingprovider.h +12/-12
  • src/rpc/mempool.cpp +11/-11
  • src/wallet/rpc/wallet.cpp +11/-11
  • src/script/sign.cpp +10/-10
  • src/validationinterface.h +9/-9
  • src/wallet/rpc/transactions.cpp +9/-9
  • src/addresstype.cpp +8/-8
  • src/leveldb/db/dbformat.h +8/-8
  • src/rpc/mining.cpp +8/-8
  • src/kernel/notifications_interface.h +7/-7
  • src/rpc/node.cpp +7/-7
  • src/wallet/rpc/spend.cpp +7/-7
  • src/wallet/test/walletload_tests.cpp +7/-7
  • src/ipc/capnp/common-types.h +6/-6
  • src/ipc/libmultiprocess/test/mp/test/foo-types.h +6/-6
  • src/test/util/net.cpp +6/-6
  • src/wallet/rpc/backup.cpp +6/-6
  • src/wallet/rpc/coins.cpp +6/-6
  • src/interfaces/chain.h +5/-5
  • src/ipc/libmultiprocess/include/mp/proxy-types.h +5/-5
  • src/ipc/libmultiprocess/include/mp/type-interface.h +5/-5
  • src/leveldb/helpers/memenv/memenv.cc +5/-5
  • src/logging.h +5/-5
  • src/rpc/util.cpp +5/-5
  • src/sync.h +5/-5
  • src/test/kernel/test_kernel.cpp +5/-5
  • src/wallet/scriptpubkeyman.cpp +5/-5
  • CMakeLists.txt +2/-7
  • src/bitcoin-cli.cpp +4/-4
  • src/index/base.h +4/-4
  • src/policy/fees/mempool_estimator.h +4/-4
  • src/qt/rpcconsole.cpp +4/-4
  • src/rpc/server.cpp +4/-4
  • src/script/interpreter.h +4/-4
  • src/serialize.h +4/-4
  • src/test/fuzz/signature_checker.cpp +4/-4
  • src/test/pcp_tests.cpp +4/-4
  • src/test/validation_chainstatemanager_tests.cpp +4/-4
  • src/wallet/rpc/encrypt.cpp +4/-4
  • src/wallet/wallet.cpp +4/-4
  • src/bitcoin-chainstate.cpp +3/-3
  • src/ipc/libmultiprocess/include/mp/type-message.h +3/-3
  • src/leveldb/db/log_format.h +3/-3
  • src/leveldb/db/version_set.cc +3/-3
  • src/net_processing.cpp +3/-3
  • src/node/interfaces.cpp +3/-3
  • src/qt/bitcoingui.cpp +3/-3
  • src/qt/recentrequeststablemodel.cpp +6/-0
  • src/test/fuzz/util/net.cpp +3/-3
  • src/wallet/migrate.h +3/-3
  • src/wallet/transaction.h +3/-3
  • src/minisketch/src/fields/clmul_1byte.cpp +3/-2
  • src/minisketch/src/fields/clmul_2bytes.cpp +3/-2
  • src/minisketch/src/fields/clmul_3bytes.cpp +3/-2
  • src/minisketch/src/fields/clmul_4bytes.cpp +3/-2
  • src/minisketch/src/fields/clmul_5bytes.cpp +3/-2
  • src/minisketch/src/fields/clmul_6bytes.cpp +3/-2
  • src/minisketch/src/fields/clmul_7bytes.cpp +3/-2
  • src/minisketch/src/fields/clmul_8bytes.cpp +3/-2
  • src/deploymentstatus.h +2/-2
  • src/dummywallet.cpp +2/-2
  • src/init.cpp +2/-2
  • src/ipc/libmultiprocess/include/mp/type-chrono.h +2/-2
  • src/ipc/libmultiprocess/include/mp/type-data.h +2/-2
  • src/ipc/libmultiprocess/include/mp/type-string.h +2/-2
  • src/ipc/libmultiprocess/include/mp/type-threadmap.h +2/-2
  • src/kernel/coinstats.cpp +2/-2
  • src/key_io.cpp +2/-2
  • src/leveldb/include/leveldb/db.h +2/-2
  • src/leveldb/table/format.h +2/-2
  • src/leveldb/table/table.cc +2/-2
  • src/noui.cpp +2/-2
  • src/qt/receivecoinsdialog.cpp +2/-2
  • src/qt/sendcoinsdialog.cpp +2/-2
  • src/random.cpp +2/-2
  • src/rpc/output_script.cpp +2/-2
  • src/rpc/signmessage.cpp +2/-2
  • src/rpc/txoutproof.cpp +2/-2
  • src/test/allocator_tests.cpp +2/-2
  • src/test/fuzz/package_eval.cpp +2/-2
  • src/test/httpserver_tests.cpp +2/-2
  • src/test/validation_block_tests.cpp +2/-2
  • src/txgraph.cpp +2/-2
  • src/zmq/zmqabstractnotifier.cpp +2/-2
  • src/minisketch/src/fields/generic_1byte.cpp +2/-1
  • src/minisketch/src/fields/generic_2bytes.cpp +2/-1
  • src/minisketch/src/fields/generic_3bytes.cpp +2/-1
  • src/minisketch/src/fields/generic_4bytes.cpp +2/-1
  • src/minisketch/src/fields/generic_5bytes.cpp +2/-1
  • src/minisketch/src/fields/generic_6bytes.cpp +2/-1
  • src/minisketch/src/fields/generic_7bytes.cpp +2/-1
  • src/minisketch/src/fields/generic_8bytes.cpp +2/-1
  • src/cluster_linearize.h +1/-1
  • src/core_memusage.h +1/-1
  • src/crc32c/src/crc32c_internal.h +1/-1
  • src/crypto/ripemd160.cpp +1/-1
  • src/crypto/sha1.cpp +1/-1
  • src/crypto/sha256.cpp +1/-1
  • src/init/bitcoin-qt.cpp +1/-1
  • src/init/bitcoin-wallet.cpp +1/-1
  • src/init/bitcoind.cpp +1/-1
  • src/interfaces/init.h +1/-1
  • src/interfaces/node.h +1/-1
  • src/ipc/libmultiprocess/include/mp/type-context.h +1/-1
  • src/ipc/libmultiprocess/include/mp/type-vector.h +1/-1
  • src/kernel/bitcoinkernel.cpp +1/-1
  • src/leveldb/db/db_impl.cc +1/-1
  • src/leveldb/db/table_cache.cc +1/-1
  • src/leveldb/table/iterator.cc +1/-1
  • src/leveldb/util/crc32c.h +1/-1
  • src/leveldb/util/env.cc +1/-1
  • src/leveldb/util/env_posix.cc +1/-1
  • src/leveldb/util/env_windows.cc +1/-1
  • src/minisketch/src/int_utils.h +1/-1
  • src/minisketch/src/lintrans.h +1/-1
  • src/netbase.cpp +1/-1
  • src/node/eviction.cpp +1/-1
  • src/qt/addresstablemodel.cpp +1/-1
  • src/qt/bitcoinamountfield.cpp +1/-1
  • src/qt/guiutil.cpp +1/-1
  • src/qt/notificator.cpp +1/-1
  • src/qt/optionsdialog.cpp +1/-1
  • src/qt/optionsmodel.cpp +1/-1
  • src/qt/overviewpage.cpp +1/-1
  • src/qt/psbtoperationsdialog.cpp +1/-1
  • src/qt/qvaluecombobox.cpp +1/-1
  • src/qt/splashscreen.cpp +1/-1
  • src/qt/test/rpcnestedtests.cpp +1/-1
  • src/qt/transactionrecord.cpp +1/-1
  • src/rpc/external_signer.cpp +1/-1
  • src/rpc/fees.cpp +1/-1
  • src/test/blockfilter_index_tests.cpp +1/-1
  • src/test/checkqueue_tests.cpp +1/-1
  • src/test/fuzz/crypto_diff_fuzz_chacha20.cpp +1/-1
  • src/test/fuzz/miniscript.cpp +1/-1
  • src/test/fuzz/partially_downloaded_block.cpp +1/-1
  • src/test/fuzz/tx_pool.cpp +1/-1
  • src/test/fuzz/util.cpp +1/-1
  • src/test/miniscript_tests.cpp +1/-1
  • src/test/net_tests.cpp +1/-1
  • src/test/span_tests.cpp +1/-1
  • src/test/util/chainstate.h +1/-1
  • src/test/util/setup_common.cpp +1/-1
  • src/test/validationinterface_tests.cpp +1/-1
  • src/torcontrol.cpp +1/-1
  • src/univalue/test/object.cpp +1/-1
  • src/univalue/test/unitester.cpp +1/-1
  • src/util/fs_helpers.cpp +1/-1
  • src/wallet/db.h +1/-1
  • src/wallet/migrate.cpp +1/-1
  • src/wallet/rpc/signmessage.cpp +1/-1
  • src/wallet/sqlite.cpp +1/-1
  • src/wallet/test/fuzz/fees.cpp +1/-1
  • src/wallet/test/util.h +1/-1
  • src/wallet/test/wallet_tests.cpp +1/-1
  • src/zmq/zmqnotificationinterface.cpp +1/-1
  • src/zmq/zmqrpc.cpp +1/-1

Card

This draft PR adds `-Wunused` compiler flags to CMake to catch dead and unused code in CI, fixing hundreds of unused parameters and variables across 168 files and several subtrees. While catching unused code helps prevent subtle bugs and developer confusion, this PR is in a draft state with failing CI and unresolved questions around whether to separate parameter warnings from variable warnings. It also carries temporary `[[nomerge]]` commits for changes that must land upstream in minisketch, libmultiprocess, and leveldb first.

Data

dossier JSON · extract JSON · model openrouter/google/gemini-3.8-flash, generated 2026-09-17T15:58, confidence high, input hash 3bd21a910fb530d4