diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.compile.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.compile.pass.cpp index 38b6d627869a0..23f780cfc2b5e 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.compile.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/add_sat.compile.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // 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 036bf53e36dcd..43481323e800c 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 @@ -6,7 +6,10 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 + +// The test uses "Placeholder variables with no name" +// UNSUPPORTED: apple-clang-15, apple-clang-16 // @@ -25,8 +28,7 @@ constexpr bool test_signed() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::add_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::add_sat(minVal, maxVal); static_assert(noexcept(std::add_sat(minVal, maxVal))); @@ -97,8 +99,7 @@ constexpr bool test_unsigned() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::add_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::add_sat(minVal, maxVal); static_assert(noexcept(std::add_sat(minVal, maxVal))); diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.assert.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.assert.pass.cpp index b1ef8345d51e6..50bc29bee4d53 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.assert.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.assert.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // REQUIRES: has-unix-headers // REQUIRES: libcpp-hardening-mode={{extensive|debug}} diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.compile.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.compile.pass.cpp index 32d77f710bd70..02ffb17292164 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.compile.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/div_sat.compile.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // 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 b1cace74d8828..ef312b7e3a911 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 @@ -6,8 +6,10 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 + // The test uses "Placeholder variables with no name" +// UNSUPPORTED: apple-clang-15, apple-clang-16 // @@ -26,8 +28,7 @@ constexpr bool test_signed() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] and `{}` scope since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::div_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::div_sat(minVal, maxVal); static_assert(noexcept(std::div_sat(minVal, maxVal))); @@ -89,8 +90,7 @@ constexpr bool test_unsigned() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::div_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::div_sat(minVal, maxVal); static_assert(noexcept(std::div_sat(minVal, maxVal))); // clang-format off diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.compile.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.compile.pass.cpp index f1762d2591199..cd572a73006a8 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.compile.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/mul_sat.compile.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // 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 2c8eec57e1204..94bc7ad7c48d4 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 @@ -6,8 +6,10 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 + // The test uses "Placeholder variables with no name" +// UNSUPPORTED: apple-clang-15, apple-clang-16 // @@ -26,8 +28,7 @@ constexpr bool test_signed() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::mul_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::mul_sat(minVal, maxVal); static_assert(noexcept(std::mul_sat(minVal, maxVal))); @@ -103,8 +104,7 @@ constexpr bool test_unsigned() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::mul_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::mul_sat(minVal, maxVal); static_assert(noexcept(std::mul_sat(minVal, maxVal))); diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.compile.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.compile.pass.cpp index 9b035c1e3c4e5..237deb0c7c138 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.compile.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/saturate_cast.compile.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // 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 cbca37e3a6613..79d6e2643fc4e 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 @@ -6,7 +6,10 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 + +// The test uses "Placeholder variables with no name" +// UNSUPPORTED: apple-clang-15, apple-clang-16 // @@ -20,7 +23,6 @@ #include #include "test_macros.h" -#include // Smaller to larger static_assert(noexcept(std::saturate_cast(std::numeric_limits::max()))); @@ -72,314 +74,312 @@ constexpr bool test() { // signed char - // TODO(LLVM-20) remove [[maybe_unused]] and `{}` scope since all supported compilers support "Placeholder variables with no name", - // here and below... - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == SCHAR_MIN); assert(std::saturate_cast( O_C) == O_C); assert(std::saturate_cast(SCHAR_MAX) == SCHAR_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == O_C); assert(std::saturate_cast(UCHAR_MAX) == SCHAR_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast(sBigMin) == SCHAR_MIN); // saturated assert(std::saturate_cast( sZero) == O_C); assert(std::saturate_cast(sBigMax) == SCHAR_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == O_C); assert(std::saturate_cast(uBigMax) == SCHAR_MAX); // saturated // short - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == static_cast(SCHAR_MIN)); assert(std::saturate_cast( O_C) == O_S); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == O_S); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SHRT_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SHRT_MAX); assert(std::saturate_cast( SHRT_MIN) == SHRT_MIN); assert(std::saturate_cast( O_S) == O_S); assert(std::saturate_cast( SHRT_MAX) == SHRT_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(USHRT_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(USHRT_MAX); assert(std::saturate_cast( O_US) == O_S); assert(std::saturate_cast(USHRT_MAX) == SHRT_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == SHRT_MIN); // saturated assert(std::saturate_cast( sZero) == O_S); assert(std::saturate_cast( sBigMax) == SHRT_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == O_S); assert(std::saturate_cast( uBigMax) == SHRT_MAX); // saturated // int - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == static_cast(SCHAR_MIN)); assert(std::saturate_cast( O_C) == 0); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == 0); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(INT_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(INT_MAX); assert(std::saturate_cast( INT_MIN) == INT_MIN); assert(std::saturate_cast( 0) == 0); assert(std::saturate_cast( INT_MAX) == INT_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UINT_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UINT_MAX); assert(std::saturate_cast( 0) == 0); assert(std::saturate_cast(UINT_MAX) == INT_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == INT_MIN); // saturated assert(std::saturate_cast( sZero) == 0); assert(std::saturate_cast( sBigMax) == INT_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == 0); assert(std::saturate_cast( uBigMax) == INT_MAX); // saturated // long - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == static_cast(SCHAR_MIN)); assert(std::saturate_cast( O_C) == 0L); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == 0L); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(LONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(LONG_MAX); assert(std::saturate_cast( LONG_MIN) == LONG_MIN); assert(std::saturate_cast( 0L) == 0L); assert(std::saturate_cast( LONG_MAX) == LONG_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(ULONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(ULONG_MAX); assert(std::saturate_cast( 0UL) == 0L); assert(std::saturate_cast(ULONG_MAX) == LONG_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == LONG_MIN); // saturated assert(std::saturate_cast( sZero) == 0L); assert(std::saturate_cast( sBigMax) == LONG_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == 0L); assert(std::saturate_cast( uBigMax) == LONG_MAX); // saturated // long long - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == static_cast(SCHAR_MIN)); assert(std::saturate_cast( 0LL) == 0LL); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == 0LL); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(LLONG_MIN); } + std::same_as decltype(auto) _ = std::saturate_cast(LLONG_MIN); assert(std::saturate_cast(LLONG_MIN) == LLONG_MIN); assert(std::saturate_cast( 0LL) == 0LL); assert(std::saturate_cast(LLONG_MAX) == LLONG_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(ULLONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(ULLONG_MAX); assert(std::saturate_cast( 0ULL) == 0LL); assert(std::saturate_cast(ULLONG_MAX) == LLONG_MAX); // saturated #ifndef TEST_HAS_NO_INT128 - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == LLONG_MIN); // (128-bit) saturated assert(std::saturate_cast( sZero) == 0LL); assert(std::saturate_cast( sBigMax) == LLONG_MAX); // (128-bit) saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == 0LL); assert(std::saturate_cast( uBigMax) == LLONG_MAX); // (128-bit) saturated - { [[maybe_unused]] std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(SCHAR_MAX); } + std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(SCHAR_MAX); assert(std::saturate_cast<__int128_t>(SCHAR_MIN) == static_cast<__int128_t>(SCHAR_MIN)); assert(std::saturate_cast<__int128_t>( O_C) == sZero); assert(std::saturate_cast<__int128_t>(SCHAR_MAX) == static_cast<__int128_t>(SCHAR_MAX)); - { [[maybe_unused]] std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(UCHAR_MAX); } + std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(UCHAR_MAX); assert(std::saturate_cast<__int128_t>( O_UC) == sZero); assert(std::saturate_cast<__int128_t>(UCHAR_MAX) == static_cast<__int128_t>(UCHAR_MAX)); - { [[maybe_unused]] std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(sBigMax); } + std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(sBigMax); assert(std::saturate_cast<__int128_t>( sBigMin) == sBigMin); assert(std::saturate_cast<__int128_t>( sZero) == sZero); assert(std::saturate_cast<__int128_t>( sBigMax) == sBigMax); - { [[maybe_unused]] std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(uBigMax); } + std::same_as<__int128_t> decltype(auto) _ = std::saturate_cast<__int128_t>(uBigMax); assert(std::saturate_cast<__int128_t>( uZero) == sZero); assert(std::saturate_cast<__int128_t>( uBigMax) == sBigMax); // saturated #endif // unsigned char - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == O_UC); assert(std::saturate_cast( O_C) == O_UC); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == O_UC); assert(std::saturate_cast(UCHAR_MAX) == UCHAR_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == O_UC); // saturated assert(std::saturate_cast( sZero) == O_UC); assert(std::saturate_cast( sBigMax) == UCHAR_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == O_UC); assert(std::saturate_cast( uBigMax) == UCHAR_MAX); // saturated // unsigned short - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == O_US); assert(std::saturate_cast( O_C) == O_US); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == O_US); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MIN); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MIN); assert(std::saturate_cast( SHRT_MIN) == O_US); assert(std::saturate_cast( O_S) == O_US); assert(std::saturate_cast( SHRT_MAX) == static_cast(SHRT_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_US) == O_US); assert(std::saturate_cast(USHRT_MAX) == USHRT_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == O_US); // saturated assert(std::saturate_cast( sZero) == O_US); assert(std::saturate_cast( sBigMax) == USHRT_MAX); // saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == O_US); assert(std::saturate_cast( uBigMax) == USHRT_MAX); // saturated // unsigned int - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == O_US); assert(std::saturate_cast( O_UC) == 0U); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == 0U); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(INT_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(INT_MAX); assert(std::saturate_cast( INT_MIN) == 0U); assert(std::saturate_cast( 0) == 0U); assert(std::saturate_cast( INT_MAX) == static_cast(INT_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UINT_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UINT_MAX); assert(std::saturate_cast( 0U) == 0U); assert(std::saturate_cast( UINT_MAX) == UINT_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == 0U); // saturated assert(std::saturate_cast( sZero) == 0U); assert(std::saturate_cast( sBigMax) == UINT_MAX); // saturated - - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == 0U); assert(std::saturate_cast( uBigMax) == UINT_MAX); // saturated // unsigned long - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast(SCHAR_MIN) == 0UL); assert(std::saturate_cast( O_C) == 0UL); assert(std::saturate_cast(SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == 0UL); assert(std::saturate_cast(UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(LONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(LONG_MAX); assert(std::saturate_cast( LONG_MIN) == 0UL); assert(std::saturate_cast( 0L) == 0UL); assert(std::saturate_cast( LONG_MAX) == static_cast(LONG_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(ULONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(ULONG_MAX); assert(std::saturate_cast( 0UL) == 0UL); assert(std::saturate_cast(ULONG_MAX) == ULONG_MAX); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == 0UL); // saturated assert(std::saturate_cast( sZero) == 0UL); assert(std::saturate_cast( sBigMax) == (sizeof(UIntT) > sizeof(unsigned long int) ? ULONG_MAX : LONG_MAX)); // saturated depending on underlying types - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == 0UL); assert(std::saturate_cast( uBigMax) == ULONG_MAX); // saturated // unsigned long long - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(SCHAR_MAX); assert(std::saturate_cast( SCHAR_MIN) == 0ULL); assert(std::saturate_cast( O_C) == 0ULL); assert(std::saturate_cast( SCHAR_MAX) == static_cast(SCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(UCHAR_MAX); assert(std::saturate_cast( O_UC) == 0ULL); assert(std::saturate_cast( UCHAR_MAX) == static_cast(UCHAR_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(LLONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(LLONG_MAX); assert(std::saturate_cast( LLONG_MIN) == 0ULL); assert(std::saturate_cast( 0LL) == 0ULL); assert(std::saturate_cast( LLONG_MAX) == static_cast(LLONG_MAX)); - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(ULLONG_MAX); } + std::same_as decltype(auto) _ = std::saturate_cast(ULLONG_MAX); assert(std::saturate_cast( 0ULL) == 0ULL); assert(std::saturate_cast(ULLONG_MAX) == ULLONG_MAX); #ifndef TEST_HAS_NO_INT128 - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(sBigMax); assert(std::saturate_cast( sBigMin) == 0ULL); // (128-bit) saturated assert(std::saturate_cast( sZero) == 0ULL); assert(std::saturate_cast( sBigMax) == ULLONG_MAX); // (128-bit) saturated - { [[maybe_unused]] std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); } + std::same_as decltype(auto) _ = std::saturate_cast(uBigMax); assert(std::saturate_cast( uZero) == 0ULL); assert(std::saturate_cast( uBigMax) == ULLONG_MAX); // (128-bit) saturated - { [[maybe_unused]] std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(SCHAR_MIN); } + std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(SCHAR_MIN); assert(std::saturate_cast<__uint128_t>(SCHAR_MIN) == uZero); assert(std::saturate_cast<__uint128_t>( O_C) == uZero); assert(std::saturate_cast<__uint128_t>(SCHAR_MAX) == static_cast<__uint128_t>(SCHAR_MAX)); - { [[maybe_unused]] std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(UCHAR_MAX); } + std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(UCHAR_MAX); assert(std::saturate_cast<__uint128_t>( O_UC) == uZero); assert(std::saturate_cast<__uint128_t>(UCHAR_MAX) == static_cast<__uint128_t>(UCHAR_MAX)); - { [[maybe_unused]] std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(sBigMax); } + std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(sBigMax); assert(std::saturate_cast<__uint128_t>( sBigMin) == uZero); // saturated assert(std::saturate_cast<__uint128_t>( sZero) == uZero); assert(std::saturate_cast<__uint128_t>( sBigMax) == static_cast<__uint128_t>(sBigMax)); - { [[maybe_unused]] std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(uBigMax); } + std::same_as<__uint128_t> decltype(auto) _ = std::saturate_cast<__uint128_t>(uBigMax); assert(std::saturate_cast<__uint128_t>( uZero) == uZero); assert(std::saturate_cast<__uint128_t>( uBigMax) == uBigMax); #endif diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.compile.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.compile.pass.cpp index 9234819d9ec24..453b9b3600f8a 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.compile.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.sat/sub_sat.compile.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // 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 d7bdf2c0271ac..92ddc30aefc66 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 @@ -6,8 +6,10 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 + // The test uses "Placeholder variables with no name" +// UNSUPPORTED: apple-clang-15, apple-clang-16 // @@ -26,8 +28,7 @@ constexpr bool test_signed() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::sub_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::sub_sat(minVal, maxVal); static_assert(noexcept(std::sub_sat(minVal, maxVal))); @@ -89,8 +90,7 @@ constexpr bool test_unsigned() { constexpr auto minVal = std::numeric_limits::min(); constexpr auto maxVal = std::numeric_limits::max(); - // TODO(LLVM-20) remove [[maybe_unused]] since all supported compilers support "Placeholder variables with no name" - [[maybe_unused]] std::same_as decltype(auto) _ = std::sub_sat(minVal, maxVal); + std::same_as decltype(auto) _ = std::sub_sat(minVal, maxVal); static_assert(noexcept(std::sub_sat(minVal, maxVal)));