#36036 build: Bump clang minimum supported version to 19
| Reviewability | Reviews | Agreement | Size | ||||
|---|---|---|---|---|---|---|---|
| #36036 build: Bump clang minimum supported version to 19 | Ready | 1 | Positive | 17 + 4 tests | |||
|
|
|
|
| |||
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:
| Reviewer | Type | Harm, request, or question | Status | Must be | Author replied | Quote |
|---|---|---|---|---|---|---|
| l0rinc (member) | suggestion, correctness | check if Ralph's objections are valid | answered · author replied that Ralph's nit is an unaddressed CI todo | answered | yes | 2026-10-20: 'please check if Ralph's objections are valid' |
| fanquake (member) | suggestion, scope | update vecdeque.cpp while here | open | answered | no | 2026-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
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