The toolchain: musl + llvm job in .github/workflows/ci-linux.yml reports success while its mcpp self-build with llvm@20.1.7 fails.
Observation
On main (run 36308923378, commit b439fd9), the step "Toolchain: LLVM — build mcpp" logs error: build failed and two failed edges:
FAILED: obj/xlings.m.o
FAILED: pcm.cache/mcpp.xlings.pcm
The step is "$MCPP" build 2>&1 | tee build.log; grep -q "Resolved llvm@20.1.7" build.log. The pipeline's status is grep's, so the step asserts only that the toolchain was resolved, never that the build succeeded. The same holds on the 2026.9.28.1 branch (#727).
Cause of the build failure
Under import std; with libc++ 20, a range-based for over std::filesystem::directory_iterator (or recursive_directory_iterator) fails: the iterator's comparison with another iterator is not visible through the module, and only the default_sentinel_t overloads are found.
src/xlings/xlings.cppm:1006:24: error: invalid operands to binary expression ('directory_iterator' and 'directory_iterator')
modules/buildmcpp/src/tool_store.cppm:215:15: error: invalid operands to binary expression ('fs::recursive_directory_iterator' and 'fs::recursive_directory_iterator')
The same sources build with llvm@22.1.8.
Consequences
Proposed
- The step fails on the build's own exit status (
set -o pipefail, or no pipe).
- The step builds with the LLVM row mcpp documents as its own development toolchain (22.1.8), or mcpp's module units avoid the construct libc++ 20 cannot compile; the first is the smaller change.
check_function_sizes.sh runs after that step, with xim:llvm-tools at the same version.
The
toolchain: musl + llvmjob in.github/workflows/ci-linux.ymlreports success while its mcpp self-build withllvm@20.1.7fails.Observation
On
main(run 36308923378, commit b439fd9), the step "Toolchain: LLVM — build mcpp" logserror: build failedand two failed edges:The step is
"$MCPP" build 2>&1 | tee build.log; grep -q "Resolved llvm@20.1.7" build.log. The pipeline's status isgrep's, so the step asserts only that the toolchain was resolved, never that the build succeeded. The same holds on the 2026.9.28.1 branch (#727).Cause of the build failure
Under
import std;with libc++ 20, a range-basedforoverstd::filesystem::directory_iterator(orrecursive_directory_iterator) fails: the iterator's comparison with another iterator is not visible through the module, and only thedefault_sentinel_toverloads are found.The same sources build with
llvm@22.1.8.Consequences
.github/tools/check_function_sizes.sh, clang-tidyreadability-function-size) needs a compile database from a successful clang build. It was wired after this step on 2026.9.28.1: eight reports (#717, #718, #720, #722-#726), one download progress, and an index floor that is a tip #727, crashed over the partial database, and was taken out again; it is run by hand until this is resolved.Proposed
set -o pipefail, or no pipe).check_function_sizes.shruns after that step, withxim:llvm-toolsat the same version.