Skip to content

Upgrade LLVM toolchain from 19.1.7 to 21.1.8 - #153

Merged
dylan-conway merged 1 commit into
mainfrom
claude/llvm-21-hash-memory-shim
Feb 3, 2026
Merged

dylan-conway merged 1 commit into
mainfrom
claude/llvm-21-hash-memory-shim

Conversation

@dylan-conway

@dylan-conway dylan-conway commented Feb 1, 2026

Copy link
Copy Markdown
Member

Summary

  • Update LLVM version references in build scripts, Dockerfiles, and CI workflows
  • Add LibcxxHashMemoryShim.cpp to provide the missing std::__hash_memory symbol on macOS. LLVM 21's libc++ moved this from an inline function to an external symbol exported from libc++.dylib, but the macOS system libc++ doesn't include it (llvm/llvm-project#77653). The shim uses libc++'s own cityhash implementation and is only compiled on Darwin.
  • Add LLVM 22+ compile-time guard that errors if the shim is still present, so it gets re-evaluated on the next LLVM upgrade.

Test plan

  • Build JSC/bmalloc on macOS with LLVM 21
  • Verify __hash_memory linker error is resolved
  • Verify Linux builds are unaffected (shim is Darwin-only)

Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Feb 1, 2026

Copy link
Copy Markdown

Walkthrough

Upgrade LLVM/Clang from 19 → 21 across CI, Docker (including musl), and local build scripts; add a macOS-only libc++ shim providing std::__hash_memory and include the new source in bmalloc's Darwin build list.

Changes

Cohort / File(s) Summary
CI/workflow updates
.github/workflows/build-reusable.yml
LLVM_VERSION bumped 19→21; macOS Homebrew installs/paths updated to llvm@21; compiler/tool references (clang/clang++, llvm-ar, llvm-ranlib, cmake compilers) updated; Windows Scoop LLVM package version updated to 21.1.8 (x64/ARM64).
Dockerfiles
Dockerfile, Dockerfile.musl
ARG LLVM_VERSION set to 21; install scripts updated to use LLVM 21. In Dockerfile.musl: base image bumped alpine:3.21alpine:3.23, package names and dev libs switched from clang19/llvm19 → clang21/llvm21, PATH/LDFLAGS/CXXFLAGS updated, new ENV entries AR=llvm-ar, RANLIB=llvm-ranlib, LD=lld, added ruby-getoptlong, and output directory creation adjusted.
Local build scripts
build.ts, mac-release.bash
Non-Windows compiler preference changed from clang-19/clang++-19clang-21/clang++-21 with existing fallbacks; mac-release.bash default C compiler fallback updated to clang-21.
bmalloc macOS shim
Source/bmalloc/CMakeLists.txt, Source/bmalloc/bmalloc/LibcxxHashMemoryShim.cpp
Added LibcxxHashMemoryShim.cpp to Darwin sources and implemented a macOS-only shim exporting std::__hash_memory (guarded by _LIBCPP_AVAILABILITY_HAS_HASH_MEMORY and emits an error if _LIBCPP_VERSION >= 220000).
🚥 Pre-merge checks | ✅ 1 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description does not follow the required WebKit PR template, missing Bugzilla reference, reviewer acknowledgment, and standardized format. Add Bugzilla bug reference, 'Reviewed by NOBODY (OOPS!)' line, and format as per WebKit template with changed files listed.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Upgrade LLVM toolchain from 19.1.7 to 21.1.8' clearly and specifically summarizes the primary change across the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 | 🔵 Trivial

Duplicate 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.

Comment thread .github/workflows/build-reusable.yml
Comment thread .github/workflows/build-reusable.yml Outdated
@@ -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"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

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.

Suggested change
$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.

Comment thread Dockerfile.musl
Comment thread mac-release.bash
Comment on lines +12 to 13
CMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang-21}
CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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.

@dylan-conway
dylan-conway force-pushed the claude/llvm-21-hash-memory-shim branch 2 times, most recently from 84716f2 to 10a85ad Compare February 1, 2026 04:53

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread Dockerfile
Comment on lines +74 to 78
# 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 \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat Dockerfile

Repository: 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.

Suggested change
# 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.

Comment thread Dockerfile.musl Outdated
Comment thread Dockerfile.musl
Comment on lines +20 to +24
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"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

Suggested change
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>
@dylan-conway
dylan-conway force-pushed the claude/llvm-21-hash-memory-shim branch from 10a85ad to a73d459 Compare February 1, 2026 05:22

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Comment on lines +101 to +114
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++"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat -n .github/workflows/build-reusable.yml | head -150

Repository: oven-sh/WebKit

Length of output: 6715


🏁 Script executed:

rg "llvm@" .github/workflows/build-reusable.yml

Repository: oven-sh/WebKit

Length of output: 671


🏁 Script executed:

rg -B5 -A5 "llvm@21.1.8" .github/workflows/build-reusable.yml

Repository: 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).

@github-actions

github-actions Bot commented Feb 1, 2026

Copy link
Copy Markdown

Preview Builds

Commit Release Date
a73d459b autobuild-preview-pr-153-a73d459b 2026-02-01 05:58:29 UTC

dylan-conway added a commit to oven-sh/bun that referenced this pull request Feb 1, 2026
- 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>
@dylan-conway
dylan-conway merged commit 7bc2f97 into main Feb 3, 2026
30 checks passed
dylan-conway added a commit to oven-sh/bun that referenced this pull request Feb 3, 2026
## 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>
xhjkl pushed a commit to xhjkl/bun that referenced this pull request May 14, 2026
…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>
liooil pushed a commit to liooil/poly that referenced this pull request Aug 7, 2026
## 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant