Upgrade LLVM toolchain from 19.1.7 to 21.1.8 - #153
Conversation
WalkthroughUpgrade LLVM/Clang from 19 → 21 across CI, Docker (including musl), and local build scripts; add a macOS-only libc++ shim providing Changes
🚥 Pre-merge checks | ✅ 1 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Dockerfile (1)
93-103: 🧹 Nitpick | 🔵 TrivialDuplicate LLVM toolchain symlink setup blocks.
The same symlink setup is performed twice (lines 94-103 and 131-140). This appears to be unintentional duplication that increases image build time and adds unnecessary layers.
Consider removing the duplicate block
Remove either lines 94-103 or lines 131-140 (they are identical). Keeping only one instance is sufficient.
Also applies to: 130-140
🤖 Fix all issues with AI agents
In @.github/workflows/build-reusable.yml:
- Line 4: The LLVM version defaults are inconsistent: the environment variable
LLVM_VERSION is set to 21 while the workflow input llvm_version defaults to
'19'; make them consistent by either updating the workflow input llvm_version
default to '21' or by setting LLVM_VERSION to use the input (e.g., reference
inputs.llvm_version) so both LLVM_VERSION and llvm_version agree; specifically
update the input named llvm_version or the environment variable LLVM_VERSION to
the same value to avoid mismatches.
- Line 287: The llvmUrl string is malformed (uses "llvm@21" instead of the
correct GitHub org/repo) — update the assignment for the llvmUrl variable so the
GitHub path uses "llvm/llvm-project" and retains the dynamic $llvmVersion value
and filename suffix (e.g.,
"https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe");
ensure the variable name llvmUrl is preserved and only the URL string is
corrected.
In `@Dockerfile.musl`:
- Line 18: The RUN apk add installs many toolchain packages without versions; to
improve reproducibility, pin critical packages by specifying explicit package
versions (e.g., clang21=<version>, llvm21=<version>, gcc=<version>,
g++=<version>, musl-dev=<version>, libc-dev=<version>) and/or introduce build
ARGs (like CLANG_VER, LLVM_VER, GCC_VER) used in the apk add command so you can
control/lock versions easily; update the RUN line that contains apk add and the
package names (clang21, llvm21, gcc, g++, musl-dev, libc-dev, build-base, lld,
etc.) to use those pinned versions or ARG-expanded variables.
In `@mac-release.bash`:
- Around line 12-13: The defaults for the compilers are inconsistent:
CMAKE_C_COMPILER is version-pinned to clang-21 while CMAKE_CXX_COMPILER is
unpinned (clang++), which may mix toolchain versions; update the
CMAKE_CXX_COMPILER default to match the C compiler (use the same versioned
binary, e.g., clang++-21) so both CMAKE_C_COMPILER and CMAKE_CXX_COMPILER use
the same compiler version, or alternatively make both unversioned—change the
default assignment for CMAKE_CXX_COMPILER in mac-release.bash accordingly.
| @@ -284,7 +284,7 @@ jobs: | |||
| # Install LLVM ARM64 from official LLVM releases | |||
| # Use LLVM 21 for ARM64 - has better Windows ARM64 support and fixes SEH unwind bugs | |||
| $llvmVersion = "21.1.8" | |||
| $llvmUrl = "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe" | |||
| $llvmUrl = "https://github.com/llvm@21/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe" | |||
There was a problem hiding this comment.
Malformed GitHub URL for Windows ARM64 LLVM download.
The URL https://github.com/llvm@21/llvm-project/releases/... is invalid. llvm@21 is not a valid GitHub organization name — it should be llvm/llvm-project.
Proposed fix
- $llvmUrl = "https://github.com/llvm@21/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe"
+ $llvmUrl = "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| $llvmUrl = "https://github.com/llvm@21/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe" | |
| $llvmUrl = "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe" |
🤖 Prompt for AI Agents
In @.github/workflows/build-reusable.yml at line 287, The llvmUrl string is
malformed (uses "llvm@21" instead of the correct GitHub org/repo) — update the
assignment for the llvmUrl variable so the GitHub path uses "llvm/llvm-project"
and retains the dynamic $llvmVersion value and filename suffix (e.g.,
"https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe");
ensure the variable name llvmUrl is preserved and only the URL string is
corrected.
| CMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang-21} | ||
| CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++} |
There was a problem hiding this comment.
Inconsistent compiler version specification between C and C++ compilers.
CMAKE_C_COMPILER defaults to clang-21 (version-specific), but CMAKE_CXX_COMPILER defaults to clang++ (generic). This could result in mixing different compiler versions if clang++ resolves to a different LLVM version on the system.
Proposed fix
CMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang-21}
-CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++}
+CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++-21}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| CMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang-21} | |
| CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++} | |
| CMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang-21} | |
| CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++-21} |
🤖 Prompt for AI Agents
In `@mac-release.bash` around lines 12 - 13, The defaults for the compilers are
inconsistent: CMAKE_C_COMPILER is version-pinned to clang-21 while
CMAKE_CXX_COMPILER is unpinned (clang++), which may mix toolchain versions;
update the CMAKE_CXX_COMPILER default to match the C compiler (use the same
versioned binary, e.g., clang++-21) so both CMAKE_C_COMPILER and
CMAKE_CXX_COMPILER use the same compiler version, or alternatively make both
unversioned—change the default assignment for CMAKE_CXX_COMPILER in
mac-release.bash accordingly.
84716f2 to
10a85ad
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@Dockerfile`:
- Around line 74-78: The RUN step invokes ./llvm.sh with a hardcoded "21";
change it to use the build arg variable so it honors overrides and matches the
symlink logic—invoke ./llvm.sh ${LLVM_VERSION} (or quoted "${LLVM_VERSION}")
instead of ./llvm.sh 21 and ensure the ARG LLVM_VERSION is defined earlier in
the Dockerfile; update the command that calls llvm.sh (the llvm.sh invocation in
the RUN block) so the same ${LLVM_VERSION} value is used throughout.
In `@Dockerfile.musl`:
- Line 8: Replace the rolling tag in the Dockerfile's base stage ("FROM
alpine:edge as base") with a pinned image to ensure reproducible builds; change
it to a stable release tag (e.g., "alpine:3.18") or use an exact digest
(sha256:<digest>) for the base stage so the "FROM alpine:edge as base" line no
longer references a rolling tag.
- Around line 20-24: Add an LLVM_VERSION env var and use it to parameterize the
toolchain settings: replace hard-coded "21" in the CXX and CC ENV values and the
llvm21 paths in LDFLAGS, CXXFLAGS, and PATH with the LLVM_VERSION substitution
(referencing the ENV names CXX, CC, LDFLAGS, CXXFLAGS, PATH and the new ENV
LLVM_VERSION) so bumping LLVM only requires updating LLVM_VERSION.
| # Install LLVM 21 | ||
| RUN wget https://apt.llvm.org/llvm.sh \ | ||
| && chmod +x llvm.sh \ | ||
| && ./llvm.sh 19 all \ | ||
| && ./llvm.sh 21 all \ | ||
| && rm llvm.sh \ |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat DockerfileRepository: oven-sh/WebKit
Length of output: 9782
Use the LLVM_VERSION ARG when invoking llvm.sh.
Hardcoding 21 ignores overridden build args and creates inconsistency with the symlink configuration below (which correctly uses ${LLVM_VERSION}), potentially causing toolchain mismatches.
🔧 Proposed fix
-# Install LLVM 21
+# Install LLVM ${LLVM_VERSION}
RUN wget https://apt.llvm.org/llvm.sh \
&& chmod +x llvm.sh \
- && ./llvm.sh 21 all \
+ && ./llvm.sh ${LLVM_VERSION} all \
&& rm llvm.sh \📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Install LLVM 21 | |
| RUN wget https://apt.llvm.org/llvm.sh \ | |
| && chmod +x llvm.sh \ | |
| && ./llvm.sh 19 all \ | |
| && ./llvm.sh 21 all \ | |
| && rm llvm.sh \ | |
| # Install LLVM ${LLVM_VERSION} | |
| RUN wget https://apt.llvm.org/llvm.sh \ | |
| && chmod +x llvm.sh \ | |
| && ./llvm.sh ${LLVM_VERSION} all \ | |
| && rm llvm.sh \ |
🧰 Tools
🪛 Hadolint (2.14.0)
[info] 75-75: Avoid use of wget without progress bar. Use wget --progress=dot:giga <url>. Or consider using -q or -nv (shorthands for --quiet or --no-verbose).
(DL3047)
🤖 Prompt for AI Agents
In `@Dockerfile` around lines 74 - 78, The RUN step invokes ./llvm.sh with a
hardcoded "21"; change it to use the build arg variable so it honors overrides
and matches the symlink logic—invoke ./llvm.sh ${LLVM_VERSION} (or quoted
"${LLVM_VERSION}") instead of ./llvm.sh 21 and ensure the ARG LLVM_VERSION is
defined earlier in the Dockerfile; update the command that calls llvm.sh (the
llvm.sh invocation in the RUN block) so the same ${LLVM_VERSION} value is used
throughout.
| ENV CXX=clang++-21 | ||
| ENV CC=clang-21 | ||
| ENV LDFLAGS='-L/usr/include -L/usr/include/llvm21' | ||
| ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm21" | ||
| ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm21/bin:$PATH" |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Parameterize toolchain env vars with LLVM_VERSION.
This avoids drift if the LLVM version is bumped again.
♻️ Proposed refactor
-ENV CXX=clang++-21
-ENV CC=clang-21
-ENV LDFLAGS='-L/usr/include -L/usr/include/llvm21'
-ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm21"
-ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm21/bin:$PATH"
+ENV CXX=clang++-${LLVM_VERSION}
+ENV CC=clang-${LLVM_VERSION}
+ENV LDFLAGS="-L/usr/include -L/usr/include/llvm${LLVM_VERSION}"
+ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm${LLVM_VERSION}"
+ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm${LLVM_VERSION}/bin:$PATH"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ENV CXX=clang++-21 | |
| ENV CC=clang-21 | |
| ENV LDFLAGS='-L/usr/include -L/usr/include/llvm21' | |
| ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm21" | |
| ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm21/bin:$PATH" | |
| ENV CXX=clang++-${LLVM_VERSION} | |
| ENV CC=clang-${LLVM_VERSION} | |
| ENV LDFLAGS="-L/usr/include -L/usr/include/llvm${LLVM_VERSION}" | |
| ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm${LLVM_VERSION}" | |
| ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm${LLVM_VERSION}/bin:$PATH" |
🤖 Prompt for AI Agents
In `@Dockerfile.musl` around lines 20 - 24, Add an LLVM_VERSION env var and use it
to parameterize the toolchain settings: replace hard-coded "21" in the CXX and
CC ENV values and the llvm21 paths in LDFLAGS, CXXFLAGS, and PATH with the
LLVM_VERSION substitution (referencing the ENV names CXX, CC, LDFLAGS, CXXFLAGS,
PATH and the new ENV LLVM_VERSION) so bumping LLVM only requires updating
LLVM_VERSION.
- Update LLVM version references in build scripts, Dockerfiles, and CI - Add LibcxxHashMemoryShim.cpp to provide missing std::__hash_memory symbol on macOS. LLVM 21 libc++ moved this from inline to an external symbol exported from libc++.dylib, but macOS system libc++ does not have it (llvm/llvm-project#77653). The shim uses libc++ own cityhash implementation and is only compiled on Darwin. - Add LLVM 22+ version guard to error if the shim is still present after the upstream issue is resolved. Co-Authored-By: Claude <noreply@anthropic.com>
10a85ad to
a73d459
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @.github/workflows/build-reusable.yml:
- Around line 101-114: Replace all occurrences of the hardcoded "llvm@21" in the
macOS workflow steps with the parameterized "llvm@${{ env.LLVM_VERSION }}" so
the input override is honored; specifically update the PATH addition, brew
install/brew link references and the environment variables that reference the
toolchain (CC, CXX, RANLIB, AR, CMAKE_C_COMPILER, CMAKE_CXX_COMPILER) which
currently use "${{matrix.brew_prefix}}/llvm@21/bin/..." to instead use
"${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/..." (leave
matrix.brew_prefix and ICU_* vars unchanged).
| echo "${{matrix.brew_prefix}}/llvm@21/bin" >> $GITHUB_PATH | ||
| brew install llvm@21 python icu4c ninja -f --overwrite | ||
| brew link llvm@21 -f --overwrite | ||
| - name: Run | ||
| env: | ||
| ICU_INCLUDE_DIRS: ${{matrix.brew_prefix}}/icu4c/include | ||
| ICU_ROOT: ${{matrix.brew_prefix}}/icu4c | ||
| LDFLAGS: "${{env.LDFLAGS}} " | ||
| CC: "${{matrix.brew_prefix}}/llvm@${{env.LLVM_VERSION}}/bin/clang" | ||
| CXX: "${{matrix.brew_prefix}}/llvm@${{env.LLVM_VERSION}}/bin/clang++" | ||
| RANLIB: "${{matrix.brew_prefix}}/llvm@${{env.LLVM_VERSION}}/bin/llvm-ranlib" | ||
| AR: "${{matrix.brew_prefix}}/llvm@${{env.LLVM_VERSION}}/bin/llvm-ar" | ||
| CMAKE_C_COMPILER: "${{matrix.brew_prefix}}/llvm@${{env.LLVM_VERSION}}/bin/clang" | ||
| CMAKE_CXX_COMPILER: "${{matrix.brew_prefix}}/llvm@${{env.LLVM_VERSION}}/bin/clang++" | ||
| CC: "${{matrix.brew_prefix}}/llvm@21/bin/clang" | ||
| CXX: "${{matrix.brew_prefix}}/llvm@21/bin/clang++" | ||
| RANLIB: "${{matrix.brew_prefix}}/llvm@21/bin/llvm-ranlib" | ||
| AR: "${{matrix.brew_prefix}}/llvm@21/bin/llvm-ar" | ||
| CMAKE_C_COMPILER: "${{matrix.brew_prefix}}/llvm@21/bin/clang" | ||
| CMAKE_CXX_COMPILER: "${{matrix.brew_prefix}}/llvm@21/bin/clang++" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n .github/workflows/build-reusable.yml | head -150Repository: oven-sh/WebKit
Length of output: 6715
🏁 Script executed:
rg "llvm@" .github/workflows/build-reusable.ymlRepository: oven-sh/WebKit
Length of output: 671
🏁 Script executed:
rg -B5 -A5 "llvm@21.1.8" .github/workflows/build-reusable.ymlRepository: oven-sh/WebKit
Length of output: 598
Use env.LLVM_VERSION instead of hardcoded llvm@21 in macOS steps.
The workflow accepts inputs.llvm_version and sets env.LLVM_VERSION on line 85, but the macOS build steps (lines 101-114) ignore this and hardcode llvm@21. This prevents version overrides from taking effect. Replace all hardcoded llvm@21 references with llvm@${{ env.LLVM_VERSION }}.
🔧 Proposed fix
- echo "${{matrix.brew_prefix}}/llvm@21/bin" >> $GITHUB_PATH
- brew install llvm@21 python icu4c ninja -f --overwrite
- brew link llvm@21 -f --overwrite
+ echo "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin" >> $GITHUB_PATH
+ brew install llvm@${{ env.LLVM_VERSION }} python icu4c ninja -f --overwrite
+ brew link llvm@${{ env.LLVM_VERSION }} -f --overwrite- CC: "${{matrix.brew_prefix}}/llvm@21/bin/clang"
- CXX: "${{matrix.brew_prefix}}/llvm@21/bin/clang++"
- RANLIB: "${{matrix.brew_prefix}}/llvm@21/bin/llvm-ranlib"
- AR: "${{matrix.brew_prefix}}/llvm@21/bin/llvm-ar"
- CMAKE_C_COMPILER: "${{matrix.brew_prefix}}/llvm@21/bin/clang"
- CMAKE_CXX_COMPILER: "${{matrix.brew_prefix}}/llvm@21/bin/clang++"
+ CC: "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/clang"
+ CXX: "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/clang++"
+ RANLIB: "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/llvm-ranlib"
+ AR: "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/llvm-ar"
+ CMAKE_C_COMPILER: "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/clang"
+ CMAKE_CXX_COMPILER: "${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/clang++"🤖 Prompt for AI Agents
In @.github/workflows/build-reusable.yml around lines 101 - 114, Replace all
occurrences of the hardcoded "llvm@21" in the macOS workflow steps with the
parameterized "llvm@${{ env.LLVM_VERSION }}" so the input override is honored;
specifically update the PATH addition, brew install/brew link references and the
environment variables that reference the toolchain (CC, CXX, RANLIB, AR,
CMAKE_C_COMPILER, CMAKE_CXX_COMPILER) which currently use
"${{matrix.brew_prefix}}/llvm@21/bin/..." to instead use
"${{matrix.brew_prefix}}/llvm@${{ env.LLVM_VERSION }}/bin/..." (leave
matrix.brew_prefix and ICU_* vars unchanged).
Preview Builds
|
- Update LLVM version references across build scripts, Dockerfiles, CI, Nix configs, and documentation - Fix LLVM 21 -Wcharacter-conversion errors in WebKit bindings: - EncodingTables.h: pragma for intentional char32_t/char16_t comparisons - TextCodecCJK.cpp: widen gb18030AsymmetricEncode param to char32_t - URLPatternParser: widen isValidNameCodepoint param to char32_t - Fix __libcpp_verbose_abort noexcept mismatch (LLVM 21 uses _NOEXCEPT) - Remove useMathSumPreciseMethod (removed upstream in JSC) - Point WEBKIT_VERSION to preview build from oven-sh/WebKit#153 Co-Authored-By: Claude <noreply@anthropic.com>
## Summary - Update LLVM version references across build scripts, Dockerfiles, CI, Nix configs, and documentation - Fix LLVM 21 `-Wcharacter-conversion` errors in WebKit bindings: - `EncodingTables.h`: pragma for intentional char32_t/char16_t comparisons - `TextCodecCJK.cpp`: widen `gb18030AsymmetricEncode` param to char32_t - `URLPatternParser`: widen `isValidNameCodepoint` param to char32_t, cast for `startsWith` - Fix `__libcpp_verbose_abort` noexcept mismatch (LLVM 21 uses `_NOEXCEPT`) - Fix dangling pointer in `BunJSCModule.h` (`toCString` temporary lifetime) - Remove `useMathSumPreciseMethod` (removed upstream in JSC) **Before merging:** Merge oven-sh/WebKit#153 first, then update `WEBKIT_VERSION` in `cmake/tools/SetupWebKit.cmake` to point to the merged commit. ## Test plan - [ ] Build bun debug on macOS with LLVM 21 - [ ] Build bun on Linux (glibc) - [ ] Build bun on Linux (musl) - [ ] Build bun on Windows - [ ] Run test suite Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
…h#26667) ## Summary - Update LLVM version references across build scripts, Dockerfiles, CI, Nix configs, and documentation - Fix LLVM 21 `-Wcharacter-conversion` errors in WebKit bindings: - `EncodingTables.h`: pragma for intentional char32_t/char16_t comparisons - `TextCodecCJK.cpp`: widen `gb18030AsymmetricEncode` param to char32_t - `URLPatternParser`: widen `isValidNameCodepoint` param to char32_t, cast for `startsWith` - Fix `__libcpp_verbose_abort` noexcept mismatch (LLVM 21 uses `_NOEXCEPT`) - Fix dangling pointer in `BunJSCModule.h` (`toCString` temporary lifetime) - Remove `useMathSumPreciseMethod` (removed upstream in JSC) **Before merging:** Merge oven-sh/WebKit#153 first, then update `WEBKIT_VERSION` in `cmake/tools/SetupWebKit.cmake` to point to the merged commit. ## Test plan - [ ] Build bun debug on macOS with LLVM 21 - [ ] Build bun on Linux (glibc) - [ ] Build bun on Linux (musl) - [ ] Build bun on Windows - [ ] Run test suite Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
## Summary - Update LLVM version references across build scripts, Dockerfiles, CI, Nix configs, and documentation - Fix LLVM 21 `-Wcharacter-conversion` errors in WebKit bindings: - `EncodingTables.h`: pragma for intentional char32_t/char16_t comparisons - `TextCodecCJK.cpp`: widen `gb18030AsymmetricEncode` param to char32_t - `URLPatternParser`: widen `isValidNameCodepoint` param to char32_t, cast for `startsWith` - Fix `__libcpp_verbose_abort` noexcept mismatch (LLVM 21 uses `_NOEXCEPT`) - Fix dangling pointer in `BunJSCModule.h` (`toCString` temporary lifetime) - Remove `useMathSumPreciseMethod` (removed upstream in JSC) **Before merging:** Merge oven-sh/WebKit#153 first, then update `WEBKIT_VERSION` in `cmake/tools/SetupWebKit.cmake` to point to the merged commit. ## Test plan - [ ] Build bun debug on macOS with LLVM 21 - [ ] Build bun on Linux (glibc) - [ ] Build bun on Linux (musl) - [ ] Build bun on Windows - [ ] Run test suite Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Summary
LibcxxHashMemoryShim.cppto provide the missingstd::__hash_memorysymbol on macOS. LLVM 21's libc++ moved this from an inline function to an external symbol exported fromlibc++.dylib, but the macOS systemlibc++doesn't include it (llvm/llvm-project#77653). The shim uses libc++'s own cityhash implementation and is only compiled on Darwin.Test plan
__hash_memorylinker error is resolvedGenerated with Claude Code