From ff97622ed0ce362cef3bb505ca5b4bad74740280 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Mon, 14 Jul 2025 11:30:43 -0400 Subject: [PATCH 1/3] [libc++] Bump Xcode support Libc++'s policy is to support only the latest released Xcode, which is Xcode 16.x. We did update our CI jobs to Xcode 16.x, but we forgot to update the documentation, which still mentioned Xcode 15. This patch updates the documentation and cleans up outdated mentions of apple-clang-15 in the test suite. --- libcxx/docs/index.rst | 2 +- libcxx/test/libcxx/algorithms/vectorization.compile.pass.cpp | 3 --- libcxx/test/libcxx/memory/shared_ptr_array.pass.cpp | 1 - libcxx/test/libcxx/vendor/apple/disable-availability.sh.cpp | 4 ---- .../test/std/experimental/simd/simd.class/simd_unary.pass.cpp | 3 --- .../new.delete/new.delete.array/sized_delete_array.pass.cpp | 1 - .../new.delete/new.delete.single/sized_delete.pass.cpp | 1 - libcxx/test/std/numerics/c.math/signbit.pass.cpp | 2 +- .../std/numerics/numeric.ops/numeric.ops.sat/add_sat.pass.cpp | 2 +- .../std/numerics/numeric.ops/numeric.ops.sat/div_sat.pass.cpp | 2 +- .../std/numerics/numeric.ops/numeric.ops.sat/mul_sat.pass.cpp | 2 +- .../numeric.ops/numeric.ops.sat/saturate_cast.pass.cpp | 2 +- .../std/numerics/numeric.ops/numeric.ops.sat/sub_sat.pass.cpp | 2 +- .../range.utility/range.utility.conv/to_deduction.pass.cpp | 3 --- .../meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp | 2 +- .../meta.unary.prop/is_implicit_lifetime.verify.cpp | 2 +- .../reference_constructs_from_temporary.pass.cpp | 2 +- .../reference_converts_from_temporary.pass.cpp | 2 +- 18 files changed, 11 insertions(+), 27 deletions(-) diff --git a/libcxx/docs/index.rst b/libcxx/docs/index.rst index ae9cc87c797f8..a44c3161534b3 100644 --- a/libcxx/docs/index.rst +++ b/libcxx/docs/index.rst @@ -133,7 +133,7 @@ velocity, libc++ drops support for older compilers as newer ones are released. Compiler Versions Restrictions Support policy ============ =================== ========================== ===================== Clang 19, 20, 21-git latest two stable releases per `LLVM's release page `_ and the development version -AppleClang 15 latest stable release per `Xcode's release page `_ +AppleClang 16.4 latest stable release per `Xcode's release page `_ Open XL 17.1.3 (AIX) latest stable release per `Open XL's documentation page `_ GCC 15 In C++11 or later only latest stable release per `GCC's release page `_ ============ =================== ========================== ===================== diff --git a/libcxx/test/libcxx/algorithms/vectorization.compile.pass.cpp b/libcxx/test/libcxx/algorithms/vectorization.compile.pass.cpp index 733a147b80cc3..872c49a35dd76 100644 --- a/libcxx/test/libcxx/algorithms/vectorization.compile.pass.cpp +++ b/libcxx/test/libcxx/algorithms/vectorization.compile.pass.cpp @@ -17,9 +17,6 @@ // We don't vectorize algorithms on AIX right now. // XFAIL: target={{.+}}-aix{{.*}} -// We don't vectorize on AppleClang 15 since that apparently breaks std::mismatch -// XFAIL: apple-clang-15 - // This test ensures that we enable the vectorization of algorithms on the expected // platforms. diff --git a/libcxx/test/libcxx/memory/shared_ptr_array.pass.cpp b/libcxx/test/libcxx/memory/shared_ptr_array.pass.cpp index cc8c743830826..9ff148251a05f 100644 --- a/libcxx/test/libcxx/memory/shared_ptr_array.pass.cpp +++ b/libcxx/test/libcxx/memory/shared_ptr_array.pass.cpp @@ -12,7 +12,6 @@ // These compiler versions and platforms don't enable sized deallocation by default. // ADDITIONAL_COMPILE_FLAGS(clang-17): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(clang-18): -fsized-deallocation -// ADDITIONAL_COMPILE_FLAGS(apple-clang-15): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(apple-clang-16): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(target=x86_64-w64-windows-gnu): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(target=i686-w64-windows-gnu): -fsized-deallocation diff --git a/libcxx/test/libcxx/vendor/apple/disable-availability.sh.cpp b/libcxx/test/libcxx/vendor/apple/disable-availability.sh.cpp index 474b3f83c6044..c131f6414ed3d 100644 --- a/libcxx/test/libcxx/vendor/apple/disable-availability.sh.cpp +++ b/libcxx/test/libcxx/vendor/apple/disable-availability.sh.cpp @@ -8,10 +8,6 @@ // REQUIRES: stdlib=apple-libc++ -// This test is dependent on the code generated by the compiler, and it doesn't -// work properly with older AppleClangs. -// UNSUPPORTED: apple-clang-15 - // This test ensures that we retain a way to disable availability markup on Apple platforms // in order to work around Clang bug https://github.com/llvm/llvm-project/issues/134151. // diff --git a/libcxx/test/std/experimental/simd/simd.class/simd_unary.pass.cpp b/libcxx/test/std/experimental/simd/simd.class/simd_unary.pass.cpp index eb88d90ca18bd..a496938219b05 100644 --- a/libcxx/test/std/experimental/simd/simd.class/simd_unary.pass.cpp +++ b/libcxx/test/std/experimental/simd/simd.class/simd_unary.pass.cpp @@ -12,9 +12,6 @@ // Pass-by-value arguments with alignment greater than register width are not supported. // XFAIL: target=powerpc{{.*}}-ibm-{{.*}} && clang-18 -// This test crashes AppleClang 15 but not later versions. -// UNSUPPORTED: apple-clang-15 - // FIXME: The following issue occurs on Windows to Armv7 Ubuntu Linux: // Assertion failed: N->getValueType(0) == MVT::v1i1 && "Expected v1i1 type" // XFAIL: target=armv7-unknown-linux-gnueabihf diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array.pass.cpp index 175cda39abc24..4cd8fadab2793 100644 --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array.pass.cpp @@ -12,7 +12,6 @@ // These compiler versions and platforms don't enable sized deallocation by default. // ADDITIONAL_COMPILE_FLAGS(clang-18): -fsized-deallocation -// ADDITIONAL_COMPILE_FLAGS(apple-clang-15): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(apple-clang-16): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(apple-clang-17): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(target=x86_64-w64-windows-gnu): -fsized-deallocation diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete.pass.cpp index 29229650cc19e..7b96b01caeda8 100644 --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete.pass.cpp @@ -12,7 +12,6 @@ // These compiler versions and platforms don't enable sized deallocation by default. // ADDITIONAL_COMPILE_FLAGS(clang-18): -fsized-deallocation -// ADDITIONAL_COMPILE_FLAGS(apple-clang-15): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(apple-clang-16): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(apple-clang-17): -fsized-deallocation // ADDITIONAL_COMPILE_FLAGS(target=x86_64-w64-windows-gnu): -fsized-deallocation diff --git a/libcxx/test/std/numerics/c.math/signbit.pass.cpp b/libcxx/test/std/numerics/c.math/signbit.pass.cpp index 46cdfd7cab1f4..2ab4c11b911b6 100644 --- a/libcxx/test/std/numerics/c.math/signbit.pass.cpp +++ b/libcxx/test/std/numerics/c.math/signbit.pass.cpp @@ -12,7 +12,7 @@ // UNSUPPORTED: windows // These compilers don't support constexpr `__builtin_signbit` yet. -// UNSUPPORTED: clang-18, clang-19, apple-clang-15, apple-clang-16, apple-clang-17 +// UNSUPPORTED: clang-18, clang-19, apple-clang-16, apple-clang-17 // GCC warns about signbit comparing `bool_v < 0`, which we're testing // ADDITIONAL_COMPILE_FLAGS(gcc): -Wno-bool-compare diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.pass.cpp index 43481323e800c..6bd112c7d1280 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++26 // The test uses "Placeholder variables with no name" -// UNSUPPORTED: apple-clang-15, apple-clang-16 +// UNSUPPORTED: apple-clang-16 // diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.pass.cpp index ef312b7e3a911..bdfc57694dd53 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++26 // The test uses "Placeholder variables with no name" -// UNSUPPORTED: apple-clang-15, apple-clang-16 +// UNSUPPORTED: apple-clang-16 // diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.pass.cpp index 94bc7ad7c48d4..1fe7916c67823 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++26 // The test uses "Placeholder variables with no name" -// UNSUPPORTED: apple-clang-15, apple-clang-16 +// UNSUPPORTED: apple-clang-16 // diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.pass.cpp index 79d6e2643fc4e..b797ae7533add 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++26 // The test uses "Placeholder variables with no name" -// UNSUPPORTED: apple-clang-15, apple-clang-16 +// UNSUPPORTED: apple-clang-16 // diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.pass.cpp index 92ddc30aefc66..8b6188f1fad0e 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++26 // The test uses "Placeholder variables with no name" -// UNSUPPORTED: apple-clang-15, apple-clang-16 +// UNSUPPORTED: apple-clang-16 // diff --git a/libcxx/test/std/ranges/range.utility/range.utility.conv/to_deduction.pass.cpp b/libcxx/test/std/ranges/range.utility/range.utility.conv/to_deduction.pass.cpp index 58307bd88d0fe..29572ab3c4b13 100644 --- a/libcxx/test/std/ranges/range.utility/range.utility.conv/to_deduction.pass.cpp +++ b/libcxx/test/std/ranges/range.utility/range.utility.conv/to_deduction.pass.cpp @@ -7,9 +7,6 @@ //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 -// There is a bug in older versions of Clang that causes trouble with constraints in classes like -// `ContainerWithDirectCtr`. -// XFAIL: apple-clang-15 // template class C, input_range R, class... Args> // constexpr auto to(R&& r, Args&&... args); // Since C++23 diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp index afd76e65060e3..192943dd820cc 100644 --- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp @@ -9,7 +9,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // These compilers don't support __builtin_is_implicit_lifetime yet. -// UNSUPPORTED: clang-18, clang-19, gcc-14, gcc-15, apple-clang-15, apple-clang-16, apple-clang-17 +// UNSUPPORTED: clang-18, clang-19, gcc-14, gcc-15, apple-clang-16, apple-clang-17 // diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.verify.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.verify.cpp index 34462f9bf0ec6..e5b10f57be084 100644 --- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.verify.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.verify.cpp @@ -9,7 +9,7 @@ // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // These compilers don't support __builtin_is_implicit_lifetime yet. -// UNSUPPORTED: clang-18, clang-19, gcc-14, apple-clang-15, apple-clang-16, apple-clang-17 +// UNSUPPORTED: clang-18, clang-19, gcc-14, apple-clang-16, apple-clang-17 // diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp index 5b3753c67381f..03bec8c2f81d2 100644 --- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++23 // These compilers don't support std::reference_converts_from_temporary yet. -// UNSUPPORTED: android, apple-clang-15, apple-clang-16, clang-19.1 +// UNSUPPORTED: android, apple-clang-16, clang-19.1 // diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp index 849e286c8cdab..82688b10dbf45 100644 --- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp @@ -9,7 +9,7 @@ // REQUIRES: std-at-least-c++23 // These compilers don't support std::reference_converts_from_temporary yet. -// UNSUPPORTED: android, apple-clang-15, apple-clang-16, clang-18, clang-19.1 +// UNSUPPORTED: android, apple-clang-16, clang-18, clang-19.1 // From a6031a42d917e27eff3948300be01c70c4879dc5 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Mon, 14 Jul 2025 17:32:36 -0400 Subject: [PATCH 2/3] Update compiler.h --- libcxx/include/__configuration/compiler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcxx/include/__configuration/compiler.h b/libcxx/include/__configuration/compiler.h index 4b6c6cad353e3..11c07ed0dc474 100644 --- a/libcxx/include/__configuration/compiler.h +++ b/libcxx/include/__configuration/compiler.h @@ -37,7 +37,7 @@ # warning "Libc++ only supports Clang 19 and later" # endif # elif defined(_LIBCPP_APPLE_CLANG_VER) -# if _LIBCPP_APPLE_CLANG_VER < 1500 +# if _LIBCPP_APPLE_CLANG_VER < 1600 # warning "Libc++ only supports AppleClang 15 and later" # endif # elif defined(_LIBCPP_GCC_VER) From 591a3bee394c7d622ff923492147d8eeb11326e9 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Mon, 14 Jul 2025 17:33:39 -0400 Subject: [PATCH 3/3] Remove AppleClang 15 check --- libcxx/include/__algorithm/simd_utils.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libcxx/include/__algorithm/simd_utils.h b/libcxx/include/__algorithm/simd_utils.h index 47942a09e67c5..07fef20f6166d 100644 --- a/libcxx/include/__algorithm/simd_utils.h +++ b/libcxx/include/__algorithm/simd_utils.h @@ -26,9 +26,7 @@ _LIBCPP_PUSH_MACROS #include <__undef_macros> // TODO: Find out how altivec changes things and allow vectorizations there too. -// TODO: Simplify this condition once we stop building with AppleClang 15 in the CI. -#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_COMPILER_CLANG_BASED) && !defined(__ALTIVEC__) && \ - !(defined(_LIBCPP_APPLE_CLANG_VER) && _LIBCPP_APPLE_CLANG_VER < 1600) +#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_COMPILER_CLANG_BASED) && !defined(__ALTIVEC__) # define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 1 #else # define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 0