Upgrade LLVM toolchain from 19.1.7 to 21.1.8

- 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>
This commit is contained in:
Dylan Conway
2026-02-01 03:12:40 -08:00
parent 35f8154319
commit 296989cd1f
23 changed files with 72 additions and 98 deletions

View File

@@ -1,5 +1,5 @@
ARG LLVM_VERSION="19" ARG LLVM_VERSION="21"
ARG REPORTED_LLVM_VERSION="19.1.7" ARG REPORTED_LLVM_VERSION="21.1.8"
ARG OLD_BUN_VERSION="1.1.38" ARG OLD_BUN_VERSION="1.1.38"
ARG BUILDKITE_AGENT_TAGS="queue=linux,os=linux,arch=${TARGETARCH}" ARG BUILDKITE_AGENT_TAGS="queue=linux,os=linux,arch=${TARGETARCH}"

View File

@@ -33,8 +33,8 @@ The workflow runs all three formatters simultaneously:
#### 3. Tool Installation #### 3. Tool Installation
##### Clang-format-19 ##### Clang-format-21
- Installs ONLY `clang-format-19` package (not the entire LLVM toolchain) - Installs ONLY `clang-format-21` package (not the entire LLVM toolchain)
- Uses `--no-install-recommends --no-install-suggests` to skip unnecessary packages - Uses `--no-install-recommends --no-install-suggests` to skip unnecessary packages
- Quiet installation with `-qq` and `-o=Dpkg::Use-Pty=0` - Quiet installation with `-qq` and `-o=Dpkg::Use-Pty=0`

View File

@@ -10,8 +10,8 @@ on:
merge_group: merge_group:
env: env:
BUN_VERSION: "1.3.2" BUN_VERSION: "1.3.2"
LLVM_VERSION: "19.1.7" LLVM_VERSION: "21.1.8"
LLVM_VERSION_MAJOR: "19" LLVM_VERSION_MAJOR: "21"
jobs: jobs:
autofix: autofix:

View File

@@ -35,7 +35,7 @@ $ sudo pacman -S base-devel cmake git go libiconv libtool make ninja pkg-config
``` ```
```bash#Fedora ```bash#Fedora
$ sudo dnf install cargo clang19 llvm19 lld19 cmake git golang libtool ninja-build pkg-config rustc ruby libatomic-static libstdc++-static sed unzip which libicu-devel 'perl(Math::BigInt)' $ sudo dnf install cargo clang21 llvm21 lld21 cmake git golang libtool ninja-build pkg-config rustc ruby libatomic-static libstdc++-static sed unzip which libicu-devel 'perl(Math::BigInt)'
``` ```
```bash#openSUSE Tumbleweed ```bash#openSUSE Tumbleweed
@@ -90,17 +90,17 @@ Our build scripts will automatically detect and use `ccache` if available. You c
## Install LLVM ## Install LLVM
Bun requires LLVM 19 (`clang` is part of LLVM). This version requirement is to match WebKit (precompiled), as mismatching versions will cause memory allocation failures at runtime. In most cases, you can install LLVM through your system package manager: Bun requires LLVM 21.1.8 (`clang` is part of LLVM). This version is enforced by the build system — mismatching versions will cause memory allocation failures at runtime. In most cases, you can install LLVM through your system package manager:
{% codetabs group="os" %} {% codetabs group="os" %}
```bash#macOS (Homebrew) ```bash#macOS (Homebrew)
$ brew install llvm@19 $ brew install llvm@21
``` ```
```bash#Ubuntu/Debian ```bash#Ubuntu/Debian
$ # LLVM has an automatic installation script that is compatible with all versions of Ubuntu $ # LLVM has an automatic installation script that is compatible with all versions of Ubuntu
$ wget https://apt.llvm.org/llvm.sh -O - | sudo bash -s -- 19 all $ wget https://apt.llvm.org/llvm.sh -O - | sudo bash -s -- 21 all
``` ```
```bash#Arch ```bash#Arch
@@ -112,17 +112,17 @@ $ sudo dnf install llvm clang lld-devel
``` ```
```bash#openSUSE Tumbleweed ```bash#openSUSE Tumbleweed
$ sudo zypper install clang19 lld19 llvm19 $ sudo zypper install clang21 lld21 llvm21
``` ```
{% /codetabs %} {% /codetabs %}
If none of the above solutions apply, you will have to install it [manually](https://github.com/llvm/llvm-project/releases/tag/llvmorg-19.1.7). If none of the above solutions apply, you will have to install it [manually](https://github.com/llvm/llvm-project/releases/tag/llvmorg-21.1.8).
Make sure Clang/LLVM 19 is in your path: Make sure Clang/LLVM 21 is in your path:
```bash ```bash
$ which clang-19 $ which clang-21
``` ```
If not, run this to manually add it: If not, run this to manually add it:
@@ -131,13 +131,13 @@ If not, run this to manually add it:
```bash#macOS (Homebrew) ```bash#macOS (Homebrew)
# use fish_add_path if you're using fish # use fish_add_path if you're using fish
# use path+="$(brew --prefix llvm@19)/bin" if you are using zsh # use path+="$(brew --prefix llvm@21)/bin" if you are using zsh
$ export PATH="$(brew --prefix llvm@19)/bin:$PATH" $ export PATH="$(brew --prefix llvm@21)/bin:$PATH"
``` ```
```bash#Arch ```bash#Arch
# use fish_add_path if you're using fish # use fish_add_path if you're using fish
$ export PATH="$PATH:/usr/lib/llvm19/bin" $ export PATH="$PATH:/usr/lib/llvm21/bin"
``` ```
{% /codetabs %} {% /codetabs %}
@@ -299,7 +299,7 @@ The issue may manifest when initially running `bun setup` as Clang being unable
``` ```
The C++ compiler The C++ compiler
"/usr/bin/clang++-19" "/usr/bin/clang++-21"
is not able to compile a simple test program. is not able to compile a simple test program.
``` ```

View File

@@ -12,13 +12,7 @@ if(NOT ENABLE_LLVM)
return() return()
endif() endif()
# LLVM 21 is required for Windows ARM64 (first version with ARM64 Windows builds) set(DEFAULT_LLVM_VERSION "21.1.8")
# Other platforms use LLVM 19.1.7
if(WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64|AARCH64")
set(DEFAULT_LLVM_VERSION "21.1.8")
else()
set(DEFAULT_LLVM_VERSION "19.1.7")
endif()
optionx(LLVM_VERSION STRING "The version of LLVM to use" DEFAULT ${DEFAULT_LLVM_VERSION}) optionx(LLVM_VERSION STRING "The version of LLVM to use" DEFAULT ${DEFAULT_LLVM_VERSION})
@@ -78,14 +72,12 @@ macro(find_llvm_command variable command)
) )
endif() endif()
math(EXPR LLVM_VERSION_NEXT_MAJOR "${LLVM_VERSION_MAJOR} + 1")
find_command( find_command(
VARIABLE ${variable} VARIABLE ${variable}
VERSION_VARIABLE LLVM_VERSION VERSION_VARIABLE LLVM_VERSION
COMMAND ${commands} COMMAND ${commands}
PATHS ${LLVM_PATHS} PATHS ${LLVM_PATHS}
VERSION ">=${LLVM_VERSION_MAJOR}.1.0 <${LLVM_VERSION_NEXT_MAJOR}.0.0" VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}"
) )
list(APPEND CMAKE_ARGS -D${variable}=${${variable}}) list(APPEND CMAKE_ARGS -D${variable}=${${variable}})
endmacro() endmacro()

View File

@@ -6,7 +6,7 @@ option(WEBKIT_LOCAL "If a local version of WebKit should be used instead of down
option(WEBKIT_BUILD_TYPE "The build type for local WebKit (defaults to CMAKE_BUILD_TYPE)") option(WEBKIT_BUILD_TYPE "The build type for local WebKit (defaults to CMAKE_BUILD_TYPE)")
if(NOT WEBKIT_VERSION) if(NOT WEBKIT_VERSION)
set(WEBKIT_VERSION 515344bc5d65aa2d4f9ff277b5fb944f0e051dcd) set(WEBKIT_VERSION autobuild-preview-pr-153-a73d459b)
endif() endif()
# Use preview build URL for Windows ARM64 until the fix is merged to main # Use preview build URL for Windows ARM64 until the fix is merged to main

View File

@@ -35,7 +35,7 @@ winget install "Visual Studio Community 2022" --override "--add Microsoft.Visual
After Visual Studio, you need the following: After Visual Studio, you need the following:
- LLVM (19.1.7 for x64, 21.1.8 for ARM64) - LLVM 21.1.8
- Go - Go
- Rust - Rust
- NASM - NASM
@@ -51,7 +51,7 @@ After Visual Studio, you need the following:
irm https://get.scoop.sh | iex irm https://get.scoop.sh | iex
scoop install nodejs-lts go rust nasm ruby perl ccache scoop install nodejs-lts go rust nasm ruby perl ccache
# scoop seems to be buggy if you install llvm and the rest at the same time # scoop seems to be buggy if you install llvm and the rest at the same time
scoop install llvm@19.1.7 scoop install llvm@21.1.8
``` ```
For Windows ARM64, download LLVM 21.1.8 directly from GitHub releases (first version with ARM64 Windows builds): For Windows ARM64, download LLVM 21.1.8 directly from GitHub releases (first version with ARM64 Windows builds):

View File

@@ -40,7 +40,7 @@ sudo pacman -S base-devel cmake git go libiconv libtool make ninja pkg-config py
``` ```
```bash Fedora ```bash Fedora
sudo dnf install cargo clang19 llvm19 lld19 cmake git golang libtool ninja-build pkg-config rustc ruby libatomic-static libstdc++-static sed unzip which libicu-devel 'perl(Math::BigInt)' sudo dnf install cargo clang21 llvm21 lld21 cmake git golang libtool ninja-build pkg-config rustc ruby libatomic-static libstdc++-static sed unzip which libicu-devel 'perl(Math::BigInt)'
``` ```
```bash openSUSE Tumbleweed ```bash openSUSE Tumbleweed
@@ -95,17 +95,17 @@ Our build scripts will automatically detect and use `ccache` if available. You c
## Install LLVM ## Install LLVM
Bun requires LLVM 19 (`clang` is part of LLVM). This version requirement is to match WebKit (precompiled), as mismatching versions will cause memory allocation failures at runtime. In most cases, you can install LLVM through your system package manager: Bun requires LLVM 21.1.8 (`clang` is part of LLVM). This version is enforced by the build system — mismatching versions will cause memory allocation failures at runtime. In most cases, you can install LLVM through your system package manager:
<CodeGroup> <CodeGroup>
```bash macOS (Homebrew) ```bash macOS (Homebrew)
brew install llvm@19 brew install llvm@21
``` ```
```bash Ubuntu/Debian ```bash Ubuntu/Debian
# LLVM has an automatic installation script that is compatible with all versions of Ubuntu # LLVM has an automatic installation script that is compatible with all versions of Ubuntu
wget https://apt.llvm.org/llvm.sh -O - | sudo bash -s -- 19 all wget https://apt.llvm.org/llvm.sh -O - | sudo bash -s -- 21 all
``` ```
```bash Arch ```bash Arch
@@ -117,17 +117,17 @@ sudo dnf install llvm clang lld-devel
``` ```
```bash openSUSE Tumbleweed ```bash openSUSE Tumbleweed
sudo zypper install clang19 lld19 llvm19 sudo zypper install clang21 lld21 llvm21
``` ```
</CodeGroup> </CodeGroup>
If none of the above solutions apply, you will have to install it [manually](https://github.com/llvm/llvm-project/releases/tag/llvmorg-19.1.7). If none of the above solutions apply, you will have to install it [manually](https://github.com/llvm/llvm-project/releases/tag/llvmorg-21.1.8).
Make sure Clang/LLVM 19 is in your path: Make sure Clang/LLVM 21 is in your path:
```bash ```bash
which clang-19 which clang-21
``` ```
If not, run this to manually add it: If not, run this to manually add it:
@@ -136,13 +136,13 @@ If not, run this to manually add it:
```bash macOS (Homebrew) ```bash macOS (Homebrew)
# use fish_add_path if you're using fish # use fish_add_path if you're using fish
# use path+="$(brew --prefix llvm@19)/bin" if you are using zsh # use path+="$(brew --prefix llvm@21)/bin" if you are using zsh
export PATH="$(brew --prefix llvm@19)/bin:$PATH" export PATH="$(brew --prefix llvm@21)/bin:$PATH"
``` ```
```bash Arch ```bash Arch
# use fish_add_path if you're using fish # use fish_add_path if you're using fish
export PATH="$PATH:/usr/lib/llvm19/bin" export PATH="$PATH:/usr/lib/llvm21/bin"
``` ```
</CodeGroup> </CodeGroup>
@@ -309,7 +309,7 @@ The issue may manifest when initially running `bun setup` as Clang being unable
```txt ```txt
The C++ compiler The C++ compiler
"/usr/bin/clang++-19" "/usr/bin/clang++-21"
is not able to compile a simple test program. is not able to compile a simple test program.
``` ```

View File

@@ -26,10 +26,10 @@
}; };
}; };
# LLVM 19 - matching the bootstrap script (targets 19.1.7, actual version from nixpkgs-unstable) # LLVM 21 - matching the bootstrap script (targets 21.1.8, actual version from nixpkgs-unstable)
llvm = pkgs.llvm_19; llvm = pkgs.llvm_21;
clang = pkgs.clang_19; clang = pkgs.clang_21;
lld = pkgs.lld_19; lld = pkgs.lld_21;
# Node.js 24 - matching the bootstrap script (targets 24.3.0, actual version from nixpkgs-unstable) # Node.js 24 - matching the bootstrap script (targets 24.3.0, actual version from nixpkgs-unstable)
nodejs = pkgs.nodejs_24; nodejs = pkgs.nodejs_24;
@@ -42,7 +42,7 @@
pkgs.pkg-config pkgs.pkg-config
pkgs.ccache pkgs.ccache
# Compilers and toolchain - version pinned to LLVM 19 # Compilers and toolchain - version pinned to LLVM 21
clang clang
llvm llvm
lld lld

View File

@@ -387,7 +387,7 @@ function Install-PdbAddr2line {
function Install-Llvm { function Install-Llvm {
Install-Package llvm ` Install-Package llvm `
-Command clang-cl ` -Command clang-cl `
-Version "19.1.7" -Version "21.1.8"
Add-To-Path "$env:ProgramFiles\LLVM\bin" Add-To-Path "$env:ProgramFiles\LLVM\bin"
} }

View File

@@ -1096,7 +1096,7 @@ install_build_essentials() {
} }
llvm_version_exact() { llvm_version_exact() {
print "19.1.7" print "21.1.8"
} }
llvm_version() { llvm_version() {
@@ -1106,7 +1106,7 @@ llvm_version() {
install_llvm() { install_llvm() {
case "$pm" in case "$pm" in
apt) apt)
# Debian 13 (Trixie) has LLVM 19 natively, and apt.llvm.org doesn't have a trixie repo # Debian 13 (Trixie) has LLVM 21 natively, and apt.llvm.org doesn't have a trixie repo
if [ "$distro" = "debian" ]; then if [ "$distro" = "debian" ]; then
install_packages \ install_packages \
"llvm-$(llvm_version)" \ "llvm-$(llvm_version)" \
@@ -1177,7 +1177,7 @@ install_gcc() {
;; ;;
esac esac
llvm_v="19" llvm_v="21"
append_to_profile "export CC=clang-${llvm_v}" append_to_profile "export CC=clang-${llvm_v}"
append_to_profile "export CXX=clang++-${llvm_v}" append_to_profile "export CXX=clang++-${llvm_v}"

View File

@@ -77,10 +77,10 @@ const HAS_CCACHE = CCACHE !== null;
// On Windows, use clang-cl for MSVC compatibility // On Windows, use clang-cl for MSVC compatibility
const CC_BASE = IS_WINDOWS const CC_BASE = IS_WINDOWS
? findExecutable(["clang-cl.exe", "clang-cl"]) || "clang-cl" ? findExecutable(["clang-cl.exe", "clang-cl"]) || "clang-cl"
: findExecutable(["clang-19", "clang"]) || "clang"; : findExecutable(["clang-21", "clang"]) || "clang";
const CXX_BASE = IS_WINDOWS const CXX_BASE = IS_WINDOWS
? findExecutable(["clang-cl.exe", "clang-cl"]) || "clang-cl" ? findExecutable(["clang-cl.exe", "clang-cl"]) || "clang-cl"
: findExecutable(["clang++-19", "clang++"]) || "clang++"; : findExecutable(["clang++-21", "clang++"]) || "clang++";
const CC = HAS_CCACHE ? CCACHE : CC_BASE; const CC = HAS_CCACHE ? CCACHE : CC_BASE;
const CXX = HAS_CCACHE ? CCACHE : CXX_BASE; const CXX = HAS_CCACHE ? CCACHE : CXX_BASE;

View File

@@ -12,7 +12,7 @@ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
MODE="${1:-format}" MODE="${1:-format}"
# Use LLVM_VERSION_MAJOR from environment or default to 19 # Use LLVM_VERSION_MAJOR from environment or default to 19
LLVM_VERSION="${LLVM_VERSION_MAJOR:-19}" LLVM_VERSION="${LLVM_VERSION_MAJOR:-21}"
# Ensure we have the specific clang-format version # Ensure we have the specific clang-format version
CLANG_FORMAT="clang-format-${LLVM_VERSION}" CLANG_FORMAT="clang-format-${LLVM_VERSION}"

View File

@@ -8,9 +8,9 @@ pkgs.mkShell rec {
# Core build tools (matching bootstrap.sh) # Core build tools (matching bootstrap.sh)
cmake cmake
ninja ninja
clang_19 clang_21
llvm_19 llvm_21
lld_19 lld_21
nodejs_24 nodejs_24
bun bun
rustc rustc
@@ -77,10 +77,10 @@ pkgs.mkShell rec {
]; ];
shellHook = '' shellHook = ''
export CC="${pkgs.lib.getExe pkgs.clang_19}" export CC="${pkgs.lib.getExe pkgs.clang_21}"
export CXX="${pkgs.lib.getExe' pkgs.clang_19 "clang++"}" export CXX="${pkgs.lib.getExe' pkgs.clang_21 "clang++"}"
export AR="${pkgs.llvm_19}/bin/llvm-ar" export AR="${pkgs.llvm_21}/bin/llvm-ar"
export RANLIB="${pkgs.llvm_19}/bin/llvm-ranlib" export RANLIB="${pkgs.llvm_21}/bin/llvm-ranlib"
export CMAKE_C_COMPILER="$CC" export CMAKE_C_COMPILER="$CC"
export CMAKE_CXX_COMPILER="$CXX" export CMAKE_CXX_COMPILER="$CXX"
export CMAKE_AR="$AR" export CMAKE_AR="$AR"
@@ -88,7 +88,7 @@ pkgs.mkShell rec {
export CMAKE_SYSTEM_PROCESSOR=$(uname -m) export CMAKE_SYSTEM_PROCESSOR=$(uname -m)
export TMPDIR=''${TMPDIR:-/tmp} export TMPDIR=''${TMPDIR:-/tmp}
'' + pkgs.lib.optionalString pkgs.stdenv.isLinux '' '' + pkgs.lib.optionalString pkgs.stdenv.isLinux ''
export LD="${pkgs.lib.getExe' pkgs.lld_19 "ld.lld"}" export LD="${pkgs.lib.getExe' pkgs.lld_21 "ld.lld"}"
export NIX_CFLAGS_LINK="''${NIX_CFLAGS_LINK:+$NIX_CFLAGS_LINK }-fuse-ld=lld" export NIX_CFLAGS_LINK="''${NIX_CFLAGS_LINK:+$NIX_CFLAGS_LINK }-fuse-ld=lld"
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath packages}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath packages}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
'' + '' '' + ''

View File

@@ -55,6 +55,10 @@ template<typename CollectionType, typename KeyType> static auto findInSortedPair
inline void checkEncodingTableInvariants() {} inline void checkEncodingTableInvariants() {}
#endif #endif
// LLVM 21+ -Wcharacter-conversion flags intentional char32_t/char16_t comparisons
// used for Unicode code point range checks in findFirstInSortedPairs.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wcharacter-conversion"
struct CompareFirst { struct CompareFirst {
template<typename TypeA, typename TypeB> bool operator()(const TypeA& a, const TypeB& b) template<typename TypeA, typename TypeB> bool operator()(const TypeA& a, const TypeB& b)
{ {
@@ -132,5 +136,6 @@ template<typename CollectionType, typename KeyType> static auto findInSortedPair
} }
return std::ranges::equal_range(collection, makeFirstAdapter(key), CompareFirst {}); return std::ranges::equal_range(collection, makeFirstAdapter(key), CompareFirst {});
} }
#pragma clang diagnostic pop
} }

View File

@@ -890,7 +890,7 @@ static const GB18030EncodeIndex& gb18030EncodeIndex()
// https://unicode-org.atlassian.net/browse/ICU-22357 // https://unicode-org.atlassian.net/browse/ICU-22357
// The 2-byte values are handled correctly by values from gb18030() // The 2-byte values are handled correctly by values from gb18030()
// but these need to be exceptions from gb18030Ranges(). // but these need to be exceptions from gb18030Ranges().
static std::optional<uint16_t> gb18030AsymmetricEncode(char16_t codePoint) static std::optional<uint16_t> gb18030AsymmetricEncode(char32_t codePoint)
{ {
switch (codePoint) { switch (codePoint) {
case 0xE81E: case 0xE81E:

View File

@@ -302,7 +302,6 @@ extern "C" void JSCInitialize(const char* envp[], size_t envc, void (*onCrash)(c
JSC::Options::useJITCage() = false; JSC::Options::useJITCage() = false;
JSC::Options::useShadowRealm() = true; JSC::Options::useShadowRealm() = true;
JSC::Options::useV8DateParser() = true; JSC::Options::useV8DateParser() = true;
JSC::Options::useMathSumPreciseMethod() = true;
JSC::Options::evalMode() = evalMode; JSC::Options::evalMode() = evalMode;
JSC::Options::heapGrowthSteepnessFactor() = 1.0; JSC::Options::heapGrowthSteepnessFactor() = 1.0;
JSC::Options::heapGrowthMaxIncrease() = 2.0; JSC::Options::heapGrowthMaxIncrease() = 2.0;

View File

@@ -470,7 +470,7 @@ String generatePatternString(const Vector<Part>& partList, const URLPatternStrin
if (!needsGrouping && part.prefix.isEmpty() && previousPart && previousPart->type == PartType::FixedText && !previousPart->value.isEmpty()) { if (!needsGrouping && part.prefix.isEmpty() && previousPart && previousPart->type == PartType::FixedText && !previousPart->value.isEmpty()) {
if (options.prefixCodepoint.length() == 1 if (options.prefixCodepoint.length() == 1
&& options.prefixCodepoint.startsWith(*StringView(previousPart->value).codePoints().codePointAt(previousPart->value.length() - 1))) && options.prefixCodepoint.startsWith(static_cast<char16_t>(*StringView(previousPart->value).codePoints().codePointAt(previousPart->value.length() - 1))))
needsGrouping = true; needsGrouping = true;
} }
@@ -541,7 +541,7 @@ String escapePatternString(StringView input)
} }
// https://urlpattern.spec.whatwg.org/#is-a-valid-name-code-point // https://urlpattern.spec.whatwg.org/#is-a-valid-name-code-point
bool isValidNameCodepoint(char16_t codepoint, URLPatternUtilities::IsFirst first) bool isValidNameCodepoint(char32_t codepoint, URLPatternUtilities::IsFirst first)
{ {
if (first == URLPatternUtilities::IsFirst::Yes) if (first == URLPatternUtilities::IsFirst::Yes)
return u_hasBinaryProperty(codepoint, UCHAR_ID_START) || codepoint == '_' || codepoint == '$'; return u_hasBinaryProperty(codepoint, UCHAR_ID_START) || codepoint == '_' || codepoint == '$';

View File

@@ -104,7 +104,7 @@ ASCIILiteral convertModifierToString(Modifier);
std::pair<String, Vector<String>> generateRegexAndNameList(const Vector<Part>& partList, const URLPatternStringOptions&); std::pair<String, Vector<String>> generateRegexAndNameList(const Vector<Part>& partList, const URLPatternStringOptions&);
String generatePatternString(const Vector<Part>& partList, const URLPatternStringOptions&); String generatePatternString(const Vector<Part>& partList, const URLPatternStringOptions&);
String escapePatternString(StringView input); String escapePatternString(StringView input);
bool isValidNameCodepoint(char16_t codepoint, URLPatternUtilities::IsFirst); bool isValidNameCodepoint(char32_t codepoint, URLPatternUtilities::IsFirst);
} // namespace URLPatternUtilities } // namespace URLPatternUtilities
} // namespace WebCore } // namespace WebCore

View File

@@ -249,32 +249,9 @@ extern "C" __attribute__((used)) char __libc_single_threaded = 0;
#endif #endif
#endif #endif
#ifdef _LIBCPP_VERBOSE_ABORT_NOEXCEPT
// Workaround for this error:
// workaround-missing-symbols.cpp:245:11: error: '__libcpp_verbose_abort' is missing exception specification 'noexcept'
// 2025-07-10 15:59:47 PDT
// 245 | void std::__libcpp_verbose_abort(char const* format, ...)
// 2025-07-10 15:59:47 PDT
// | ^
// 2025-07-10 15:59:47 PDT
// | noexcept
// 2025-07-10 15:59:47 PDT
// /opt/homebrew/Cellar/llvm/20.1.7/bin/../include/c++/v1/__verbose_abort:30:28: note: previous declaration is here
// 2025-07-10 15:59:47 PDT
// 30 | __printf__, 1, 2) void __libcpp_verbose_abort(const char* __format, ...) _LIBCPP_VERBOSE_ABORT_NOEXCEPT;
// 2025-07-10 15:59:47 PDT
// | ^
// 2025-07-10 15:59:47 PDT
// 1 error generated.
// 2025-07-10 15:59:47 PDT
// [515/540] Building CXX
#define BUN_VERBOSE_ABORT_NOEXCEPT _LIBCPP_VERBOSE_ABORT_NOEXCEPT
#else
#define BUN_VERBOSE_ABORT_NOEXCEPT
#endif
// Provide our implementation // Provide our implementation
void std::__libcpp_verbose_abort(char const* format, ...) BUN_VERBOSE_ABORT_NOEXCEPT // LLVM 20 used _LIBCPP_VERBOSE_ABORT_NOEXCEPT, LLVM 21+ uses _NOEXCEPT (always noexcept).
void std::__libcpp_verbose_abort(char const* format, ...) noexcept
{ {
va_list list; va_list list;
va_start(list, format); va_start(list, format);

View File

@@ -82,8 +82,9 @@ JSC_DEFINE_HOST_FUNCTION(functionStartRemoteDebugger,
if (hostValue.isString()) { if (hostValue.isString()) {
auto str = hostValue.toWTFString(globalObject); auto str = hostValue.toWTFString(globalObject);
auto cstr = toCString(str);
if (!str.isEmpty()) if (!str.isEmpty())
host = toCString(str).span().data(); host = cstr.span().data();
} else if (!hostValue.isUndefined()) { } else if (!hostValue.isUndefined()) {
throwVMError(globalObject, scope, throwVMError(globalObject, scope,
createTypeError(globalObject, "host must be a string"_s)); createTypeError(globalObject, "host must be a string"_s));

View File

@@ -1700,8 +1700,8 @@ pub fn dumpStackTrace(trace: std.builtin.StackTrace, limits: WriteStackTraceLimi
const programs: []const [:0]const u8 = switch (bun.Environment.os) { const programs: []const [:0]const u8 = switch (bun.Environment.os) {
.windows => &.{"pdb-addr2line"}, .windows => &.{"pdb-addr2line"},
// if `llvm-symbolizer` doesn't work, also try `llvm-symbolizer-19` // if `llvm-symbolizer` doesn't work, also try `llvm-symbolizer-21`
else => &.{ "llvm-symbolizer", "llvm-symbolizer-19" }, else => &.{ "llvm-symbolizer", "llvm-symbolizer-21" },
}; };
for (programs) |program| { for (programs) |program| {
var arena = bun.ArenaAllocator.init(bun.default_allocator); var arena = bun.ArenaAllocator.init(bun.default_allocator);

View File

@@ -20,8 +20,8 @@ export async function build(dir: string) {
// so we make it use clang instead // so we make it use clang instead
...(process.platform == "linux" && isCI ...(process.platform == "linux" && isCI
? { ? {
CC: !isMusl ? "/usr/lib/llvm-19/bin/clang" : "/usr/lib/llvm19/bin/clang", CC: !isMusl ? "/usr/lib/llvm-21/bin/clang" : "/usr/lib/llvm21/bin/clang",
CXX: !isMusl ? "/usr/lib/llvm-19/bin/clang++" : "/usr/lib/llvm19/bin/clang++", CXX: !isMusl ? "/usr/lib/llvm-21/bin/clang++" : "/usr/lib/llvm21/bin/clang++",
} }
: {}), : {}),
}, },