[libcxx-commits] [libcxx] [libcxxabi] [libc++] Fix localization failures on macOS 15.4 (PR #138744)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Sep 18 08:28:47 PDT 2025
https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/138744
>From 615221ed43f0062a2f3405f57544e4cc04488cc5 Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Tue, 6 May 2025 15:13:11 -0400
Subject: [PATCH] [libc++] Fix localization failures with recent macOS versions
This patch reverts e15025dd and 88e15b781 which were temporary measures
until we had figured out the underlying issues. It turns out that recent
OSes updated localization data, removing the need for several Apple-specific
workarounds in the tests.
Fixes #135385
---
.../ios.base.cons/dtor.uninitialized.pass.cpp | 3 --
.../fstreams/filebuf.virtuals/setbuf.pass.cpp | 3 --
.../istream.unformatted/sync.pass.cpp | 3 --
.../locale.collate.byname/compare.pass.cpp | 16 ------
.../get_long_double_fr_FR.pass.cpp | 5 --
.../get_long_double_ru_RU.pass.cpp | 3 --
.../get_long_double_zh_CN.pass.cpp | 27 +++++-----
.../put_long_double_fr_FR.pass.cpp | 5 --
.../put_long_double_ru_RU.pass.cpp | 3 --
.../put_long_double_zh_CN.pass.cpp | 43 ++++++++--------
.../curr_symbol.pass.cpp | 15 +-----
.../grouping.pass.cpp | 5 --
.../neg_format.pass.cpp | 35 ++-----------
.../pos_format.pass.cpp | 10 +---
.../facet.num.get.members/get_double.pass.cpp | 3 --
.../facet.num.get.members/get_float.pass.cpp | 3 --
.../get_long_double.pass.cpp | 3 --
.../locale.numpunct.byname/grouping.pass.cpp | 7 +--
.../thousands_sep.pass.cpp | 5 +-
.../time.duration.nonmember/ostream.pass.cpp | 10 ----
.../time/time.syn/formatter.duration.pass.cpp | 51 -------------------
.../time.syn/formatter.file_time.pass.cpp | 19 -------
.../time/time.syn/formatter.hh_mm_ss.pass.cpp | 35 -------------
.../time.syn/formatter.local_time.pass.cpp | 19 -------
.../time/time.syn/formatter.sys_time.pass.cpp | 19 -------
libcxx/test/support/locale_helpers.h | 12 +++++
libcxxabi/test/uncaught_exception.pass.cpp | 3 --
27 files changed, 54 insertions(+), 311 deletions(-)
diff --git a/libcxx/test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp b/libcxx/test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp
index f17c1483c4a99..e5d48a35f4fd7 100644
--- a/libcxx/test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp
+++ b/libcxx/test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: no-exceptions
// The fix for issue 57964 requires an updated dylib due to explicit
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp
index 9d14abcedd423..72af0a2db1180 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// <fstream>
// basic_streambuf<charT, traits>* setbuf(char_type* s, streamsize n) override;
diff --git a/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/sync.pass.cpp b/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/sync.pass.cpp
index 3b685950d36a6..79d20ce68d11b 100644
--- a/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/sync.pass.cpp
+++ b/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/sync.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// <istream>
// int sync();
diff --git a/libcxx/test/std/localization/locale.categories/category.collate/locale.collate.byname/compare.pass.cpp b/libcxx/test/std/localization/locale.categories/category.collate/locale.collate.byname/compare.pass.cpp
index 4905ed40f4a24..8ae6bc2d3ba66 100644
--- a/libcxx/test/std/localization/locale.categories/category.collate/locale.collate.byname/compare.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.collate/locale.collate.byname/compare.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// Bionic has minimal locale support, investigate this later.
// XFAIL: LIBCXX-ANDROID-FIXME
@@ -56,14 +53,7 @@ int main(int, char**)
ASSERT_COMPARE(std::string, "AAA", "BBB", -1);
ASSERT_COMPARE(std::string, "bbb", "aaa", 1);
ASSERT_COMPARE(std::string, "ccc", "ccc", 0);
-
-#if defined(__APPLE__)
- // Apple's default collation is case-sensitive
- ASSERT_COMPARE(std::string, "aaaaaaA", "BaaaaaA", 1);
-#else
- // Glibc, Windows, and FreeBSD's default collation is case-insensitive
ASSERT_COMPARE(std::string, "aaaaaaA", "BaaaaaA", -1);
-#endif
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
@@ -73,13 +63,7 @@ int main(int, char**)
ASSERT_COMPARE(std::wstring, L"AAA", L"BBB", -1);
ASSERT_COMPARE(std::wstring, L"bbb", L"aaa", 1);
ASSERT_COMPARE(std::wstring, L"ccc", L"ccc", 0);
-#if defined(__APPLE__)
- // Apple's default collation is case-sensitive
- ASSERT_COMPARE(std::wstring, L"aaaaaaA", L"BaaaaaA", 1);
-#else
- // Glibc, Windows, and FreeBSD's default collation is case-insensitive
ASSERT_COMPARE(std::wstring, L"aaaaaaA", L"BaaaaaA", -1);
-#endif
}
#endif
}
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
index ea6b07934510a..c9ed59f3cb9aa 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
@@ -6,11 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
-// XFAIL: darwin
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU.pass.cpp
index f98758d086de1..371cf0e90c8d3 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp
index 6980b7ae77db0..c86df7e6b53bf 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
@@ -158,7 +155,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative one, showbase
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
std::string v = "-" + currency_symbol + "0.01";
#else
std::string v = currency_symbol + "-0.01";
@@ -172,7 +169,7 @@ int main(int, char**)
assert(ex == -1);
}
{ // negative one, showbase
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
std::string v = "-" + currency_symbol + "0.01";
#else
std::string v = currency_symbol + "-0.01";
@@ -212,7 +209,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative, showbase
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
std::string v = "-" + currency_symbol + "1,234,567.89";
#else
std::string v = currency_symbol + "-1,234,567.89";
@@ -333,7 +330,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative one, showbase
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
std::string v = "-" + currency_name + "0.01";
#else
std::string v = currency_name + "-0.01";
@@ -348,7 +345,7 @@ int main(int, char**)
assert(ex == -1);
}
{ // negative one, showbase
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
std::string v = "-" + currency_name + "0.01";
#else
std::string v = currency_name + "-0.01";
@@ -389,7 +386,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative, showbase
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
std::string v = "-" + currency_name + "1,234,567.89";
#else
std::string v = currency_name + "-1,234,567.89";
@@ -518,7 +515,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative one, showbase
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
std::wstring v = L"-" + w_currency_symbol + L"0.01";
# else
std::wstring v = w_currency_symbol + L"-0.01";
@@ -532,7 +529,7 @@ int main(int, char**)
assert(ex == -1);
}
{ // negative one, showbase
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
std::wstring v = L"-" + w_currency_symbol + L"0.01";
# else
std::wstring v = w_currency_symbol + L"-0.01";
@@ -572,7 +569,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative, showbase
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
std::wstring v = L"-" + w_currency_symbol + L"1,234,567.89";
# else
std::wstring v = w_currency_symbol + L"-1,234,567.89";
@@ -693,7 +690,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative one, showbase
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
std::wstring v = L"-" + w_currency_name + L"0.01";
# else
std::wstring v = w_currency_name + L"-0.01";
@@ -707,7 +704,7 @@ int main(int, char**)
assert(ex == -1);
}
{ // negative one, showbase
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
std::wstring v = L"-" + w_currency_name + L"0.01";
# else
std::wstring v = w_currency_name + L"-0.01";
@@ -747,7 +744,7 @@ int main(int, char**)
std::noshowbase(ios);
}
{ // negative, showbase
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
std::wstring v = L"-" + w_currency_name + L"1,234,567.89";
# else
std::wstring v = w_currency_name + L"-1,234,567.89";
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
index 14745996b9fd1..f9d7998b07ff4 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
@@ -6,11 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
-// XFAIL: darwin
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
index 0455e5949c44a..be1e397488468 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp
index 68640fabb73b0..25046a8417083 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
@@ -122,7 +119,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), false, ios, '*', v);
std::string ex(str, base(iter));
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_symbol + "0.01");
#else
assert(ex == currency_symbol + "-0.01");
@@ -142,7 +139,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), false, ios, '*', v);
std::string ex(str, base(iter));
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_symbol + "1,234,567.89");
#else
assert(ex == currency_symbol + "-1,234,567.89");
@@ -156,7 +153,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), false, ios, ' ', v);
std::string ex(str, base(iter));
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_symbol + "1,234,567.89" + currency_symbol_padding);
#else
assert(ex == currency_symbol + "-1,234,567.89" + currency_symbol_padding);
@@ -171,7 +168,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), false, ios, ' ', v);
std::string ex(str, base(iter));
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_symbol + currency_symbol_padding + "1,234,567.89");
#else
assert(ex == currency_symbol + "-" + currency_symbol_padding + "1,234,567.89");
@@ -186,7 +183,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), false, ios, ' ', v);
std::string ex(str, base(iter));
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert(ex == currency_symbol_padding + "-" + currency_symbol + "1,234,567.89");
#else
assert(ex == currency_symbol_padding + currency_symbol + "-1,234,567.89");
@@ -239,7 +236,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), true, ios, '*', v);
std::string ex(str, base(iter));
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_name + "0.01");
#else
assert(ex == currency_name + "-0.01");
@@ -259,7 +256,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), true, ios, '*', v);
std::string ex(str, base(iter));
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_name + "1,234,567.89");
#else
assert(ex == currency_name + "-1,234,567.89");
@@ -273,7 +270,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), true, ios, ' ', v);
std::string ex(str, base(iter));
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_name + "1,234,567.89" + currency_name_padding);
#else
assert(ex == currency_name + "-1,234,567.89" + currency_name_padding);
@@ -288,7 +285,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), true, ios, ' ', v);
std::string ex(str, base(iter));
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == "-" + currency_name + currency_name_padding + "1,234,567.89");
#else
assert(ex == currency_name + "-" + currency_name_padding + "1,234,567.89");
@@ -303,7 +300,7 @@ int main(int, char**)
char str[100];
cpp17_output_iterator<char*> iter = f.put(cpp17_output_iterator<char*>(str), true, ios, ' ', v);
std::string ex(str, base(iter));
-#if defined(TEST_HAS_GLIBC) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == currency_name_padding + "-" + currency_name + "1,234,567.89");
#else
assert(ex == currency_name_padding + currency_name + "-1,234,567.89");
@@ -366,7 +363,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), false, ios, '*', v);
std::wstring ex(str, base(iter));
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_symbol + L"0.01");
# else
assert(ex == currency_symbol + L"-0.01");
@@ -386,7 +383,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), false, ios, '*', v);
std::wstring ex(str, base(iter));
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_symbol + L"1,234,567.89");
# else
assert(ex == currency_symbol + L"-1,234,567.89");
@@ -400,7 +397,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), false, ios, ' ', v);
std::wstring ex(str, base(iter));
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_symbol + L"1,234,567.89 ");
# else
assert(ex == currency_symbol + L"-1,234,567.89 ");
@@ -415,7 +412,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), false, ios, ' ', v);
std::wstring ex(str, base(iter));
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_symbol + L" 1,234,567.89");
# else
assert(ex == currency_symbol + L"- 1,234,567.89");
@@ -430,7 +427,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), false, ios, ' ', v);
std::wstring ex(str, base(iter));
-# ifdef _AIX
+# if defined(_AIX) || defined(__APPLE__)
assert(ex == L" -" + currency_symbol + L"1,234,567.89");
# else
assert(ex == L" " + currency_symbol + L"-1,234,567.89");
@@ -483,7 +480,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), true, ios, '*', v);
std::wstring ex(str, base(iter));
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_name + L"0.01");
#else
assert(ex == currency_name + L"-0.01");
@@ -503,7 +500,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), true, ios, '*', v);
std::wstring ex(str, base(iter));
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_name + L"1,234,567.89");
#else
assert(ex == currency_name + L"-1,234,567.89");
@@ -517,7 +514,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), true, ios, ' ', v);
std::wstring ex(str, base(iter));
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_name + L"1,234,567.89" + currency_name_padding);
#else
assert(ex == currency_name + L"-1,234,567.89" + currency_name_padding);
@@ -532,7 +529,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), true, ios, ' ', v);
std::wstring ex(str, base(iter));
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == L"-" + currency_name + currency_name_padding + L"1,234,567.89");
#else
assert(ex == currency_name + L"-" + currency_name_padding + L"1,234,567.89");
@@ -547,7 +544,7 @@ int main(int, char**)
wchar_t str[100];
cpp17_output_iterator<wchar_t*> iter = f.put(cpp17_output_iterator<wchar_t*>(str), true, ios, ' ', v);
std::wstring ex(str, base(iter));
-# if defined(TEST_HAS_GLIBC) || defined(_AIX)
+# if defined(TEST_HAS_GLIBC) || defined(_AIX) || defined(__APPLE__)
assert(ex == currency_name_padding + L"-" + currency_name + L"1,234,567.89");
#else
assert(ex == currency_name_padding + currency_name + L"-1,234,567.89");
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp
index 9c1253d47acd2..e7f0f29e87742 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
@@ -117,11 +114,7 @@ int main(int, char**)
{
Fnf f(LOCALE_fr_FR_UTF_8, 1);
-#ifdef __APPLE__
- assert(f.curr_symbol() == " Eu");
-#else
assert(f.curr_symbol() == " \u20ac");
-#endif
}
{
Fnt f(LOCALE_fr_FR_UTF_8, 1);
@@ -130,11 +123,7 @@ int main(int, char**)
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_fr_FR_UTF_8, 1);
-#ifdef __APPLE__
- assert(f.curr_symbol() == L" Eu");
-#else
assert(f.curr_symbol() == L" \u20ac");
-#endif
}
{
Fwt f(LOCALE_fr_FR_UTF_8, 1);
@@ -164,7 +153,7 @@ int main(int, char**)
{
Fnf f(LOCALE_zh_CN_UTF_8, 1);
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__APPLE__)
assert(f.curr_symbol() == "\xC2\xA5"); // \u00A5
#else
assert(f.curr_symbol() == "\xEF\xBF\xA5"); // \uFFE5
@@ -177,7 +166,7 @@ int main(int, char**)
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_zh_CN_UTF_8, 1);
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__APPLE__)
assert(f.curr_symbol() == L"\u00A5");
#else
assert(f.curr_symbol() == L"\uFFE5");
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp
index 630b2739c88a8..90dc6c4d7a2ab 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping.pass.cpp
@@ -6,11 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
-// XFAIL: darwin
-//
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
index a3e3d853524b5..e9528147dfe62 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
@@ -82,14 +79,6 @@ void assert_sign_symbol_none_value(std::money_base::pattern p)
assert(p.field[3] == std::money_base::value);
}
-void assert_value_none_symbol_sign(std::money_base::pattern p)
-{
- assert(p.field[0] == std::money_base::value);
- assert(p.field[1] == std::money_base::none);
- assert(p.field[2] == std::money_base::symbol);
- assert(p.field[3] == std::money_base::sign);
-}
-
void assert_sign_value_none_symbol(std::money_base::pattern p)
{
assert(p.field[0] == std::money_base::sign);
@@ -149,39 +138,23 @@ int main(int, char**)
{
Fnf f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#ifdef __APPLE__
- assert_value_none_symbol_sign(p);
-#else
assert_sign_value_none_symbol(p);
-#endif
}
{
Fnt f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#ifdef __APPLE__
- assert_value_none_symbol_sign(p);
-#else
assert_sign_value_none_symbol(p);
-#endif
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
{
Fwf f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#ifdef __APPLE__
- assert_value_none_symbol_sign(p);
-#else
assert_sign_value_none_symbol(p);
-#endif
}
{
Fwt f(LOCALE_fr_FR_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#ifdef __APPLE__
- assert_value_none_symbol_sign(p);
-#else
assert_sign_value_none_symbol(p);
-#endif
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
@@ -211,7 +184,7 @@ int main(int, char**)
{
Fnf f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert_sign_symbol_none_value(p);
#else
assert_symbol_sign_none_value(p);
@@ -220,7 +193,7 @@ int main(int, char**)
{
Fnt f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#if defined(_WIN32) || defined(__APPLE__)
+#if defined(_WIN32)
assert_symbol_sign_none_value(p);
#else
assert_sign_symbol_none_value(p);
@@ -230,7 +203,7 @@ int main(int, char**)
{
Fwf f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#ifdef _AIX
+#if defined(_AIX) || defined(__APPLE__)
assert_sign_symbol_none_value(p);
#else
assert_symbol_sign_none_value(p);
@@ -239,7 +212,7 @@ int main(int, char**)
{
Fwt f(LOCALE_zh_CN_UTF_8, 1);
std::money_base::pattern p = f.neg_format();
-#if defined(_WIN32) || defined(__APPLE__)
+#if defined(_WIN32)
assert_symbol_sign_none_value(p);
#else
assert_sign_symbol_none_value(p);
diff --git a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
index 671620a0c2f92..11832a7d89278 100644
--- a/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp
@@ -5,7 +5,7 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-//
+
// NetBSD does not support LC_MONETARY at the moment
// XFAIL: netbsd
@@ -79,14 +79,6 @@ void assert_sign_symbol_none_value(std::money_base::pattern p)
assert(p.field[3] == std::money_base::value);
}
-void assert_value_none_symbol_sign(std::money_base::pattern p)
-{
- assert(p.field[0] == std::money_base::value);
- assert(p.field[1] == std::money_base::none);
- assert(p.field[2] == std::money_base::symbol);
- assert(p.field[3] == std::money_base::sign);
-}
-
void assert_sign_value_none_symbol(std::money_base::pattern p)
{
assert(p.field[0] == std::money_base::sign);
diff --git a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp
index 612d3738a373f..a388c0b15a840 100644
--- a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// The fix for LWG2381 (https://github.com/llvm/llvm-project/pull/77948) changed behavior of
// FP parsing. This requires 3e15c97fa3812993bdc319827a5c6d867b765ae8 in the dylib.
// XFAIL: using-built-library-before-llvm-19
diff --git a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float.pass.cpp b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float.pass.cpp
index 58bc9e5abef87..596d81cbc8c91 100644
--- a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// The fix for LWG2381 (https://github.com/llvm/llvm-project/pull/77948) changed behavior of
// FP parsing. This requires 3e15c97fa3812993bdc319827a5c6d867b765ae8 in the dylib.
// XFAIL: using-built-library-before-llvm-19
diff --git a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_double.pass.cpp b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_double.pass.cpp
index bf8bb651d6bce..8a9fd41501626 100644
--- a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_double.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_double.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// The fix for LWG2381 (https://github.com/llvm/llvm-project/pull/77948) changed behavior of
// FP parsing. This requires 3e15c97fa3812993bdc319827a5c6d867b765ae8 in the dylib.
// XFAIL: using-built-library-before-llvm-19
diff --git a/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp b/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp
index a87c5e0ace28a..11ec75469c704 100644
--- a/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp
@@ -5,10 +5,7 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
+//
// NetBSD does not support LC_NUMERIC at the moment
// XFAIL: netbsd
@@ -63,7 +60,7 @@ int main(int, char**)
}
{
std::locale l(LOCALE_fr_FR_UTF_8);
-#if defined(TEST_HAS_GLIBC) || defined(_WIN32) || defined(_AIX)
+#if defined(TEST_HAS_GLIBC) || defined(_WIN32) || defined(_AIX) || defined(__APPLE__)
const char* const group = "\3";
#else
const char* const group = "\x7f";
diff --git a/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp b/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
index ef39e8aa7b685..53f2c8554f3d7 100644
--- a/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// NetBSD does not support LC_NUMERIC at the moment
// XFAIL: netbsd
@@ -69,7 +66,7 @@ int main(int, char**)
// The below tests work around GLIBC's use of U202F as LC_NUMERIC thousands_sep.
std::locale l(LOCALE_fr_FR_UTF_8);
{
-#if defined(_CS_GNU_LIBC_VERSION) || defined(_WIN32) || defined(_AIX)
+#if defined(_CS_GNU_LIBC_VERSION) || defined(_WIN32) || defined(_AIX) || defined(__APPLE__)
const char sep = ' ';
#else
const char sep = ',';
diff --git a/libcxx/test/std/time/time.duration/time.duration.nonmember/ostream.pass.cpp b/libcxx/test/std/time/time.duration/time.duration.nonmember/ostream.pass.cpp
index 4e84db9a84d78..97ac04275b0b6 100644
--- a/libcxx/test/std/time/time.duration/time.duration.nonmember/ostream.pass.cpp
+++ b/libcxx/test/std/time/time.duration/time.duration.nonmember/ostream.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: no-localization
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
@@ -83,17 +80,10 @@ static void test_values() {
assert(stream_c_locale<CharT>(1'000.123456s) == SV("1000.1235s"));
if constexpr (std::same_as<CharT, char>) {
-#if defined(__APPLE__)
- assert(stream_fr_FR_locale<CharT>(-1'000'000s) == SV("-1000000s"));
- assert(stream_fr_FR_locale<CharT>(1'000'000s) == SV("1000000s"));
- assert(stream_fr_FR_locale<CharT>(-1'000.123456s) == SV("-1000,1235s"));
- assert(stream_fr_FR_locale<CharT>(1'000.123456s) == SV("1000,1235s"));
-#else
assert(stream_fr_FR_locale<CharT>(-1'000'000s) == SV("-1 000 000s"));
assert(stream_fr_FR_locale<CharT>(1'000'000s) == SV("1 000 000s"));
assert(stream_fr_FR_locale<CharT>(-1'000.123456s) == SV("-1 000,1235s"));
assert(stream_fr_FR_locale<CharT>(1'000.123456s) == SV("1 000,1235s"));
-#endif
} else {
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
assert(stream_fr_FR_locale<CharT>(-1'000'000s) == L"-1" FR_THOU_SEP "000" FR_THOU_SEP "000s");
diff --git a/libcxx/test/std/time/time.syn/formatter.duration.pass.cpp b/libcxx/test/std/time/time.syn/formatter.duration.pass.cpp
index 973bce8f81d41..f1f7debed2464 100644
--- a/libcxx/test/std/time/time.syn/formatter.duration.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.duration.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: no-localization
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
@@ -408,19 +405,11 @@ static void test_valid_positive_integral_values() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='00:00'\t"
"%T='00:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 AM'\t"
-# else
"%r='12:00:00 午前'\t"
-# endif
"%X='00時00分00秒'\t"
"%EX='00時00分00秒'\t"
# elif defined(_WIN32)
@@ -448,19 +437,11 @@ static void test_valid_positive_integral_values() {
"%OM='59'\t"
"%S='59'\t"
"%OS='59'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='11:59'\t"
"%T='11:59:59'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:59:59 AM'\t"
-# else
"%r='11:59:59 午前'\t"
-# endif
"%X='11時59分59秒'\t"
"%EX='11時59分59秒'\t"
# elif defined(_WIN32)
@@ -488,19 +469,11 @@ static void test_valid_positive_integral_values() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='12:00'\t"
"%T='12:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 PM'\t"
-# else
"%r='12:00:00 午後'\t"
-# endif
"%X='12時00分00秒'\t"
"%EX='12時00分00秒'\t"
# else
@@ -528,19 +501,11 @@ static void test_valid_positive_integral_values() {
"%OM='59'\t"
"%S='59'\t"
"%OS='59'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='23:59'\t"
"%T='23:59:59'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:59:59 PM'\t"
-# else
"%r='11:59:59 午後'\t"
-# endif
"%X='23時59分59秒'\t"
"%EX='23時59分59秒'\t"
# else
@@ -568,19 +533,11 @@ static void test_valid_positive_integral_values() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='00:00'\t"
"%T='00:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 AM'\t"
-# else
"%r='12:00:00 午前'\t"
-# endif
"%X='00時00分00秒'\t"
"%EX='00時00分00秒'\t"
# elif defined(_WIN32)
@@ -835,19 +792,11 @@ static void test_valid_negative_integral_values() {
"%OM='59'\t"
"%S='59'\t"
"%OS='59'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='23:59'\t"
"%T='23:59:59'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:59:59 PM'\t"
-# else
"%r='11:59:59 午後'\t"
-# endif
"%X='23時59分59秒'\t"
"%EX='23時59分59秒'\t"
# elif defined(_WIN32)
diff --git a/libcxx/test/std/time/time.syn/formatter.file_time.pass.cpp b/libcxx/test/std/time/time.syn/formatter.file_time.pass.cpp
index 28a972b19dcef..e258c4161eda4 100644
--- a/libcxx/test/std/time/time.syn/formatter.file_time.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.file_time.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: no-localization
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
@@ -695,19 +692,11 @@ static void test_valid_values_time() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='00:00'\t"
"%T='00:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 AM'\t"
-# else
"%r='12:00:00 午前'\t"
-# endif
"%X='00時00分00秒'\t"
"%EX='00時00分00秒'\t"
# elif defined(_WIN32)
@@ -732,19 +721,11 @@ static void test_valid_values_time() {
"%OM='31'\t"
"%S='30.123'\t"
"%OS='30.123'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='23:31'\t"
"%T='23:31:30.123'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:31:30 PM'\t"
-# else
"%r='11:31:30 午後'\t"
-# endif
"%X='23時31分30秒'\t"
"%EX='23時31分30秒'\t"
# elif defined(_WIN32)
diff --git a/libcxx/test/std/time/time.syn/formatter.hh_mm_ss.pass.cpp b/libcxx/test/std/time/time.syn/formatter.hh_mm_ss.pass.cpp
index 82d9b4c7540a7..bbd9c074bef24 100644
--- a/libcxx/test/std/time/time.syn/formatter.hh_mm_ss.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.hh_mm_ss.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: no-localization
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
@@ -302,19 +299,11 @@ static void test_valid_values() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='00:00'\t"
"%T='00:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 AM'\t"
-# else
"%r='12:00:00 午前'\t"
-# endif
"%X='00時00分00秒'\t"
"%EX='00時00分00秒'\t"
# elif defined(_WIN32)
@@ -339,19 +328,11 @@ static void test_valid_values() {
"%OM='31'\t"
"%S='30.123'\t"
"%OS='30.123'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='23:31'\t"
"%T='23:31:30.123'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:31:30 PM'\t"
-# else
"%r='11:31:30 午後'\t"
-# endif
"%X='23時31分30秒'\t"
"%EX='23時31分30秒'\t"
# elif defined(_WIN32)
@@ -376,19 +357,11 @@ static void test_valid_values() {
"%OM='02'\t"
"%S='01.123456789012'\t"
"%OS='01.123456789012'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='03:02'\t"
"%T='03:02:01.123456789012'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='03:02:01 AM'\t"
-# else
"%r='03:02:01 午前'\t"
-# endif
"%X='03時02分01秒'\t"
"%EX='03時02分01秒'\t"
# elif defined(_WIN32)
@@ -413,19 +386,11 @@ static void test_valid_values() {
"%OM='01'\t"
"%S='01'\t"
"%OS='01'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='01:01'\t"
"%T='01:01:01'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='01:01:01 AM'\t"
-# else
"%r='01:01:01 午前'\t"
-# endif
"%X='01時01分01秒'\t"
"%EX='01時01分01秒'\t"
# elif defined(_WIN32)
diff --git a/libcxx/test/std/time/time.syn/formatter.local_time.pass.cpp b/libcxx/test/std/time/time.syn/formatter.local_time.pass.cpp
index bd23337ccb318..ce3af8ec199ae 100644
--- a/libcxx/test/std/time/time.syn/formatter.local_time.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.local_time.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: no-localization
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
@@ -694,19 +691,11 @@ static void test_valid_values_time() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='00:00'\t"
"%T='00:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 AM'\t"
-# else
"%r='12:00:00 午前'\t"
-# endif
"%X='00時00分00秒'\t"
"%EX='00時00分00秒'\t"
# elif defined(_WIN32)
@@ -731,19 +720,11 @@ static void test_valid_values_time() {
"%OM='31'\t"
"%S='30.123'\t"
"%OS='30.123'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='23:31'\t"
"%T='23:31:30.123'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:31:30 PM'\t"
-# else
"%r='11:31:30 午後'\t"
-# endif
"%X='23時31分30秒'\t"
"%EX='23時31分30秒'\t"
# elif defined(_WIN32)
diff --git a/libcxx/test/std/time/time.syn/formatter.sys_time.pass.cpp b/libcxx/test/std/time/time.syn/formatter.sys_time.pass.cpp
index 9c9c8e0de1e93..9238f3daf1f81 100644
--- a/libcxx/test/std/time/time.syn/formatter.sys_time.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.sys_time.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: no-localization
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
@@ -691,19 +688,11 @@ static void test_valid_values_time() {
"%OM='00'\t"
"%S='00'\t"
"%OS='00'\t"
-# if defined(__APPLE__)
- "%p='AM'\t"
-# else
"%p='午前'\t"
-# endif
"%R='00:00'\t"
"%T='00:00:00'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='12:00:00 AM'\t"
-# else
"%r='12:00:00 午前'\t"
-# endif
"%X='00時00分00秒'\t"
"%EX='00時00分00秒'\t"
# elif defined(_WIN32)
@@ -728,19 +717,11 @@ static void test_valid_values_time() {
"%OM='31'\t"
"%S='30.123'\t"
"%OS='30.123'\t"
-# if defined(__APPLE__)
- "%p='PM'\t"
-# else
"%p='午後'\t"
-# endif
"%R='23:31'\t"
"%T='23:31:30.123'\t"
# if defined(__APPLE__) || defined(__FreeBSD__)
-# if defined(__APPLE__)
- "%r='11:31:30 PM'\t"
-# else
"%r='11:31:30 午後'\t"
-# endif
"%X='23時31分30秒'\t"
"%EX='23時31分30秒'\t"
# elif defined(_WIN32)
diff --git a/libcxx/test/support/locale_helpers.h b/libcxx/test/support/locale_helpers.h
index 946c2fed0f3a5..3cec7397e3d7e 100644
--- a/libcxx/test/support/locale_helpers.h
+++ b/libcxx/test/support/locale_helpers.h
@@ -73,6 +73,12 @@ MultiStringType currency_symbol_ru_RU() {
return MKSTR("\u20BD"); // U+20BD RUBLE SIGN
#elif defined(_WIN32) || defined(__FreeBSD__) || defined(_AIX)
return MKSTR("\u20BD"); // U+20BD RUBLE SIGN
+#elif defined(__APPLE__)
+ if (__builtin_available(macOS 15.4, *)) {
+ return MKSTR("\u20BD"); // U+20BD RUBLE SIGN
+ } else {
+ return MKSTR("\u0440\u0443\u0431.");
+ }
#else
return MKSTR("\u0440\u0443\u0431.");
#endif
@@ -81,6 +87,12 @@ MultiStringType currency_symbol_ru_RU() {
MultiStringType currency_symbol_zh_CN() {
#if defined(_WIN32)
return MKSTR("\u00A5"); // U+00A5 YEN SIGN
+#elif defined(__APPLE__)
+ if (__builtin_available(macOS 15.4, *)) {
+ return MKSTR("\u00A5"); // U+00A5 YEN SIGN
+ } else {
+ return MKSTR("\uFFE5"); // U+FFE5 FULLWIDTH YEN SIGN
+ }
#else
return MKSTR("\uFFE5"); // U+FFE5 FULLWIDTH YEN SIGN
#endif
diff --git a/libcxxabi/test/uncaught_exception.pass.cpp b/libcxxabi/test/uncaught_exception.pass.cpp
index 8e8468c43240d..cace88a309d0b 100644
--- a/libcxxabi/test/uncaught_exception.pass.cpp
+++ b/libcxxabi/test/uncaught_exception.pass.cpp
@@ -6,9 +6,6 @@
//
//===----------------------------------------------------------------------===//
-// TODO(mordante) Investigate
-// UNSUPPORTED: apple-clang
-
// UNSUPPORTED: no-exceptions
// This tests that libc++abi still provides __cxa_uncaught_exception() for
More information about the libcxx-commits
mailing list