[libcxx-commits] [libcxx] [libc++][test] Unify `is_steady` tests for chrono clocks (PR #132566)

via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jun 19 13:09:20 PDT 2026


https://github.com/PaulXiCao updated https://github.com/llvm/llvm-project/pull/132566

>From a8ad6e5661f794af22fe9b5339d75cfc2a52233b Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sat, 22 Mar 2025 22:31:21 +0100
Subject: [PATCH 01/23] get rid off temporary  (maybe_unused)

---
 .../time.clock/time.clock.gps/types.compile.pass.cpp  | 11 +++++------
 .../time.clock/time.clock.tai/types.compile.pass.cpp  | 11 +++++------
 .../time.clock/time.clock.utc/types.compile.pass.cpp  | 11 +++++------
 3 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
index fea70a304dfdd..707c9221c2332 100644
--- a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
@@ -37,11 +37,10 @@
 #include "test_macros.h"
 
 // class gps_clock
-using rep                                 = std::chrono::gps_clock::rep;
-using period                              = std::chrono::gps_clock::period;
-using duration                            = std::chrono::gps_clock::duration;
-using time_point                          = std::chrono::gps_clock::time_point;
-[[maybe_unused]] constexpr bool is_steady = std::chrono::gps_clock::is_steady;
+using rep        = std::chrono::gps_clock::rep;
+using period     = std::chrono::gps_clock::period;
+using duration   = std::chrono::gps_clock::duration;
+using time_point = std::chrono::gps_clock::time_point;
 
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
@@ -53,7 +52,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::gps_clock>>);
-LIBCPP_STATIC_ASSERT(is_steady == false);
+LIBCPP_STATIC_ASSERT(std::chrono::gps_clock::is_steady == false);
 
 // typedefs
 static_assert(std::same_as<std::chrono::gps_time<int>, std::chrono::time_point<std::chrono::gps_clock, int>>);
diff --git a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
index 6499ecb5fb85e..c0474441e5e79 100644
--- a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
@@ -37,11 +37,10 @@
 #include "test_macros.h"
 
 // class tai_clock
-using rep                                 = std::chrono::tai_clock::rep;
-using period                              = std::chrono::tai_clock::period;
-using duration                            = std::chrono::tai_clock::duration;
-using time_point                          = std::chrono::tai_clock::time_point;
-[[maybe_unused]] constexpr bool is_steady = std::chrono::tai_clock::is_steady;
+using rep        = std::chrono::tai_clock::rep;
+using period     = std::chrono::tai_clock::period;
+using duration   = std::chrono::tai_clock::duration;
+using time_point = std::chrono::tai_clock::time_point;
 
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
@@ -53,7 +52,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::tai_clock>>);
-LIBCPP_STATIC_ASSERT(is_steady == false);
+LIBCPP_STATIC_ASSERT(std::chrono::tai_clock::is_steady == false);
 
 // typedefs
 static_assert(std::same_as<std::chrono::tai_time<int>, std::chrono::time_point<std::chrono::tai_clock, int>>);
diff --git a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
index c69671ba4d2cc..c3d25a4684851 100644
--- a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
@@ -37,11 +37,10 @@
 #include "test_macros.h"
 
 // class utc_clock
-using rep                                 = std::chrono::utc_clock::rep;
-using period                              = std::chrono::utc_clock::period;
-using duration                            = std::chrono::utc_clock::duration;
-using time_point                          = std::chrono::utc_clock::time_point;
-[[maybe_unused]] constexpr bool is_steady = std::chrono::utc_clock::is_steady;
+using rep        = std::chrono::utc_clock::rep;
+using period     = std::chrono::utc_clock::period;
+using duration   = std::chrono::utc_clock::duration;
+using time_point = std::chrono::utc_clock::time_point;
 
 // Tests the values. Some of them are implementation-defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::system_clock::rep>);
@@ -53,7 +52,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::utc_clock>>);
-LIBCPP_STATIC_ASSERT(is_steady == false);
+LIBCPP_STATIC_ASSERT(std::chrono::utc_clock::is_steady == false);
 
 // typedefs
 static_assert(std::same_as<std::chrono::utc_time<int>, std::chrono::time_point<std::chrono::utc_clock, int>>);

>From a109e288d445526f2fa270fd41591b909f011a46 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sun, 23 Mar 2025 18:01:21 +0100
Subject: [PATCH 02/23] is_steady: testing type and value

---
 .../std/time/time.clock/time.clock.gps/types.compile.pass.cpp | 4 +++-
 .../std/time/time.clock/time.clock.tai/types.compile.pass.cpp | 4 +++-
 .../std/time/time.clock/time.clock.utc/types.compile.pass.cpp | 4 +++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
index 707c9221c2332..fbd2da885f8b4 100644
--- a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
@@ -42,6 +42,8 @@ using period     = std::chrono::gps_clock::period;
 using duration   = std::chrono::gps_clock::duration;
 using time_point = std::chrono::gps_clock::time_point;
 
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = std::chrono::gps_clock::is_steady;
+
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
 static_assert(std::is_arithmetic_v<rep>);
@@ -52,7 +54,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::gps_clock>>);
-LIBCPP_STATIC_ASSERT(std::chrono::gps_clock::is_steady == false);
+LIBCPP_STATIC_ASSERT(is_steady == false);
 
 // typedefs
 static_assert(std::same_as<std::chrono::gps_time<int>, std::chrono::time_point<std::chrono::gps_clock, int>>);
diff --git a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
index c0474441e5e79..66c8653e2bb64 100644
--- a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
@@ -42,6 +42,8 @@ using period     = std::chrono::tai_clock::period;
 using duration   = std::chrono::tai_clock::duration;
 using time_point = std::chrono::tai_clock::time_point;
 
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = std::chrono::tai_clock::is_steady;
+
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
 static_assert(std::is_arithmetic_v<rep>);
@@ -52,7 +54,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::tai_clock>>);
-LIBCPP_STATIC_ASSERT(std::chrono::tai_clock::is_steady == false);
+LIBCPP_STATIC_ASSERT(is_steady == false);
 
 // typedefs
 static_assert(std::same_as<std::chrono::tai_time<int>, std::chrono::time_point<std::chrono::tai_clock, int>>);
diff --git a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
index c3d25a4684851..a1b0801f502cb 100644
--- a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
@@ -42,6 +42,8 @@ using period     = std::chrono::utc_clock::period;
 using duration   = std::chrono::utc_clock::duration;
 using time_point = std::chrono::utc_clock::time_point;
 
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = std::chrono::utc_clock::is_steady;
+
 // Tests the values. Some of them are implementation-defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::system_clock::rep>);
 static_assert(std::is_arithmetic_v<rep>);
@@ -52,7 +54,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::utc_clock>>);
-LIBCPP_STATIC_ASSERT(std::chrono::utc_clock::is_steady == false);
+LIBCPP_STATIC_ASSERT(is_steady == false);
 
 // typedefs
 static_assert(std::same_as<std::chrono::utc_time<int>, std::chrono::time_point<std::chrono::utc_clock, int>>);

>From 974da5558b0b7e775515a4590df40b46a5db0a6e Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sun, 23 Mar 2025 18:25:30 +0100
Subject: [PATCH 03/23] testing older clock's is_steady type (and optionally
 value)

---
 .../std/time/time.clock/time.clock.hires/consistency.pass.cpp   | 2 +-
 .../std/time/time.clock/time.clock.steady/consistency.pass.cpp  | 2 +-
 .../std/time/time.clock/time.clock.system/consistency.pass.cpp  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index ad1bce8963074..6765ffb54b9b2 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -30,7 +30,7 @@ int main(int, char**)
     static_assert((std::is_same<C::rep, C::duration::rep>::value), "");
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
-    static_assert(C::is_steady || !C::is_steady, "");
+    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "");
     test(std::chrono::high_resolution_clock::is_steady);
 
   return 0;
diff --git a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
index fa0ff4f50db83..fcb0df01a331d 100644
--- a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
@@ -32,7 +32,7 @@ int main(int, char**)
     static_assert((std::is_same<C::rep, C::duration::rep>::value), "");
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
-    static_assert(C::is_steady, "");
+    static_assert(std::is_same<decltype(C::is_steady), const bool>::value && C::is_steady, "");
     test(std::chrono::steady_clock::is_steady);
 
   return 0;
diff --git a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
index 124e9fe41bea0..e9bd175efb240 100644
--- a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
@@ -31,7 +31,7 @@ int main(int, char**)
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
     static_assert((std::is_same<C::time_point::clock, C>::value), "");
-    static_assert((C::is_steady || !C::is_steady), "");
+    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "");
     test(std::chrono::system_clock::is_steady);
 
   return 0;

>From 4d95cb2330efadcd6dfe2885a78d0fc918379b19 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sat, 13 Jun 2026 18:30:03 +0200
Subject: [PATCH 04/23] file clock: is_steady tests

---
 .../time/time.clock/time.clock.file/consistency.pass.cpp  | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp
index cb49c596c56ca..1726c1c976226 100644
--- a/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp
@@ -23,9 +23,6 @@
 
 #include "test_macros.h"
 
-template <class T>
-void test(const T &) {}
-
 int main(int, char**)
 {
     typedef std::chrono::file_clock C;
@@ -33,8 +30,9 @@ int main(int, char**)
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
     static_assert((std::is_same<C::time_point::clock, C>::value), "");
-    static_assert(!C::is_steady, "");
-    test(std::chrono::file_clock::is_steady);
+
+    [[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = C::is_steady;
+    LIBCPP_STATIC_ASSERT(C::is_steady == false);
 
   return 0;
 }

>From d41fbb01ddbe626ab74e7ac7e4b16f66f38c45af Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sat, 13 Jun 2026 23:16:59 +0200
Subject: [PATCH 05/23] hires clock: is_steady tests

---
 .../time.clock/time.clock.hires/consistency.pass.cpp  | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index 6765ffb54b9b2..80892d00e88dc 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -6,6 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 //
+// REQUIRES: std-at-least-c++11
+//
 // Due to C++17 inline variables ASAN flags this test as containing an ODR
 // violation because Clock::is_steady is defined in both the dylib and this TU.
 // UNSUPPORTED: asan
@@ -16,22 +18,23 @@
 
 // check clock invariants
 
+#include <cassert>
 #include <chrono>
 #include <type_traits>
 
 #include "test_macros.h"
 
-template <class T>
-void test(const T &) {}
-
 int main(int, char**)
 {
     typedef std::chrono::high_resolution_clock C;
     static_assert((std::is_same<C::rep, C::duration::rep>::value), "");
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
+
     static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "");
-    test(std::chrono::high_resolution_clock::is_steady);
+    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady;
+    (void)is_steady;
+    LIBCPP_ASSERT(C::is_steady);
 
   return 0;
 }

>From 5f231035ae6498a29500ec846f4fd169889c46a2 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sat, 13 Jun 2026 23:50:10 +0200
Subject: [PATCH 06/23] steady clock: is_steady tests

---
 .../time.clock/time.clock.steady/consistency.pass.cpp     | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
index fcb0df01a331d..02738aee2732c 100644
--- a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
@@ -6,6 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
+// REQUIRES: std-at-least-c++11
 // UNSUPPORTED: no-monotonic-clock
 
 // Due to C++17 inline variables ASAN flags this test as containing an ODR
@@ -21,10 +22,7 @@
 #include <chrono>
 #include <type_traits>
 
-#include "test_macros.h"
-
-template <class T>
-void test(const T &) {}
+void odr_use(const bool &) {}
 
 int main(int, char**)
 {
@@ -33,7 +31,7 @@ int main(int, char**)
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
     static_assert(std::is_same<decltype(C::is_steady), const bool>::value && C::is_steady, "");
-    test(std::chrono::steady_clock::is_steady);
+    odr_use(C::is_steady);
 
   return 0;
 }

>From 8d3238075544cf432fb97a26090b8566852654f5 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sun, 14 Jun 2026 00:14:48 +0200
Subject: [PATCH 07/23] system clock: is_steady tests

---
 .../time.clock.system/consistency.pass.cpp           | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
index e9bd175efb240..c5d5989ff02be 100644
--- a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
@@ -6,6 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 //
+// REQUIRES: std-at-least-c++11
+//
 // Due to C++17 inline variables ASAN flags this test as containing an ODR
 // violation because Clock::is_steady is defined in both the dylib and this TU.
 // UNSUPPORTED: asan
@@ -17,12 +19,12 @@
 // check clock invariants
 
 #include <chrono>
+#include <cassert>
 #include <type_traits>
 
 #include "test_macros.h"
 
-template <class T>
-void test(const T &) {}
+void odr_use(const bool &) {}
 
 int main(int, char**)
 {
@@ -31,8 +33,12 @@ int main(int, char**)
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
     static_assert((std::is_same<C::time_point::clock, C>::value), "");
+
     static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "");
-    test(std::chrono::system_clock::is_steady);
+    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady;
+    (void)is_steady;
+    LIBCPP_ASSERT(!C::is_steady);
+    odr_use(C::is_steady);
 
   return 0;
 }

>From 2a0764e9abcc357b25cfc99602866103c1342d62 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sun, 14 Jun 2026 00:24:58 +0200
Subject: [PATCH 08/23] tai clock: is_steady tests

---
 .../std/time/time.clock/time.clock.tai/types.compile.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
index 66c8653e2bb64..ddd1a184611bf 100644
--- a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
@@ -42,7 +42,7 @@ using period     = std::chrono::tai_clock::period;
 using duration   = std::chrono::tai_clock::duration;
 using time_point = std::chrono::tai_clock::time_point;
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = std::chrono::tai_clock::is_steady;
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = std::chrono::tai_clock::is_steady;
 
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
@@ -54,7 +54,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::tai_clock>>);
-LIBCPP_STATIC_ASSERT(is_steady == false);
+LIBCPP_STATIC_ASSERT(!std::chrono::tai_clock::is_steady);
 
 // typedefs
 static_assert(std::same_as<std::chrono::tai_time<int>, std::chrono::time_point<std::chrono::tai_clock, int>>);

>From 169a653837d2a772be024ea0c7673bd933672e7f Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Sun, 14 Jun 2026 00:32:05 +0200
Subject: [PATCH 09/23] utc clock: is_steady tests

---
 .../std/time/time.clock/time.clock.utc/types.compile.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
index a1b0801f502cb..37137a5579d56 100644
--- a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
@@ -42,7 +42,7 @@ using period     = std::chrono::utc_clock::period;
 using duration   = std::chrono::utc_clock::duration;
 using time_point = std::chrono::utc_clock::time_point;
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = std::chrono::utc_clock::is_steady;
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = std::chrono::utc_clock::is_steady;
 
 // Tests the values. Some of them are implementation-defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::system_clock::rep>);
@@ -54,7 +54,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::utc_clock>>);
-LIBCPP_STATIC_ASSERT(is_steady == false);
+LIBCPP_STATIC_ASSERT(!std::chrono::utc_clock::is_steady);
 
 // typedefs
 static_assert(std::same_as<std::chrono::utc_time<int>, std::chrono::time_point<std::chrono::utc_clock, int>>);

>From 009f0992e27f697ecda19964fa5a093882d20fa6 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 21:11:58 +0200
Subject: [PATCH 10/23] file clock: move to compile time only test file

---
 .../time.clock.file/consistency.pass.cpp      | 38 -------------------
 .../time.clock.file/types.compile.pass.cpp    | 30 +++++++++++++++
 2 files changed, 30 insertions(+), 38 deletions(-)
 delete mode 100644 libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp
 create mode 100644 libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp

diff --git a/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp
deleted file mode 100644
index 1726c1c976226..0000000000000
--- a/libcxx/test/std/time/time.clock/time.clock.file/consistency.pass.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: c++03, c++11, c++14, c++17
-
-// Due to C++17 inline variables ASAN flags this test as containing an ODR
-// violation because Clock::is_steady is defined in both the dylib and this TU.
-// UNSUPPORTED: asan
-
-// <chrono>
-
-// file_clock
-
-// check clock invariants
-
-#include <chrono>
-#include <type_traits>
-
-#include "test_macros.h"
-
-int main(int, char**)
-{
-    typedef std::chrono::file_clock C;
-    static_assert((std::is_same<C::rep, C::duration::rep>::value), "");
-    static_assert((std::is_same<C::period, C::duration::period>::value), "");
-    static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
-    static_assert((std::is_same<C::time_point::clock, C>::value), "");
-
-    [[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = C::is_steady;
-    LIBCPP_STATIC_ASSERT(C::is_steady == false);
-
-  return 0;
-}
diff --git a/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
new file mode 100644
index 0000000000000..0ebd6f39e7af7
--- /dev/null
+++ b/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+
+// <chrono>
+
+// file_clock
+
+// check clock invariants
+
+#include <chrono>
+#include <type_traits>
+
+#include "test_macros.h"
+
+using C = std::chrono::file_clock;
+
+static_assert((std::is_same<C::rep, C::duration::rep>::value), "");
+static_assert((std::is_same<C::period, C::duration::period>::value), "");
+static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
+static_assert((std::is_same<C::time_point::clock, C>::value), "");
+
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = C::is_steady;
+LIBCPP_STATIC_ASSERT(C::is_steady == false);

>From 27dd8800298a835ca26c1cd97228b74c208da0b1 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 21:14:05 +0200
Subject: [PATCH 11/23] gps clock: cleanup

---
 .../std/time/time.clock/time.clock.gps/types.compile.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
index fbd2da885f8b4..6e2de31f325ac 100644
--- a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
@@ -42,7 +42,7 @@ using period     = std::chrono::gps_clock::period;
 using duration   = std::chrono::gps_clock::duration;
 using time_point = std::chrono::gps_clock::time_point;
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) is_steady = std::chrono::gps_clock::is_steady;
+[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = std::chrono::gps_clock::is_steady;
 
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
@@ -54,7 +54,7 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::gps_clock>>);
-LIBCPP_STATIC_ASSERT(is_steady == false);
+LIBCPP_STATIC_ASSERT(!std::chrono::gps_clock::is_steady);
 
 // typedefs
 static_assert(std::same_as<std::chrono::gps_time<int>, std::chrono::time_point<std::chrono::gps_clock, int>>);

>From fb07157217a7bedbee491e40d3e5a738ccf0715f Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 21:14:31 +0200
Subject: [PATCH 12/23] hires clock: add odr_use test

---
 .../std/time/time.clock/time.clock.hires/consistency.pass.cpp  | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index 80892d00e88dc..0dc7f99ae85f6 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -24,6 +24,8 @@
 
 #include "test_macros.h"
 
+void odr_use(const bool &) {}
+
 int main(int, char**)
 {
     typedef std::chrono::high_resolution_clock C;
@@ -35,6 +37,7 @@ int main(int, char**)
     TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady;
     (void)is_steady;
     LIBCPP_ASSERT(C::is_steady);
+    odr_use(C::is_steady);
 
   return 0;
 }

>From a15f53b832121d0dbeb0469b3cc5f994c5d79296 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 22:32:16 +0200
Subject: [PATCH 13/23] file clock: cleanup

---
 .../std/time/time.clock/time.clock.file/types.compile.pass.cpp  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
index 0ebd6f39e7af7..618a42890be09 100644
--- a/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
@@ -27,4 +27,4 @@ static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
 static_assert((std::is_same<C::time_point::clock, C>::value), "");
 
 [[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = C::is_steady;
-LIBCPP_STATIC_ASSERT(C::is_steady == false);
+LIBCPP_STATIC_ASSERT(!C::is_steady);

>From 65f222d8dbbdf9c053f7f25ee7b02fcb3404d7d0 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 22:42:01 +0200
Subject: [PATCH 14/23] file clock: test type+storage+constexpr+value

---
 .../time/time.clock/time.clock.file/types.compile.pass.cpp    | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
index 618a42890be09..520b5a65e2d8e 100644
--- a/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.file/types.compile.pass.cpp
@@ -26,5 +26,7 @@ static_assert((std::is_same<C::period, C::duration::period>::value), "");
 static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
 static_assert((std::is_same<C::time_point::clock, C>::value), "");
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = C::is_steady;
+static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "is_steady must be bool");
+static_assert(!std::is_member_pointer<decltype(&C::is_steady)>::value, "is_steady must be static");
+static_assert(C::is_steady || true, "is_steady must be constexpr"); // NOLINT(readability-simplify-boolean-expr)
 LIBCPP_STATIC_ASSERT(!C::is_steady);

>From 52275f3817f52fe285924aac33d31e70abcf27b0 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 22:44:35 +0200
Subject: [PATCH 15/23] gps clock: test type+storage+constexpr+value

---
 .../time/time.clock/time.clock.gps/types.compile.pass.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
index 6e2de31f325ac..9323c03ea4b68 100644
--- a/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.gps/types.compile.pass.cpp
@@ -42,8 +42,6 @@ using period     = std::chrono::gps_clock::period;
 using duration   = std::chrono::gps_clock::duration;
 using time_point = std::chrono::gps_clock::time_point;
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = std::chrono::gps_clock::is_steady;
-
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
 static_assert(std::is_arithmetic_v<rep>);
@@ -54,6 +52,12 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::gps_clock>>);
+
+// is_steady
+static_assert(std::is_same<decltype(std::chrono::gps_clock::is_steady), const bool>::value, "is_steady must be bool");
+static_assert(!std::is_member_pointer<decltype(&std::chrono::gps_clock::is_steady)>::value, "is_steady must be static");
+static_assert(std::chrono::gps_clock::is_steady || true, // NOLINT(readability-simplify-boolean-expr)
+              "is_steady must be constexpr");
 LIBCPP_STATIC_ASSERT(!std::chrono::gps_clock::is_steady);
 
 // typedefs

>From d2854ba6139ddcc2c7475dcee225266969fb1440 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 22:49:25 +0200
Subject: [PATCH 16/23] hires clock: test type+storage+constexpr+value

---
 .../time/time.clock/time.clock.hires/consistency.pass.cpp    | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index 0dc7f99ae85f6..fb2b2b1b3d8e7 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -33,8 +33,9 @@ int main(int, char**)
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
 
-    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "");
-    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady;
+    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "is_steady must be bool");
+    static_assert(!std::is_member_pointer<decltype(&C::is_steady)>::value, "is_steady must be static");
+    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady; // "is_steady must be constexpr"
     (void)is_steady;
     LIBCPP_ASSERT(C::is_steady);
     odr_use(C::is_steady);

>From 116e0a1d0a59cab47cc7c530c616aeb28dab7c4a Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 23:02:36 +0200
Subject: [PATCH 17/23] steady clock: test type+storage+constexpr+value

---
 .../time.clock/time.clock.steady/consistency.pass.cpp  | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
index 02738aee2732c..6a2d355552357 100644
--- a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
@@ -19,9 +19,12 @@
 
 // check clock invariants
 
+#include <cassert>
 #include <chrono>
 #include <type_traits>
 
+#include "test_macros.h"
+
 void odr_use(const bool &) {}
 
 int main(int, char**)
@@ -30,7 +33,12 @@ int main(int, char**)
     static_assert((std::is_same<C::rep, C::duration::rep>::value), "");
     static_assert((std::is_same<C::period, C::duration::period>::value), "");
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
-    static_assert(std::is_same<decltype(C::is_steady), const bool>::value && C::is_steady, "");
+
+    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "is_steady must be bool");
+    static_assert(!std::is_member_pointer<decltype(&C::is_steady)>::value, "is_steady must be static");
+    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady; // "is_steady must be constexpr"
+    (void)is_steady;
+    assert(C::is_steady);
     odr_use(C::is_steady);
 
   return 0;

>From 5f7478d56aad88b7e032e57132377865b3dc313e Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 23:05:32 +0200
Subject: [PATCH 18/23] system clock: test type+storage+constexpr+value

---
 .../time/time.clock/time.clock.system/consistency.pass.cpp   | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
index c5d5989ff02be..1d2d18fd507f8 100644
--- a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
@@ -34,8 +34,9 @@ int main(int, char**)
     static_assert((std::is_same<C::duration, C::time_point::duration>::value), "");
     static_assert((std::is_same<C::time_point::clock, C>::value), "");
 
-    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "");
-    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady;
+    static_assert(std::is_same<decltype(C::is_steady), const bool>::value, "is_steady must be bool");
+    static_assert(!std::is_member_pointer<decltype(&C::is_steady)>::value, "is_steady must be static");
+    TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady; // "is_steady must be constexpr"
     (void)is_steady;
     LIBCPP_ASSERT(!C::is_steady);
     odr_use(C::is_steady);

>From 9ded1934d8e7d15be86d4f2f99ed4374f257f8b8 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 23:07:34 +0200
Subject: [PATCH 19/23] tai clock: test type+storage+constexpr+value

---
 .../time/time.clock/time.clock.tai/types.compile.pass.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
index ddd1a184611bf..4cd204b2bdb71 100644
--- a/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.tai/types.compile.pass.cpp
@@ -42,8 +42,6 @@ using period     = std::chrono::tai_clock::period;
 using duration   = std::chrono::tai_clock::duration;
 using time_point = std::chrono::tai_clock::time_point;
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = std::chrono::tai_clock::is_steady;
-
 // Tests the values. part of them are implementation defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::utc_clock::rep>);
 static_assert(std::is_arithmetic_v<rep>);
@@ -54,6 +52,12 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::tai_clock>>);
+
+// is_steady
+static_assert(std::is_same<decltype(std::chrono::tai_clock::is_steady), const bool>::value, "is_steady must be bool");
+static_assert(!std::is_member_pointer<decltype(&std::chrono::tai_clock::is_steady)>::value, "is_steady must be static");
+static_assert(std::chrono::tai_clock::is_steady || true, // NOLINT(readability-simplify-boolean-expr)
+              "is_steady must be constexpr");
 LIBCPP_STATIC_ASSERT(!std::chrono::tai_clock::is_steady);
 
 // typedefs

>From 12ffdaccf7248e7e8a0e4055ff5327ce89072c7d Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 23:09:04 +0200
Subject: [PATCH 20/23] utc clock: test type+storage+constexpr+value

---
 .../time/time.clock/time.clock.utc/types.compile.pass.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
index 37137a5579d56..1ab70f9b66f05 100644
--- a/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.utc/types.compile.pass.cpp
@@ -42,8 +42,6 @@ using period     = std::chrono::utc_clock::period;
 using duration   = std::chrono::utc_clock::duration;
 using time_point = std::chrono::utc_clock::time_point;
 
-[[maybe_unused]] constexpr std::same_as<const bool> decltype(auto) _ = std::chrono::utc_clock::is_steady;
-
 // Tests the values. Some of them are implementation-defined.
 LIBCPP_STATIC_ASSERT(std::same_as<rep, std::chrono::system_clock::rep>);
 static_assert(std::is_arithmetic_v<rep>);
@@ -54,6 +52,12 @@ static_assert(std::same_as<period, std::ratio<period::num, period::den>>);
 
 static_assert(std::same_as<duration, std::chrono::duration<rep, period>>);
 static_assert(std::same_as<time_point, std::chrono::time_point<std::chrono::utc_clock>>);
+
+// is_steady
+static_assert(std::is_same<decltype(std::chrono::utc_clock::is_steady), const bool>::value, "is_steady must be bool");
+static_assert(!std::is_member_pointer<decltype(&std::chrono::utc_clock::is_steady)>::value, "is_steady must be static");
+static_assert(std::chrono::utc_clock::is_steady || true, // NOLINT(readability-simplify-boolean-expr)
+              "is_steady must be constexpr");
 LIBCPP_STATIC_ASSERT(!std::chrono::utc_clock::is_steady);
 
 // typedefs

>From 819c208624a431674d5eca3a52ed224d731e2655 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Tue, 16 Jun 2026 23:33:14 +0200
Subject: [PATCH 21/23] clang-format

---
 .../std/time/time.clock/time.clock.hires/consistency.pass.cpp | 4 ++--
 .../time/time.clock/time.clock.steady/consistency.pass.cpp    | 4 ++--
 .../time/time.clock/time.clock.system/consistency.pass.cpp    | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index fb2b2b1b3d8e7..1c8a6b15b7560 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -24,7 +24,7 @@
 
 #include "test_macros.h"
 
-void odr_use(const bool &) {}
+void odr_use(const bool&) {}
 
 int main(int, char**)
 {
@@ -40,5 +40,5 @@ int main(int, char**)
     LIBCPP_ASSERT(C::is_steady);
     odr_use(C::is_steady);
 
-  return 0;
+    return 0;
 }
diff --git a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
index 6a2d355552357..25422b45e52c6 100644
--- a/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.steady/consistency.pass.cpp
@@ -25,7 +25,7 @@
 
 #include "test_macros.h"
 
-void odr_use(const bool &) {}
+void odr_use(const bool&) {}
 
 int main(int, char**)
 {
@@ -41,5 +41,5 @@ int main(int, char**)
     assert(C::is_steady);
     odr_use(C::is_steady);
 
-  return 0;
+    return 0;
 }
diff --git a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
index 1d2d18fd507f8..65e9dff3fecbd 100644
--- a/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.system/consistency.pass.cpp
@@ -24,7 +24,7 @@
 
 #include "test_macros.h"
 
-void odr_use(const bool &) {}
+void odr_use(const bool&) {}
 
 int main(int, char**)
 {
@@ -41,5 +41,5 @@ int main(int, char**)
     LIBCPP_ASSERT(!C::is_steady);
     odr_use(C::is_steady);
 
-  return 0;
+    return 0;
 }

>From f007121c62e880695b9aebd2a0ceddfeec4cbc9c Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Wed, 17 Jun 2026 22:23:02 +0200
Subject: [PATCH 22/23] hires clock: value depends on
 _LIBCPP_HAS_MONOTONIC_CLOCK

---
 .../std/time/time.clock/time.clock.hires/consistency.pass.cpp   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index 1c8a6b15b7560..714ce2c1137fa 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
     static_assert(!std::is_member_pointer<decltype(&C::is_steady)>::value, "is_steady must be static");
     TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady; // "is_steady must be constexpr"
     (void)is_steady;
-    LIBCPP_ASSERT(C::is_steady);
+    LIBCPP_ASSERT((C::is_steady == std::is_same<C, std::chrono::steady_clock>::value));
     odr_use(C::is_steady);
 
     return 0;

>From c9f02bb298471d22112be8ea4cdd48f4a643e312 Mon Sep 17 00:00:00 2001
From: Paul <paulxicao7 at gmail.com>
Date: Fri, 19 Jun 2026 22:08:51 +0200
Subject: [PATCH 23/23] fixup (steady_clock only visible `#if
 _LIBCPP_HAS_MONOTONIC_CLOCK`)

---
 .../time.clock/time.clock.hires/consistency.pass.cpp   | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
index 714ce2c1137fa..e7d3586c44125 100644
--- a/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
+++ b/libcxx/test/std/time/time.clock/time.clock.hires/consistency.pass.cpp
@@ -37,7 +37,15 @@ int main(int, char**)
     static_assert(!std::is_member_pointer<decltype(&C::is_steady)>::value, "is_steady must be static");
     TEST_CONSTEXPR_CXX14 const bool is_steady = C::is_steady; // "is_steady must be constexpr"
     (void)is_steady;
-    LIBCPP_ASSERT((C::is_steady == std::is_same<C, std::chrono::steady_clock>::value));
+
+    // high_resolution_clock typedefs to steady_clock when _LIBCPP_HAS_MONOTONIC_CLOCK,
+    // else system_clock (e.g. generic-llvm-libc, generic-no-threads).
+    #if _LIBCPP_HAS_MONOTONIC_CLOCK
+        LIBCPP_ASSERT(C::is_steady);
+    #else
+        LIBCPP_ASSERT(!C::is_steady);
+    #endif
+
     odr_use(C::is_steady);
 
     return 0;



More information about the libcxx-commits mailing list