[libcxx-commits] [libcxx] [libc++] XFAIL localized chrono formatter tests on OpenBSD (PR #233774)

Brad Smith via libcxx-commits libcxx-commits at lists.llvm.org
Tue Oct 20 03:23:00 PDT 2026


https://github.com/brad0 created https://github.com/llvm/llvm-project/pull/233774

OpenBSD's setlocale() accepts fr_FR.UTF-8 and ja_JP.UTF-8, so the
locale.fr_FR.UTF-8 and locale.ja_JP.UTF-8 lit features are enabled,
but only LC_CTYPE is implemented. LC_TIME always behaves as "C", so
the tests expecting French and Japanese day/month names, AM/PM
strings, eras and alternate numerals fail.

>From fae2c4e0d584e620e3c7a5b50a69ac21cce22131 Mon Sep 17 00:00:00 2001
From: Brad Smith <brad at comstyle.com>
Date: Tue, 20 Oct 2026 03:44:45 -0400
Subject: [PATCH] [libc++] XFAIL localized chrono formatter tests on OpenBSD

OpenBSD's setlocale() accepts fr_FR.UTF-8 and ja_JP.UTF-8, so the
locale.fr_FR.UTF-8 and locale.ja_JP.UTF-8 lit features are enabled,
but only LC_CTYPE is implemented. LC_TIME always behaves as "C", so
the tests expecting French and Japanese day/month names, AM/PM
strings, eras and alternate numerals fail.
---
 libcxx/test/std/time/time.syn/formatter.day.pass.cpp           | 3 +++
 libcxx/test/std/time/time.syn/formatter.duration.pass.cpp      | 3 +++
 libcxx/test/std/time/time.syn/formatter.file_time.pass.cpp     | 3 +++
 libcxx/test/std/time/time.syn/formatter.hh_mm_ss.pass.cpp      | 3 +++
 libcxx/test/std/time/time.syn/formatter.local_time.pass.cpp    | 3 +++
 libcxx/test/std/time/time.syn/formatter.month.pass.cpp         | 3 +++
 libcxx/test/std/time/time.syn/formatter.month_day.pass.cpp     | 3 +++
 .../test/std/time/time.syn/formatter.month_day_last.pass.cpp   | 3 +++
 libcxx/test/std/time/time.syn/formatter.month_weekday.pass.cpp | 3 +++
 libcxx/test/std/time/time.syn/formatter.sys_time.pass.cpp      | 3 +++
 libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp       | 3 +++
 libcxx/test/std/time/time.syn/formatter.weekday_index.pass.cpp | 3 +++
 libcxx/test/std/time/time.syn/formatter.weekday_last.pass.cpp  | 3 +++
 libcxx/test/std/time/time.syn/formatter.year.pass.cpp          | 3 +++
 libcxx/test/std/time/time.syn/formatter.year_month.pass.cpp    | 3 +++
 .../test/std/time/time.syn/formatter.year_month_day.pass.cpp   | 3 +++
 .../std/time/time.syn/formatter.year_month_day_last.pass.cpp   | 3 +++
 .../std/time/time.syn/formatter.year_month_weekday.pass.cpp    | 3 +++
 18 files changed, 54 insertions(+)

diff --git a/libcxx/test/std/time/time.syn/formatter.day.pass.cpp b/libcxx/test/std/time/time.syn/formatter.day.pass.cpp
index 02dc215d35c532..ddecc629a50e7c 100644
--- a/libcxx/test/std/time/time.syn/formatter.day.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.day.pass.cpp
@@ -16,6 +16,9 @@
 // TODO FMT Investigate Windows issues.
 // XFAIL: msvc
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
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 f1f7debed24646..baed260b29baaa 100644
--- a/libcxx/test/std/time/time.syn/formatter.duration.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.duration.pass.cpp
@@ -12,6 +12,9 @@
 
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
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 379d2bd9399088..0f1250049c7f8a 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
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
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 bbd9c074bef24c..6c6795daf0b2e2 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
@@ -12,6 +12,9 @@
 
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
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 b8e208fef619c2..ec35c6630b99b2 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
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.month.pass.cpp b/libcxx/test/std/time/time.syn/formatter.month.pass.cpp
index ea07d7c829816c..7238f55f9864cb 100644
--- a/libcxx/test/std/time/time.syn/formatter.month.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.month.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.month_day.pass.cpp b/libcxx/test/std/time/time.syn/formatter.month_day.pass.cpp
index cfe57d40ab6ebc..0b8840352160ef 100644
--- a/libcxx/test/std/time/time.syn/formatter.month_day.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.month_day.pass.cpp
@@ -16,6 +16,9 @@
 // TODO FMT Investigate Windows issues.
 // XFAIL: msvc
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.month_day_last.pass.cpp b/libcxx/test/std/time/time.syn/formatter.month_day_last.pass.cpp
index 48b0f8656ec154..5aec62882ef6a2 100644
--- a/libcxx/test/std/time/time.syn/formatter.month_day_last.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.month_day_last.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.month_weekday.pass.cpp b/libcxx/test/std/time/time.syn/formatter.month_weekday.pass.cpp
index 2daf721a668590..30cb8a15685a56 100644
--- a/libcxx/test/std/time/time.syn/formatter.month_weekday.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.month_weekday.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
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 3983dfbff799b1..2f6fed1ce85379 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
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp b/libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp
index 0b49d0c36268da..ed71e524493044 100644
--- a/libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.weekday.pass.cpp
@@ -16,6 +16,9 @@
 // TODO FMT Investigate Windows issues.
 // XFAIL: msvc
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.weekday_index.pass.cpp b/libcxx/test/std/time/time.syn/formatter.weekday_index.pass.cpp
index c5c67158ef3c51..b662696bb8fd65 100644
--- a/libcxx/test/std/time/time.syn/formatter.weekday_index.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.weekday_index.pass.cpp
@@ -16,6 +16,9 @@
 // TODO FMT Investigate Windows issues.
 // XFAIL: msvc
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.weekday_last.pass.cpp b/libcxx/test/std/time/time.syn/formatter.weekday_last.pass.cpp
index 29a75833e3e249..55b937df00698b 100644
--- a/libcxx/test/std/time/time.syn/formatter.weekday_last.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.weekday_last.pass.cpp
@@ -16,6 +16,9 @@
 // TODO FMT Investigate Windows issues.
 // XFAIL: msvc
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.year.pass.cpp b/libcxx/test/std/time/time.syn/formatter.year.pass.cpp
index e1a7d788f9db11..8defe8e287f2b0 100644
--- a/libcxx/test/std/time/time.syn/formatter.year.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.year.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.year_month.pass.cpp b/libcxx/test/std/time/time.syn/formatter.year_month.pass.cpp
index 26c7f33832cbf3..3c171a82eee5a2 100644
--- a/libcxx/test/std/time/time.syn/formatter.year_month.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.year_month.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.year_month_day.pass.cpp b/libcxx/test/std/time/time.syn/formatter.year_month_day.pass.cpp
index 356e80a9277c2a..98abcab5d4c407 100644
--- a/libcxx/test/std/time/time.syn/formatter.year_month_day.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.year_month_day.pass.cpp
@@ -16,6 +16,9 @@
 // TODO FMT Investigate Windows issues.
 // XFAIL: msvc
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.year_month_day_last.pass.cpp b/libcxx/test/std/time/time.syn/formatter.year_month_day_last.pass.cpp
index 648c344d29b947..f44076bdf7da3b 100644
--- a/libcxx/test/std/time/time.syn/formatter.year_month_day_last.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.year_month_day_last.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 
diff --git a/libcxx/test/std/time/time.syn/formatter.year_month_weekday.pass.cpp b/libcxx/test/std/time/time.syn/formatter.year_month_weekday.pass.cpp
index 6ea05c9f2a216b..9afa0504234934 100644
--- a/libcxx/test/std/time/time.syn/formatter.year_month_weekday.pass.cpp
+++ b/libcxx/test/std/time/time.syn/formatter.year_month_weekday.pass.cpp
@@ -13,6 +13,9 @@
 // TODO FMT This test should not require std::to_chars(floating-point)
 // XFAIL: availability-fp_to_chars-missing
 
+// OpenBSD only implements LC_CTYPE, so LC_TIME output in these locales is that of "C".
+// XFAIL: target={{.+}}-openbsd{{.*}}
+
 // REQUIRES: locale.fr_FR.UTF-8
 // REQUIRES: locale.ja_JP.UTF-8
 



More information about the libcxx-commits mailing list