[libcxx-commits] [libcxx] [libcxxabi] [libc++] Fill in Apple availability for LLVM 21 (PR #202347)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jun 9 10:54:09 PDT 2026
https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/202347
>From e91a13d7df2a617256301cc391ebb4110980c81d Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Mon, 8 Jun 2026 16:15:46 +0200
Subject: [PATCH 1/3] [libc++] Fill in Apple availability for LLVM 21
macOS 26.4 and aligned platforms have been released and they are roughly
synchronized to libc++ 21. As a drive-by, also add missing versions for
previous releases.
This also allows reverting #199682 which moved an XFAIL to UNSUPPORTED
to silence CI failures temporarily.
---
libcxx/include/__configuration/availability.h | 32 +++++++++++++++----
.../string.capacity/over_max_size.pass.cpp | 2 +-
.../libcxx/test/features/availability.py | 4 +--
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/libcxx/include/__configuration/availability.h b/libcxx/include/__configuration/availability.h
index f1a598b5206f4..395374df0b1cc 100644
--- a/libcxx/include/__configuration/availability.h
+++ b/libcxx/include/__configuration/availability.h
@@ -76,9 +76,23 @@
# define _LIBCPP_INTRODUCED_IN_LLVM_22_ATTRIBUTE __attribute__((unavailable))
// LLVM 21
-// TODO: Fill this in
-# define _LIBCPP_INTRODUCED_IN_LLVM_21 0
-# define _LIBCPP_INTRODUCED_IN_LLVM_21_ATTRIBUTE __attribute__((unavailable))
+# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 260400) || \
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 260400) || \
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 260400) || \
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 260400) || \
+ (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 100400) || \
+ (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 250400)
+# define _LIBCPP_INTRODUCED_IN_LLVM_21 0
+# else
+# define _LIBCPP_INTRODUCED_IN_LLVM_21 1
+# endif
+# define _LIBCPP_INTRODUCED_IN_LLVM_21_ATTRIBUTE \
+ __attribute__((availability(macos, strict, introduced = 26.4))) \
+ __attribute__((availability(ios, strict, introduced = 26.4))) \
+ __attribute__((availability(tvos, strict, introduced = 26.4))) \
+ __attribute__((availability(watchos, strict, introduced = 26.4))) \
+ __attribute__((availability(bridgeos, strict, introduced = 10.4))) \
+ __attribute__((availability(driverkit, strict, introduced = 25.4)))
// LLVM 20
//
@@ -87,7 +101,8 @@
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 260000) || \
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 260000) || \
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 260000) || \
- (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 100000)
+ (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 100000) || \
+ (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 250000)
# define _LIBCPP_INTRODUCED_IN_LLVM_20 0
# else
# define _LIBCPP_INTRODUCED_IN_LLVM_20 1
@@ -97,14 +112,16 @@
__attribute__((availability(ios, strict, introduced = 26.0))) \
__attribute__((availability(tvos, strict, introduced = 26.0))) \
__attribute__((availability(watchos, strict, introduced = 26.0))) \
- __attribute__((availability(bridgeos, strict, introduced = 10.0)))
+ __attribute__((availability(bridgeos, strict, introduced = 10.0))) \
+ __attribute__((availability(driverkit, strict, introduced = 25.0)))
// LLVM 19
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 150400) || \
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 180400) || \
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 180400) || \
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 110400) || \
- (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 90400)
+ (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 90400) || \
+ (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 240400)
# define _LIBCPP_INTRODUCED_IN_LLVM_19 0
# else
# define _LIBCPP_INTRODUCED_IN_LLVM_19 1
@@ -114,7 +131,8 @@
__attribute__((availability(ios, strict, introduced = 18.4))) \
__attribute__((availability(tvos, strict, introduced = 18.4))) \
__attribute__((availability(watchos, strict, introduced = 11.4))) \
- __attribute__((availability(bridgeos, strict, introduced = 9.4)))
+ __attribute__((availability(bridgeos, strict, introduced = 9.4))) \
+ __attribute__((availability(driverkit, strict, introduced = 24.4)))
// LLVM 18
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 150000) || \
diff --git a/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
index 8c829605f5e78..8e5919539d94e 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
@@ -14,7 +14,7 @@
// than it really is, and we fail to throw `length_error` from `string::resize()`,
// which is explicitly instantiated in the built library.
//
-// UNSUPPORTED: using-built-library-before-llvm-21
+// XFAIL: using-built-library-before-llvm-21
// <string>
diff --git a/libcxx/utils/libcxx/test/features/availability.py b/libcxx/utils/libcxx/test/features/availability.py
index 39c6cf45a1708..374e85959333b 100644
--- a/libcxx/utils/libcxx/test/features/availability.py
+++ b/libcxx/utils/libcxx/test/features/availability.py
@@ -22,14 +22,14 @@
Feature(
name="_target-has-llvm-21",
when=lambda cfg: BooleanExpression.evaluate(
- "TBD",
+ r"_target-has-llvm-22 || target={{.+}}-apple-macosx{{26.[4-9](.\d+)?}}",
cfg.available_features,
),
),
Feature(
name="_target-has-llvm-20",
when=lambda cfg: BooleanExpression.evaluate(
- r"_target-has-llvm-21 || target={{.+}}-apple-macosx{{26.[0-9](.\d+)?}}",
+ r"_target-has-llvm-21 || target={{.+}}-apple-macosx{{26.[0-3](.\d+)?}}",
cfg.available_features,
),
),
>From 92db44e51b68a44ee0bd9134e34a4b72ef3c848f Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Tue, 9 Jun 2026 09:44:40 +0200
Subject: [PATCH 2/3] Add missing XFAIL for demangle test
---
libcxxabi/test/test_demangle.pass.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp
index 6790d7074a8b7..342bba10ea4ae 100644
--- a/libcxxabi/test/test_demangle.pass.cpp
+++ b/libcxxabi/test/test_demangle.pass.cpp
@@ -17,6 +17,11 @@
// 20f56d140909a01c74e9981835373eaab6021af9.
// UNSUPPORTED: using-built-library-before-llvm-21
+// This test exercises support for stripping the __alloc_token_ prefix
+// (fb6f1bde00c4) and for pack indexing type/expression mangling
+// (68e8dd698dc6), both introduced in the LLVM 23 release.
+// XFAIL: using-built-library-before-llvm-23
+
// XFAIL: win32-broken-printf-a-precision
#include "support/timer.h"
>From 1b1820edad21fd79e5b8f8da22a954ab7ef104fa Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Tue, 9 Jun 2026 18:04:18 +0200
Subject: [PATCH 3/3] Add missing LLVM 23 availability stub
---
libcxx/include/__configuration/availability.h | 8 ++++++++
libcxx/utils/libcxx/test/features/availability.py | 11 +++++++++--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/libcxx/include/__configuration/availability.h b/libcxx/include/__configuration/availability.h
index 395374df0b1cc..c2aa98526dedb 100644
--- a/libcxx/include/__configuration/availability.h
+++ b/libcxx/include/__configuration/availability.h
@@ -39,6 +39,9 @@
// in all versions of the library are available.
#if !_LIBCPP_HAS_VENDOR_AVAILABILITY_ANNOTATIONS
+# define _LIBCPP_INTRODUCED_IN_LLVM_23 1
+# define _LIBCPP_INTRODUCED_IN_LLVM_23_ATTRIBUTE /* nothing */
+
# define _LIBCPP_INTRODUCED_IN_LLVM_22 1
# define _LIBCPP_INTRODUCED_IN_LLVM_22_ATTRIBUTE /* nothing */
@@ -70,6 +73,11 @@
// clang-format off
+// LLVM 23
+// TODO: Fill this in
+# define _LIBCPP_INTRODUCED_IN_LLVM_23 0
+# define _LIBCPP_INTRODUCED_IN_LLVM_23_ATTRIBUTE __attribute__((unavailable))
+
// LLVM 22
// TODO: Fill this in
# define _LIBCPP_INTRODUCED_IN_LLVM_22 0
diff --git a/libcxx/utils/libcxx/test/features/availability.py b/libcxx/utils/libcxx/test/features/availability.py
index 374e85959333b..bae7b33d2130b 100644
--- a/libcxx/utils/libcxx/test/features/availability.py
+++ b/libcxx/utils/libcxx/test/features/availability.py
@@ -13,12 +13,19 @@
# Those are used for backdeployment features below, do not use directly in tests.
features = [
Feature(
- name="_target-has-llvm-22",
+ name="_target-has-llvm-23",
when=lambda cfg: BooleanExpression.evaluate(
"TBD",
cfg.available_features,
),
),
+ Feature(
+ name="_target-has-llvm-22",
+ when=lambda cfg: BooleanExpression.evaluate(
+ "_target-has-llvm-23",
+ cfg.available_features,
+ ),
+ ),
Feature(
name="_target-has-llvm-21",
when=lambda cfg: BooleanExpression.evaluate(
@@ -128,7 +135,7 @@
# a libc++ flavor that enables availability markup. Similarly, a test could fail when
# run against the system library of an older version of FreeBSD, even though FreeBSD
# doesn't provide availability markup at the time of writing this.
-for version in ("12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"):
+for version in ("12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"):
features.append(
Feature(
name="using-built-library-before-llvm-{}".format(version),
More information about the libcxx-commits
mailing list