Skip to content

Commit 73823f1

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). The line move (single PR per SPEC-009 §10.6): - kKnownTargets: the 17 llvm rows move 22.1.8 -> 23.1.3; the gcc rows stay. - Host defaults: macOS and Windows-with-MSVC move to llvm@23.1.3, resolving the [toolchain] macos/windows deviations (SPEC-009 §12). Linux keeps gcc@16.1.0 by design — native glibc ABI — now recorded as a §4.1 reason at the single pin site, with the gcc@15.1.0-musl reason beside it. - All four known-red legs (#669) become unconditional normal legs; the known-red floor assertion moves to zero. The xcode-27 legs went green on rerun and #669 is closed. - Readers move with the tables: workflows, the macOS action, CI tools, e2e fixtures, tests/matrix/expected.tsv, examples, user docs (en/zh); SPEC-009 v0.4 records the move. - libc++ 23 adaptation the gate caught: _LIBCPP_BEGIN_NAMESPACE_STD opens under the ODR-signature abi_tag pragma, and clang refuses to add abi_tag on a redeclaration — e2e 133's verbose_abort override now spells the namespaces by hand. The #782 repair: a held unserved-target diagnosis no longer skips the toolchain install. A declared or --target toolchain resolves and installs even when no payload here serves the target — a retargetable clang plus a graph package supplying the target's system is the arrangement the openkal rows exist for, and the skip fired before the graph release could run the moment the suite stopped installing the pinned version out of band (measured on the openkal macos leg, twice). When the install itself fails and the diagnosis stands, it releases there. e2e 890 pins the contract on the mac/windows legs. The e2e toolchain-version abstraction: tests/e2e/_toolchain_env.sh is the one place a test learns a toolchain version — override, newest installed, fallback constant, per family — and the llvm family's ~90 literals across 38 scripts now read it. The next line move edits one file here. _llvm_env.sh becomes an alias shim. Closes #780. Closed #669 (xcode-27 legs green on rerun). Files #782 as the remaining openkal macos regression this repair addresses.
1 parent de9c290 commit 73823f1

94 files changed

Lines changed: 1089 additions & 527 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: 383 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)