Skip to content

Commit d8b4d19

Browse files
committed
Move the LLVM line to 23.1.3 and the macOS/Windows host defaults with it
23.1.3 is the first point release carrying the macOS 27 arm64e.x1 ld64.lld fix (llvm-project#222721, backported to release/23.x as ee66426) — the release #669 was blocked on. clang 23.1.0's MSVC STL std-module defect was fixed in 23.1.1 (#640, llvm-project#218152). - kKnownTargets: the 17 llvm rows move 22.1.8 -> 23.1.3; the gcc rows (x86_64-linux-musl, aarch64-linux-musl, x86_64-windows-gnu) stay put. - Host defaults: macOS and Windows-with-MSVC move to llvm@23.1.3, which also resolves the [toolchain] macos/windows deviations from their rows' defaults (SPEC-009 §12). Linux keeps gcc@16.1.0 by design — native glibc ABI, system libraries — now recorded as a §4.1 reason at the single pin site, together with the gcc@15.1.0-musl reason for non-x86_64 hosts. - The xcode-27 legs become unconditional normal legs: the 22.1.8-era known red (#669) cannot happen on 23.1.3, so a change can change the outcome there again; the known-red input retires. - Readers move with the tables: workflows, the macOS action, the CI tools, e2e fixtures, tests/matrix/expected.tsv, examples, and the user docs in both languages; check_default_toolchain_docs.py derives its phrases from the engine and needed no edits. - SPEC-009 v0.4 records the move (§4.1, §6.2, §8.3, §12). Closes #780. The xcode-27 legs going green closes #669.
1 parent de9c290 commit d8b4d19

91 files changed

Lines changed: 870 additions & 484 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.agents/docs/2026-10-07-llvm-2313-unified-default-cross-repo-design.md‎

Lines changed: 375 additions & 0 deletions
Large diffs are not rendered by default.

‎.agents/docs/README.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ superseded_by: 2026-09-07-....md # when status is superseded
1818
---
1919
```
2020

21-
327 records.
21+
328 records.
2222

2323
## By subject
2424

@@ -95,6 +95,10 @@ Records that declare one. Everything else is listed by date below.
9595
- [SDK toolchains, the payload/engine seam, and openkal across iOS, Android and Web](2026-09-11-sdk-toolchains-and-ios-local-verification.md) — landed
9696
- [Where a platform's knowledge belongs: iOS, Android and Web across the engine, the index and the plugins](2026-09-11-platform-targets-design-review.md) — active
9797

98+
### toolchain
99+
100+
- [LLVM 23.1.3 全平台统一默认:跨仓库联动方案(mcpp × xim-pkgindex)](2026-10-07-llvm-2313-unified-default-cross-repo-design.md) — active
101+
98102
### triage
99103

100104
- [Eight reports after 2026.9.27.1: what each one is, where it belongs, and one optimisation plan](2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md) — active
@@ -118,6 +122,7 @@ Records that declare one. Everything else is listed by date below.
118122

119123
### 2026-10
120124

125+
- [LLVM 23.1.3 全平台统一默认:跨仓库联动方案(mcpp × xim-pkgindex)](2026-10-07-llvm-2313-unified-default-cross-repo-design.md) — active
121126
- [2026.10.5.3 发布方案:32 位 x86 的架构词汇、资源编译器的识别与增量(#776 后续)](2026-10-06-windows-x86-arch-vocabulary-and-rc-follow-ups-design.md) — active
122127
- [下一个版本的发布方案:标准库模块、原生 MSVC LTO 与导出发现、共享库的链接配置、Windows 参数引号(#768 后续、#770、#771)](2026-10-05-std-module-pair-msvc-lto-and-export-discovery-design.md) — active
123128
- [`mcpp run` hands the terminal to the program, and the follow-ups of #761, #763 and #765 (#766)](2026-10-05-run-terminal-handoff-and-766-follow-ups-design.md) — landed

‎.github/actions/setup-macos-llvm/action.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ runs:
7272
# latest-first: test binaries now link the toolchain's own libc++
7373
# (A1 root fix in flags.cppm), so new llvm releases are
7474
# self-consistent — the macOS job is the proof for each new default.
75-
xlings install llvm -y || xlings install llvm@20.1.7 -y
75+
xlings install llvm@23.1.3 -y || xlings install llvm -y
7676
LLVM_ROOT=$(find "$HOME/.xlings" -path "*/xpkgs/xim-x-llvm/*/bin/clang++" | head -1 | xargs dirname | xargs dirname)
7777
ls "$LLVM_ROOT/bin/clang++"
7878
"$LLVM_ROOT/bin/clang++" --version

‎.github/tools/build_examples.sh‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ BUILD=(
3030
# Built here for one reason worth the cost: it is the only example whose
3131
# CPU-only configuration exercises `cfg(accelerator = "none")` and two rule
3232
# packages in one build program, and both of those are engine paths that a
33-
# description cannot cover. Its `[toolchain] default = "llvm@22.1.8"` means
33+
# description cannot cover. Its `[toolchain] default = "llvm@23.1.3"` means
3434
# this job installs an LLVM payload it otherwise would not -- the CUDA leg
3535
# takes the clang route, because the nvcc route on the 12.9 line is refused
3636
# by nvcc's own front end and the 13.x line raises the driver floor to r580.

‎.github/tools/check_function_sizes.sh‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@
2828
# WHAT THIS NEEDS
2929
#
3030
# A compile database that names BMIs explicitly (-fmodule-file=...), which
31-
# only a build actually produces: `mcpp build --toolchain llvm@22.1.8` writes
31+
# only a build actually produces: `mcpp build --toolchain llvm@23.1.3` writes
3232
# compile_commands.json at the project root. This script does not build it:
3333
# the caller runs that build first. check_file_lengths.sh needs no such
3434
# division because it reads the tree.
3535
#
3636
# IN CI SINCE 2026.9.28.2 (#729). ci-linux.yml's "toolchain: musl + llvm" job
37-
# builds mcpp with llvm@22.1.8 -- failing on the build's own status, which it
37+
# builds mcpp with llvm@23.1.3 -- failing on the build's own status, which it
3838
# did not do while it built with llvm@20.1.7 and read only the resolution line
3939
# -- and runs this script after it, over the compile database that build
40-
# writes. By hand: `mcpp build --toolchain llvm@22.1.8`, then this script.
40+
# writes. By hand: `mcpp build --toolchain llvm@23.1.3`, then this script.
4141
#
4242
# clang-tidy itself is not part of the plain xim:llvm payload mcpp resolves
4343
# for `--toolchain llvm@...` (measured: xim-x-llvm/22.1.8/bin has clang,
@@ -67,7 +67,7 @@ FAIL: $CDB does not exist.
6767
This check reads clang-tidy's own function boundaries, which needs a
6868
compile database that names every imported module's BMI explicitly.
6969
Produce one first:
70-
mcpp build --toolchain llvm@22.1.8
70+
mcpp build --toolchain llvm@23.1.3
7171
(any installed LLVM row works; the database is written at the project
7272
root regardless of the row's exact version).
7373
EOF

‎.github/tools/check_unicode_paths.sh‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ check_bytes() {
6262
}
6363

6464
rows=(
65-
'llvm|[toolchain]\nwindows = "llvm@20.1.7"|'
65+
'llvm|[toolchain]\nwindows = "llvm@23.1.3"|'
6666
'msvc|[toolchain]\nwindows = "msvc@system"|'
6767
'mingw|[toolchain]\ndefault = "gcc@16.1.0"|--target x86_64-windows-gnu'
6868
)
@@ -97,7 +97,7 @@ done
9797
# and the header found at the directory the program printed.
9898
dir="$ROOT/$CJK/buildprogram"
9999
mkdir -p "$dir/src" "$dir/inc"
100-
printf '[package]\nname = "unicodebp"\nversion = "0.1.0"\n\n[toolchain]\nwindows = "llvm@20.1.7"\n' > "$dir/mcpp.toml"
100+
printf '[package]\nname = "unicodebp"\nversion = "0.1.0"\n\n[toolchain]\nwindows = "llvm@23.1.3"\n' > "$dir/mcpp.toml"
101101
printf '#define UNICODE_BP 42\n' > "$dir/inc/unicode_bp.h"
102102
cat > "$dir/build.mcpp" <<'EOF'
103103
#include <cstdio>

‎.github/tools/check_workflow_assertions.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
77
#729: the step "Toolchain: LLVM -- build mcpp" ran
88
9-
"$MCPP" build 2>&1 | tee build.log; grep -q "Resolved llvm@20.1.7" build.log
9+
"$MCPP" build 2>&1 | tee build.log; grep -q "Resolved llvm@23.1.3" build.log
1010
1111
A pipeline's status is its last command's. Under GitHub's default shell for a
1212
`run:` block with no `shell:` key (`bash -e {0}`, no pipefail) the build's

‎.github/workflows/bootstrap-macos.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
4242
- name: Install LLVM + xmake
4343
run: |
44-
xlings install llvm -y || xlings install llvm@20.1.7 -y
44+
xlings install llvm@23.1.3 -y || xlings install llvm -y
4545
brew install xmake
4646
LLVM_ROOT=$(find "$HOME/.xlings" -path "*/xpkgs/xim-x-llvm/*/bin/clang++" | head -1 | xargs dirname | xargs dirname)
4747
echo "LLVM_ROOT=$LLVM_ROOT" >> "$GITHUB_ENV"

‎.github/workflows/ci-fresh-install.yml‎

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ concurrency:
5959

6060
jobs:
6161
# ──────────────────────────────────────────────────────────────────
62-
# Linux: gcc@16.1.0, musl-gcc@16.1.0, llvm@20.1.7
62+
# Linux: gcc@16.1.0, musl-gcc@16.1.0, llvm@23.1.3
6363
# ──────────────────────────────────────────────────────────────────
6464
# A4: post-release runs race the xim-pkgindex bump (a PR a maintainer
6565
# merges asynchronously) — the 0.0.85 fresh-install failed with
@@ -226,16 +226,16 @@ jobs:
226226
227227
- name: "LLVM: mcpp new → run"
228228
run: |
229-
mcpp toolchain install llvm 20.1.7
230-
mcpp toolchain default llvm@20.1.7
229+
mcpp toolchain install llvm 23.1.3
230+
mcpp toolchain default llvm@23.1.3
231231
cd "$(mktemp -d)"
232232
mcpp new hello_llvm
233233
cd hello_llvm
234234
mcpp run
235235
236236
- name: "LLVM: build mcpp"
237237
run: |
238-
mcpp toolchain default llvm@20.1.7
238+
mcpp toolchain default llvm@23.1.3
239239
mcpp clean
240240
mcpp run
241241
@@ -356,11 +356,11 @@ jobs:
356356
esac
357357
358358
# ──────────────────────────────────────────────────────────────────
359-
# macOS: llvm@20.1.7
359+
# macOS: llvm@23.1.3
360360
# ──────────────────────────────────────────────────────────────────
361361
macos-fresh:
362362
needs: [wait-index]
363-
name: macOS fresh install (${{ matrix.image }}${{ matrix.known_red != '' && format(', known red {0}', matrix.known_red) || '' }})
363+
name: macOS fresh install (${{ matrix.image }})
364364
if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
365365
# Two images, the two ends of the supported range.
366366
#
@@ -379,16 +379,12 @@ jobs:
379379
matrix:
380380
include:
381381
- image: macos-14
382-
known_red: ''
383382
- image: xcode-27
384-
known_red: '#669'
385383
runs-on: ${{ matrix.image }}
386-
# KNOWN RED, MACHINE-READABLY (the 2026-09-28 design, WS7). A leg whose
387-
# failure has a tracked external cause carries that issue in `known_red`:
388-
# the leg may fail without failing the workflow, its own result and log
389-
# stay visible, and .github/tools/check_workflow_assertions.py requires
390-
# the issue to be open. The leg leaves the list when #669 closes.
391-
continue-on-error: ${{ matrix.known_red != '' }}
384+
# While the line was on LLVM 22.1.8 the xcode-27 leg was known red (#669,
385+
# the arm64e.x1 .tbd stubs, continue-on-error per the 2026-09-28 WS7
386+
# design). The 23.1.3 line move removed the cause, so both images are
387+
# plain required legs again.
392388
timeout-minutes: 30
393389
env:
394390
# The one derived value (see the header comment): every install job names
@@ -488,7 +484,7 @@ jobs:
488484
# channel healthy the entire time. So the trust gate itself is asserted
489485
# from BOTH sides: refused before `brew trust`, accepted after.
490486
macos-brew-fresh:
491-
name: macOS fresh install (Homebrew, ${{ matrix.image }}${{ matrix.known_red != '' && format(', known red {0}', matrix.known_red) || '' }})
487+
name: macOS fresh install (Homebrew, ${{ matrix.image }})
492488
if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
493489
# Same two images as macos-fresh: the formula declares `depends_on macos:
494490
# :sonoma` + arm64, macos-14 is the oldest image satisfying it, and
@@ -498,16 +494,12 @@ jobs:
498494
matrix:
499495
include:
500496
- image: macos-14
501-
known_red: ''
502497
- image: xcode-27
503-
known_red: '#669'
504498
runs-on: ${{ matrix.image }}
505-
# KNOWN RED, MACHINE-READABLY (the 2026-09-28 design, WS7). A leg whose
506-
# failure has a tracked external cause carries that issue in `known_red`:
507-
# the leg may fail without failing the workflow, its own result and log
508-
# stay visible, and .github/tools/check_workflow_assertions.py requires
509-
# the issue to be open. The leg leaves the list when #669 closes.
510-
continue-on-error: ${{ matrix.known_red != '' }}
499+
# While the line was on LLVM 22.1.8 the xcode-27 leg was known red (#669,
500+
# the arm64e.x1 .tbd stubs, continue-on-error per the 2026-09-28 WS7
501+
# design). The 23.1.3 line move removed the cause, so both images are
502+
# plain required legs again.
511503
timeout-minutes: 30
512504
steps:
513505
- name: Environment
@@ -601,7 +593,7 @@ jobs:
601593
fi
602594
603595
# ──────────────────────────────────────────────────────────────────
604-
# Windows WITH Visual Studio: llvm@20.1.7 + MSVC STL
596+
# Windows WITH Visual Studio: llvm@23.1.3 + MSVC STL
605597
#
606598
# Two images, because the OS version is a real variable for a tool that
607599
# touches the UCRT, the Windows SDK and long paths. GitHub publishes no

‎.github/workflows/ci-linux-e2e.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ jobs:
6767
# skip on every runner; measured 2026-10-01, seventeen such tests ran
6868
# nowhere. Warm runs re-install nothing.
6969
"$MCPP" toolchain install gcc 16.1.0-musl
70-
"$MCPP" toolchain install llvm 22.1.8
70+
"$MCPP" toolchain install llvm 23.1.3
7171
"$MCPP" toolchain install mingw-cross 16.1.0
7272
XLINGS_HOME="$MCPP_HOME/registry" "$MCPP_VENDORED_XLINGS" install xim:nasm -y
7373
@@ -173,7 +173,7 @@ jobs:
173173
export MCPP_E2E_TOOLCHAIN_MIRROR=GLOBAL
174174
# llvm is the toolchain a freestanding target pins; install it
175175
# explicitly rather than relying on whatever the sandbox cache holds.
176-
"$MCPP" toolchain install llvm 22.1.8
176+
"$MCPP" toolchain install llvm 23.1.3
177177
# Run the two scripts DIRECTLY rather than through run_all.sh.
178178
# They are standalone (they take $MCPP and nothing else), run_all.sh
179179
# accepts no filter — it would run the whole 250-test suite here for
@@ -383,7 +383,7 @@ jobs:
383383
cd "$(mktemp -d)"
384384
"$MCPP" new hello195
385385
cd hello195
386-
printf '\n[toolchain]\nlinux = "llvm@22.1.8"\n' >> mcpp.toml
386+
printf '\n[toolchain]\nlinux = "llvm@23.1.3"\n' >> mcpp.toml
387387
printf 'import std;\nint main() { std::println("hello {}", 195); return 0; }\n' > src/main.cpp
388388
"$MCPP" run
389389

0 commit comments

Comments
 (0)