#36036 build: Bump clang minimum supported version to 19

ReviewabilityReviewsAgreementSize
#36036 maflcko build: Bump clang minimum supported version to 19Ready1Positive17 + 4 tests
  • Bump the minimum supported Clang version to 19 across the build system and CI
  • Unblocks C++20 CTAD on alias templates and removes obsolete compiler workarounds
  • Ready for review
  • Support without stated objections to raising the minimum Clang version
  • Approval of the changes across updates (hebasto)
  • Concept approval noting switching compiler versions causes no issue (winterrdog)
  • Concept approval without stated reasons (l0rinc)
  • Open suggestion to update vecdeque.cpp while here (fanquake)
  • 17 lines added or modified outside tests
  • 4 lines added or modified in tests
  • 26 lines removed in total
  • 8 files, 3 commits
Build and CI#13 of 56
P2 · cleanup
  • P2 after comparing with the other PRs here (assessed alone as P3): Raised to P2 and moved up from 33: same consequence as the GCC-13 bump #36042 (compiler minimum transition) and the other half of the prerequisite for C++23 work in #36033
  • P3 because it is routine toolchain maintenance without an urgent deprecation deadline
  • Cleans up legacy compiler workarounds and enables modern C++20 features for developers
Reviewability: ReadyStalePaused
Agreement: StrongPositivePositive w/ caveatsNeutralMildDisputedBlockedCrickets
Reviews: current code-review ACKs, then (+stale ACKs) and -NACKs; greener = more ACKs.
Size: lines added or modified outside tests, then in tests; greener = smaller.

Goal

Bumps the minimum supported Clang compiler version from 17.0 to 19.0 across CMake checks, CI environments, and documentation. It replaces the CMake check for aggregate CTAD with a check for C++20 CTAD on alias templates, configures clang-format to use the latest standard, and removes an obsolete libc++ workaround in fuzz testing.

Problem: Supporting Clang versions below 19 blocks the use of C++20 Class Template Argument Deduction (CTAD) for alias templates and necessitates maintaining legacy compiler workarounds in the codebase.

Evidence of importance:

  • PR description: '(For this bump, only C++20 CTAD will become available.)'
  • PR description surveys distribution availability showing Clang >=19 is packaged in Debian Bookworm, Ubuntu Noble, CentOS Stream, FreeBSD, and OpenSUSE, or users can fall back to GCC.

Risk of a mistake: low (build, tests, docs). Incorrect feature checks or version bumps could prematurely break native builds on developer machines using older Clang installations.

Changed since the previous assessment: Added commit dropping an obsolete libc++-15/16 std::optional comparison workaround in src/test/fuzz/vecdeque.cpp and cleaned up redundant version wording in depends/README.md.

Reviewability

Ready

Nothing known that would invalidate a review now.

Waiting on (from the thread read):

  • author: response to fanquake's suggestion on updating vecdeque.cpp 2026-10-22

Agreement

Positive

support without stated reasons, no open objection (l0rinc, hebasto, hebasto, hebasto, hebasto, winterrdog)

Thread notes: Added winterrdog as a supporter after their Concept ACK confirming that the clang minimum bump to 19 will not cause issues for them.

Objections, suggestions, and questions:

ReviewerTypeHarm, request, or questionStatusMust beAuthor repliedQuote
l0rinc (member)suggestion, correctnesscheck if Ralph's objections are validanswered · author replied that Ralph's nit is an unaddressed CI todoansweredyes2026-10-20: 'please check if Ralph's objections are valid'
fanquake (member)suggestion, scopeupdate vecdeque.cpp while hereopenansweredno2026-10-22: 'Update https://github.com/bitcoin/bitcoin/blob/2034d3078ee1df99cdbfab738b1f2b54c30bd022/src/test/fuzz/vecdeque.cpp#L459 while here?'

Support:

  • l0rinc (member) (Concept ACK, 2026-10-20): (no reason given) [not substantive]
  • hebasto (member) (Concept ACK, 2026-10-20): (no reason given) [not substantive]
  • hebasto (member) (ACK, 2026-10-22): (no reason given) [not substantive]
  • hebasto (member) (ACK, 2026-10-22): (no reason given) [not substantive]
  • hebasto (member) (ACK, 2026-10-22): (no reason given) [not substantive]
  • winterrdog (contributor) (Concept ACK, 2026-10-27): can easily switch to clang 20 since they have it installed already [not substantive]

Participants:

  • hebasto (member, support, 4 statements 2026-10-20 to 2026-10-22): ACKed latest push after commit squashing
  • l0rinc (member, support, 1 statements 2026-10-20 to 2026-10-20): Concept ACK; asked to check Ralph's objections before full review
  • fanquake (member, question, 1 statements 2026-10-22 to 2026-10-22): asked if vecdeque.cpp should be updated while here
  • winterrdog (contributor, support, 1 statements 2026-10-27 to 2026-10-27): Concept ACK; confirmed switching to clang 20 is not a problem

Files

13 lines under test/bench/ci.

  • cmake/module/CheckCXXFeatures.cmake +8/-13
  • src/test/fuzz/vecdeque.cpp +1/-6
  • ci/test/00_setup_env_native_nowallet.sh +3/-3
  • doc/release-notes-36036.md +5/-0
  • .github/workflows/ci.yml +1/-1
  • depends/README.md +1/-1
  • doc/dependencies.md +1/-1
  • src/.clang-format +1/-1

Card

The short text the ranking pass compares across PRs.

Bumps the minimum supported Clang compiler version from 17.0 to 19.0 across CMake checks, CI environments, and documentation. This enables adoption of C++20 Class Template Argument Deduction (CTAD) on alias templates and removes an obsolete libc++-16 comparison workaround in fuzz testing. Developers compiling natively with Clang older than 19.0 will need to upgrade or switch to GCC.

Data

dossier JSON · extract JSON · model ledger, generated 2026-10-28T01:23, confidence high, input hash b2769620972954b9
thread read through 2026-10-27 (12 statements), head faa98fadbc
labels: Build system

Categories

Build and CI

P2 · cleanup (assessed alone as P3; Raised to P2 and moved up from 33: same consequence as the GCC-13 bump #36042 (compiler minimum transition) and the other half of the prerequisite for C++23 work in #36033)

Bumping the minimum Clang version to 19 allows using C++20 CTAD for alias templates and drops obsolete compiler workarounds. While a routine toolchain maintenance update without an imminent upstream deprecation deadline, it cleans up workarounds across the codebase.

Membership: Matches the 'Build system' label and directly modifies CMake compiler feature checks, CI configuration, and compiler version documentation.

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