On Tue, 13 Oct 2026 at 13:53, <[email protected]> wrote:

> From: Hugo Beauzée-Luyssen <[email protected]>
>
> The C++20 chrono time zone API is declared when
> _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI, but
> __cpp_lib_chrono only gets its C++20 and C++26 values when
> _GLIBCXX_USE_CXX11_ABI is set.  Old-ABI-only builds therefore get
> the full API but report the C++17 value.
>
> Use the same condition for the 201907 and 202306 values, and make the
> headers check __glibcxx_chrono instead of repeating the ABI condition.
>
> Add a chrono_tz effective target for that condition, and use it in
> the tests that were limited to the new ABI, so they also run on
> old-ABI-only builds.
>

That doesn't seem functionally different from the existing tzdb effective
target.




>
> libstdc++-v3/ChangeLog:
>
>         * include/bits/version.def (chrono): Also define 201907 and
>         202306 for old-ABI-only builds.
>         * include/bits/version.h: Regenerate.
>         * include/std/chrono: Check __glibcxx_chrono instead of the
>         ABI macros.
>         * include/bits/chrono_io.h: Likewise.
>         * testsuite/lib/libstdc++.exp (check_effective_target_chrono_tz):
>         New proc.
>         (check_effective_target_tzdb): Use it.
>         * testsuite/std/time/syn_c++20.cc: Fix the ABI check for the
>         expected value.
>         * testsuite/std/time/hash.cc: Also test old-ABI-only builds.
>         * testsuite/std/time/format/pr117214.cc: Likewise.
>         * testsuite/libstdc++-prettyprinters/chrono.cc: Likewise.
>         * testsuite/std/time/format/data_not_present_neg.cc: Likewise,
>         and use chrono_tz instead of cxx11_abi.
>         * testsuite/std/time/clock/utc/leap_second_info-2.cc: Require
>         chrono_tz instead of cxx11_abi.
>         * testsuite/std/time/leap_seconds/io.cc: Likewise.
>         * testsuite/std/time/time_zone/116110.cc: Likewise.
>         * testsuite/std/time/time_zone/124513.cc: Likewise.
>         * testsuite/std/time/time_zone/numeric_save.cc: Likewise.
>         * testsuite/std/time/time_zone/pr116110_named.cc: Likewise.
>         * testsuite/std/time/time_zone/requirements.cc: Likewise.
>         * testsuite/std/time/time_zone/sys_info_abbrev.cc: Likewise.
>         * testsuite/std/time/time_zone/until_day_on.cc: Likewise.
>         * testsuite/std/time/time_zone/wall_cascade.cc: Likewise.
>         * testsuite/std/time/time_zone/zone_merge.cc: Likewise.
>         * testsuite/std/time/tzdb/1.cc: Likewise.
>         * testsuite/std/time/tzdb/leap_seconds.cc: Likewise.
>         * testsuite/std/time/tzdb/links.cc: Likewise.
>         * testsuite/std/time/tzdb_list/1.cc: Likewise.
>         * testsuite/std/time/tzdb_list/pr118811.cc: Likewise.
>         * testsuite/std/time/tzdb_list/requirements.cc: Likewise.
>         * testsuite/std/time/tzdb/name_matching.cc: Likewise.
>         * testsuite/std/time/zoned_time/1.cc: Likewise.
>         * testsuite/std/time/zoned_time/deduction.cc: Likewise.
>         * testsuite/std/time/zoned_time/io.cc: Likewise.
>         * testsuite/std/time/zoned_time/req_neg.cc: Likewise.
>         * testsuite/std/time/zoned_time/requirements.cc: Likewise.
>         * testsuite/std/time/zoned_traits.cc: Likewise.
>
> Assisted-by: Claude (claude-sonnet-5)
> Signed-off-by: Hugo Beauzée-Luyssen <[email protected]>
> ---
> Changes since v3:
> - Use __glibcxx_chrono in <chrono> and <bits/chrono_io.h>.
> - Use the same condition for the 202306 value, without parentheses.
> - Add a chrono_tz effective target and use it in the tests that
>   require the time zone API, so they also run on old-ABI-only builds.
> - Fix the _GLIBCXX_USE_CXX_ABI typo in std/time/syn_c++20.cc.
>
>  libstdc++-v3/include/bits/chrono_io.h         |  8 ++--
>  libstdc++-v3/include/bits/version.def         |  4 +-
>  libstdc++-v3/include/bits/version.h           |  4 +-
>  libstdc++-v3/include/std/chrono               | 12 +++---
>  libstdc++-v3/testsuite/lib/libstdc++.exp      |  8 +++-
>  .../libstdc++-prettyprinters/chrono.cc        |  4 +-
>  .../std/time/clock/utc/leap_second_info-2.cc  |  2 +-
>  .../std/time/format/data_not_present_neg.cc   | 38 +++++++++----------
>  .../testsuite/std/time/format/pr117214.cc     |  4 +-
>  libstdc++-v3/testsuite/std/time/hash.cc       |  8 ++--
>  .../testsuite/std/time/leap_seconds/io.cc     |  2 +-
>  libstdc++-v3/testsuite/std/time/syn_c++20.cc  |  5 ++-
>  .../testsuite/std/time/time_zone/116110.cc    |  2 +-
>  .../testsuite/std/time/time_zone/124513.cc    |  2 +-
>  .../std/time/time_zone/numeric_save.cc        |  2 +-
>  .../std/time/time_zone/pr116110_named.cc      |  2 +-
>  .../std/time/time_zone/requirements.cc        |  2 +-
>  .../std/time/time_zone/sys_info_abbrev.cc     |  2 +-
>  .../std/time/time_zone/until_day_on.cc        |  2 +-
>  .../std/time/time_zone/wall_cascade.cc        |  2 +-
>  .../std/time/time_zone/zone_merge.cc          |  2 +-
>  libstdc++-v3/testsuite/std/time/tzdb/1.cc     |  2 +-
>  .../testsuite/std/time/tzdb/leap_seconds.cc   |  2 +-
>  libstdc++-v3/testsuite/std/time/tzdb/links.cc |  2 +-
>  .../testsuite/std/time/tzdb/name_matching.cc  |  2 +-
>  .../testsuite/std/time/tzdb_list/1.cc         |  2 +-
>  .../testsuite/std/time/tzdb_list/pr118811.cc  |  2 +-
>  .../std/time/tzdb_list/requirements.cc        |  2 +-
>  .../testsuite/std/time/zoned_time/1.cc        |  2 +-
>  .../std/time/zoned_time/deduction.cc          |  2 +-
>  .../testsuite/std/time/zoned_time/io.cc       |  2 +-
>  .../testsuite/std/time/zoned_time/req_neg.cc  |  2 +-
>  .../std/time/zoned_time/requirements.cc       |  2 +-
>  .../testsuite/std/time/zoned_traits.cc        |  2 +-
>  34 files changed, 75 insertions(+), 68 deletions(-)
>
> diff --git a/libstdc++-v3/include/bits/chrono_io.h
> b/libstdc++-v3/include/bits/chrono_io.h
> index 028e6007544..a6be222689d 100644
> --- a/libstdc++-v3/include/bits/chrono_io.h
> +++ b/libstdc++-v3/include/bits/chrono_io.h
> @@ -2083,7 +2083,7 @@ namespace __format
>         }
>      };
>
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#if __glibcxx_chrono >= 201803L
>    template<typename _CharT>
>      struct __formatter_chrono_info
>      {
> @@ -3004,7 +3004,7 @@ namespace __format
>        = enable_nonlocking_formatter_optimization<_Duration>;
>  #endif
>
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#if __glibcxx_chrono >= 201803L
>    template<__format::__char _CharT>
>      struct formatter<chrono::sys_info, _CharT>
>      {
> @@ -3395,7 +3395,7 @@ namespace __format
>        = enable_nonlocking_formatter_optimization<_Duration>;
>  #endif
>
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#if __glibcxx_chrono >= 201803L
>    template<typename _Duration, typename _TimeZonePtr, __format::__char
> _CharT>
>      struct formatter<chrono::zoned_time<_Duration, _TimeZonePtr>, _CharT>
>      : formatter<chrono::__detail::__local_time_fmt_for<_Duration>, _CharT>
> @@ -3872,7 +3872,7 @@ namespace __detail
>         return __detail::__chrono_write<64>(__os, __hms, __os.getloc());
>      }
>
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#if __glibcxx_chrono >= 201803L
>    /// Writes a sys_info object to an ostream in an unspecified format.
>    template<typename _CharT, typename _Traits>
>      basic_ostream<_CharT, _Traits>&
> diff --git a/libstdc++-v3/include/bits/version.def
> b/libstdc++-v3/include/bits/version.def
> index 9c523581c65..35ffb87a3ff 100644
> --- a/libstdc++-v3/include/bits/version.def
> +++ b/libstdc++-v3/include/bits/version.def
> @@ -616,13 +616,13 @@ ftms = {
>      v = 202306;
>      cxxmin = 26;
>      hosted = yes;
> -    cxx11abi = yes;
> +    extra_cond = "_GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI";
>    };
>    values = {
>      v = 201907;
>      cxxmin = 20;
>      hosted = yes;
> -    cxx11abi = yes; // std::chrono::tzdb requires cxx11 std::string
> +    extra_cond = "_GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI";
>    };
>    values = {
>      v = 201611;
> diff --git a/libstdc++-v3/include/bits/version.h
> b/libstdc++-v3/include/bits/version.h
> index e0003054af6..25327bdeb57 100644
> --- a/libstdc++-v3/include/bits/version.h
> +++ b/libstdc++-v3/include/bits/version.h
> @@ -681,12 +681,12 @@
>  #undef __glibcxx_want_boyer_moore_searcher
>
>  #if !defined(__cpp_lib_chrono)
> -# if (__cplusplus >  202302L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED
> +# if (__cplusplus >  202302L) && _GLIBCXX_HOSTED &&
> (_GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI)
>  #  define __glibcxx_chrono 202306L
>  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
>  #   define __cpp_lib_chrono 202306L
>  #  endif
> -# elif (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI &&
> _GLIBCXX_HOSTED
> +# elif (__cplusplus >= 202002L) && _GLIBCXX_HOSTED &&
> (_GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI)
>  #  define __glibcxx_chrono 201907L
>  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
>  #   define __cpp_lib_chrono 201907L
> diff --git a/libstdc++-v3/include/std/chrono
> b/libstdc++-v3/include/std/chrono
> index faa849b75b3..29bc155f743 100644
> --- a/libstdc++-v3/include/std/chrono
> +++ b/libstdc++-v3/include/std/chrono
> @@ -57,7 +57,7 @@
>  # include <bits/stl_algo.h>     // upper_bound
>  # include <bits/range_access.h> // begin/end for arrays
>  #endif
> -#if __cpp_lib_chrono >= 201803L // C++20 && HOSTED && USE_CXX11_ABI
> +#if __glibcxx_chrono >= 201803L // C++20 && HOSTED
>  # include <sstream>
>  # include <string>
>  # include <vector>
> @@ -2529,7 +2529,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>      }
>
>  #if _GLIBCXX_HOSTED
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#if __glibcxx_chrono >= 201803L
>      // C++20 [time.zones] Time zones
>
>      struct tzdb;
> @@ -3204,7 +3204,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>      }
>
>      using zoned_seconds = zoned_time<seconds>;
> -#endif // _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#endif // __glibcxx_chrono >= 201803L
>
>  namespace __detail
>  {
> @@ -3259,7 +3259,7 @@ namespace __detail
>
>        if (__ss > __expires)
>         {
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // use chrono::tzdb
> +#if __glibcxx_chrono >= 201803L // use chrono::tzdb
>           // Call into the library because it might have knowledge of new
>           // leap seconds loaded at runtime from the tzdata files.
>
> @@ -3586,7 +3586,7 @@ namespace __detail
>      };
>
>  #if _GLIBCXX_HOSTED
> -#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#if __glibcxx_chrono >= 201803L
>    // zoned_time
>    template<typename _Duration, typename _TimeZonePtr>
>      requires __is_hash_enabled_for<
> @@ -3643,7 +3643,7 @@ namespace __detail
>                  __val.value().count());
>        }
>      };
> -#endif // _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
> +#endif // __glibcxx_chrono >= 201803L
>  #endif // _GLIBCXX_HOSTED
>  #endif // __glibcxx_chrono_cxx20 >= 202306
>
> diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp
> b/libstdc++-v3/testsuite/lib/libstdc++.exp
> index 3e8240d73a5..fac59c746e7 100644
> --- a/libstdc++-v3/testsuite/lib/libstdc++.exp
> +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
> @@ -1641,9 +1641,15 @@ proc check_effective_target_hosted { } {
>      }]
>  }
>
> +# Return 1 if the C++20 time zone API (std::chrono::tzdb etc.) is
> declared.
> +proc check_effective_target_chrono_tz { } {
> +    set cond "_GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI"
> +    return [v3_check_preprocessor_condition chrono_tz $cond]
> +}
> +
>  # Return 1 if std::chrono::tzdb is supported.
>  proc check_effective_target_tzdb { } {
> -    if {![check_effective_target_cxx11_abi]} {
> +    if {![check_effective_target_chrono_tz]} {
>         return 0
>      }
>      return [check_v3_target_prop_cached et_tzdb {
> diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/chrono.cc
> b/libstdc++-v3/testsuite/libstdc++-prettyprinters/chrono.cc
> index c10198df06e..0bbe82726ec 100644
> --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/chrono.cc
> +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/chrono.cc
> @@ -39,9 +39,9 @@ main()
>    utc_time utc(467664h);
>    // { dg-final { note-test utc {std::chrono::utc_time = { 467664h }} } }
>
> -#if _GLIBCXX_USE_CXX11_ABI && defined TEST_ZONED_TIME
> +#if (_GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI) && defined
> TEST_ZONED_TIME
>

I meant that the tests should use __cpp_lib_chrono, not the ABI macros.
Please leave it to me, I'm already testing a fixed patch. I'll incorporate
the typo fix in syn_c++20.cc



>    zoned_time<milliseconds> zt("Europe/London", half_past_epoch);
> -  // { dg-final { note-test zt {std::chrono::zoned_time = {
> "Europe/London" 1800000ms [1970-01-01 00:30:00] }} { target cxx11_abi } } }
> +  // { dg-final { note-test zt {std::chrono::zoned_time = {
> "Europe/London" 1800000ms [1970-01-01 00:30:00] }} { target chrono_tz } } }
>  #endif
>
>    [[maybe_unused]] day ninth(9);
> diff --git
> a/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc
> b/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc
> index 4f97c2eacaa..5a24d4da4b2 100644
> --- a/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc
> +++ b/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>

We should just remove the cxx11_abi line, it's already implied by the tzdb
line above it.


>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  #include <chrono>
> diff --git
> a/libstdc++-v3/testsuite/std/time/format/data_not_present_neg.cc
> b/libstdc++-v3/testsuite/std/time/format/data_not_present_neg.cc
> index 183dca8310f..b3650277d83 100644
> --- a/libstdc++-v3/testsuite/std/time/format/data_not_present_neg.cc
> +++ b/libstdc++-v3/testsuite/std/time/format/data_not_present_neg.cc
> @@ -119,9 +119,9 @@ auto tai = std::format("{:%Q}", tai_clock::now()); //
> { dg-error "call to conste
>  auto file = std::format("{:%Q}", file_clock::now()); // { dg-error "call
> to consteval function" }
>
>  const auto ltc = local_seconds(10s);
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>  const auto zt = zoned_time<seconds>("Europe/Sofia", local_seconds(10s));
> -auto zt1 = std::format("{:%Q}", zt); // { dg-error "call to consteval
> function" "" { target cxx11_abi } }
> +auto zt1 = std::format("{:%Q}", zt); // { dg-error "call to consteval
> function" "" { target chrono_tz } }
>  #endif
>  auto lf1 = std::format("{:%Q}", local_time_format(ltc)); // { dg-error
> "call to consteval function" }
>
> @@ -141,24 +141,24 @@ auto hms5 = std::format("{:%F}", HMS(1255s)); // {
> dg-error "call to consteval f
>  auto hms6 = std::format("{:%Q}", HMS(1255s)); // { dg-error "call to
> consteval function" }
>  auto hms7 = std::format("{:%Z}", HMS(1255s)); // { dg-error "call to
> consteval function" }
>
> -#if _GLIBCXX_USE_CXX11_ABI
> -auto li1 = std::format("{:%d}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li2 = std::format("{:%w}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li3 = std::format("{:%m}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li4 = std::format("{:%y}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li5 = std::format("{:%F}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li6 = std::format("{:%T}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li7 = std::format("{:%Q}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto li8 = std::format("{:%Z}", local_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
> +auto li1 = std::format("{:%d}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li2 = std::format("{:%w}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li3 = std::format("{:%m}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li4 = std::format("{:%y}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li5 = std::format("{:%F}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li6 = std::format("{:%T}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li7 = std::format("{:%Q}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto li8 = std::format("{:%Z}", local_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
>
> -auto si1 = std::format("{:%d}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si2 = std::format("{:%w}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si3 = std::format("{:%m}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si4 = std::format("{:%y}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si5 = std::format("{:%F}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si6 = std::format("{:%T}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si7 = std::format("{:%Q}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> -auto si8 = std::format("{:%Z}", sys_info()); // { dg-error "call to
> consteval function" "" { target cxx11_abi } }
> +auto si1 = std::format("{:%d}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si2 = std::format("{:%w}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si3 = std::format("{:%m}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si4 = std::format("{:%y}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si5 = std::format("{:%F}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si6 = std::format("{:%T}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si7 = std::format("{:%Q}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
> +auto si8 = std::format("{:%Z}", sys_info()); // { dg-error "call to
> consteval function" "" { target chrono_tz } }
>  #endif
>
>  // { dg-error "call to non-'constexpr' function" "" { target { c++23_down
> || { ! cxx11_abi } } } 0 }
> diff --git a/libstdc++-v3/testsuite/std/time/format/pr117214.cc
> b/libstdc++-v3/testsuite/std/time/format/pr117214.cc
> index 79109c39151..8fdcda1f774 100644
> --- a/libstdc++-v3/testsuite/std/time/format/pr117214.cc
> +++ b/libstdc++-v3/testsuite/std/time/format/pr117214.cc
> @@ -82,7 +82,7 @@ void maybe_set_tz()
>  void
>  test_c_zoned()
>  {
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>    maybe_set_tz();
>
>    using namespace std::chrono;
> @@ -118,7 +118,7 @@ test_c_local()
>    VERIFY( s.find("GMT") == s.npos );
>    VERIFY( s.find("UTC") == s.npos );
>
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>    zoned_time z(system_clock::now());
>    VERIFY( s.find(z.get_info().abbrev) == s.npos );
>  #endif
> diff --git a/libstdc++-v3/testsuite/std/time/hash.cc
> b/libstdc++-v3/testsuite/std/time/hash.cc
> index ed9139bb810..8c47c3bacce 100644
> --- a/libstdc++-v3/testsuite/std/time/hash.cc
> +++ b/libstdc++-v3/testsuite/std/time/hash.cc
> @@ -5,7 +5,7 @@
>  #include <limits.h>
>  #include <testsuite_hooks.h>
>
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>  #  if !defined(__cpp_lib_chrono)
>  #    error "__cpp_lib_chrono not defined"
>  #  elif __cpp_lib_chrono < 202306L
> @@ -188,7 +188,7 @@ void test01()
>    test_hash(2024y / month(1234u) / Tuesday[last]);
>    test_hash(2024y / August / weekday(1234u)[last]);
>
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>    // zoned_time
>    test_hash(zoned_seconds("Europe/Rome", sys_seconds(1234s)));
>    test_hash(zoned_time("Europe/Rome", system_clock::now()));
> @@ -238,7 +238,7 @@ void test03()
>    {
>      test_hash(d);
>      test_hash(sys_time<D>(d));
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>      test_hash(zoned_time<D>(sys_time<D>(d)));
>  #endif
>    };
> @@ -261,7 +261,7 @@ void test04()
>
>  
> static_assert(is_hash_poisoned<duration<non_hashable_arithmetic_wrapper<int>>>);
>
>  
> static_assert(is_hash_poisoned<duration<non_hashable_arithmetic_wrapper<double>>>);
>
> -#if _GLIBCXX_USE_CXX11_ABI
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>    static_assert(!is_hash_poisoned<zoned_time<duration<int>>>);
>    static_assert(!is_hash_poisoned<zoned_time<duration<double>>>);
>
>  
> static_assert(!is_hash_poisoned<zoned_time<duration<arithmetic_wrapper<int>>>>);
> diff --git a/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc
> b/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc
> index 511fafdd1a0..66181eaa581 100644
> --- a/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc
> +++ b/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>  #include <sstream>
> diff --git a/libstdc++-v3/testsuite/std/time/syn_c++20.cc
> b/libstdc++-v3/testsuite/std/time/syn_c++20.cc
> index 01d5b265129..60ce0033174 100644
> --- a/libstdc++-v3/testsuite/std/time/syn_c++20.cc
> +++ b/libstdc++-v3/testsuite/std/time/syn_c++20.cc
> @@ -20,8 +20,9 @@
>
>  #include <chrono>
>
> -// std::chrono::tzdb is not defined for the old std::string ABI.
> -#if _GLIBCXX_USE_CXX_ABI
> +// std::chrono::tzdb is not defined for the old std::string ABI,
> +// unless the dual ABI is disabled.
> +#if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI
>  # define EXPECTED_VALUE 201907L
>  #else
>  # define EXPECTED_VALUE 201611L
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/116110.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/116110.cc
> index 45daed8c050..e6f667f82aa 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/116110.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/116110.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/124513.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/124513.cc
> index 49d7ba8bb01..4c67faebbe7 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/124513.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/124513.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  #include <chrono>
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc
> index 687524bb355..08bb180b753 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  // When a Zone line specifies a numeric value as its RULES field, that
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/pr116110_named.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/pr116110_named.cc
> index b3bf4eb1aa9..4a73a2de8a2 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/pr116110_named.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/pr116110_named.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  // Africa/Algiers 1977-10-21: a Zone line whose RULES references a
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
> index 929fea2c0eb..ba7fe985c90 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
> @@ -1,5 +1,5 @@
>  // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
> index f1a8fff02f5..4a13584edf3 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  #include <chrono>
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
> index 38e4bc254cc..11d15d26382 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  // The DAY portion of a Zone line's UNTIL field accepts not only a
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc
> index fcce1937ea6..0b297c223c3 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  // Wall-time rules in the same rule set whose effective firing time
> diff --git a/libstdc++-v3/testsuite/std/time/time_zone/zone_merge.cc
> b/libstdc++-v3/testsuite/std/time/time_zone/zone_merge.cc
> index 75942f976b6..8c3836cfd0f 100644
> --- a/libstdc++-v3/testsuite/std/time/time_zone/zone_merge.cc
> +++ b/libstdc++-v3/testsuite/std/time/time_zone/zone_merge.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  // When two adjacent Zone lines differ in total offset and the new line's
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb/1.cc
> b/libstdc++-v3/testsuite/std/time/tzdb/1.cc
> index 7a31c1c20ba..97d61006752 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb/1.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb/1.cc
> @@ -1,5 +1,5 @@
>  // { dg-do run { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
> b/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
> index 5999635a89f..10a2f4cbcea 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  #include <chrono>
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb/links.cc
> b/libstdc++-v3/testsuite/std/time/tzdb/links.cc
> index 0ba214846c6..3579b03c4a9 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb/links.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb/links.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  #include <chrono>
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc
> b/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc
> index 8d845ab94b9..c0257b0eb98 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
>
>  #include <chrono>
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
> b/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
> index 587aa950277..457e3694d27 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>  #include <fstream>
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc
> b/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc
> index fe86602ecce..cdfc18f5865 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-require-static-libstdcxx "" }
>  // { dg-additional-options "-static-libstdc++" }
>
> diff --git a/libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
> b/libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
> index b26704f4146..8699f3d51e7 100644
> --- a/libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
> +++ b/libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
> @@ -1,5 +1,5 @@
>  // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>
> diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/1.cc
> b/libstdc++-v3/testsuite/std/time/zoned_time/1.cc
> index a77cd99dd55..686295c5937 100644
> --- a/libstdc++-v3/testsuite/std/time/zoned_time/1.cc
> +++ b/libstdc++-v3/testsuite/std/time/zoned_time/1.cc
> @@ -1,6 +1,6 @@
>  // { dg-do run { target c++20 } }
>  // { dg-require-effective-target tzdb }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>  #include <testsuite_hooks.h>
> diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/deduction.cc
> b/libstdc++-v3/testsuite/std/time/zoned_time/deduction.cc
> index 05bc275f592..6a9e2354bbd 100644
> --- a/libstdc++-v3/testsuite/std/time/zoned_time/deduction.cc
> +++ b/libstdc++-v3/testsuite/std/time/zoned_time/deduction.cc
> @@ -1,5 +1,5 @@
>  // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>
> diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/io.cc
> b/libstdc++-v3/testsuite/std/time/zoned_time/io.cc
> index c113eea6d3f..60887f8f9b9 100644
> --- a/libstdc++-v3/testsuite/std/time/zoned_time/io.cc
> +++ b/libstdc++-v3/testsuite/std/time/zoned_time/io.cc
> @@ -1,5 +1,5 @@
>  // { dg-do run { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>  // { dg-timeout-factor 2 }
>
>  #include <chrono>
> diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/req_neg.cc
> b/libstdc++-v3/testsuite/std/time/zoned_time/req_neg.cc
> index 169dc6dae5c..f0ac78f4117 100644
> --- a/libstdc++-v3/testsuite/std/time/zoned_time/req_neg.cc
> +++ b/libstdc++-v3/testsuite/std/time/zoned_time/req_neg.cc
> @@ -1,5 +1,5 @@
>  // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>
> diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/requirements.cc
> b/libstdc++-v3/testsuite/std/time/zoned_time/requirements.cc
> index e7bf05e9474..9aa945a8e78 100644
> --- a/libstdc++-v3/testsuite/std/time/zoned_time/requirements.cc
> +++ b/libstdc++-v3/testsuite/std/time/zoned_time/requirements.cc
> @@ -1,5 +1,5 @@
>  // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>
> diff --git a/libstdc++-v3/testsuite/std/time/zoned_traits.cc
> b/libstdc++-v3/testsuite/std/time/zoned_traits.cc
> index 83cf6635127..763b05d862e 100644
> --- a/libstdc++-v3/testsuite/std/time/zoned_traits.cc
> +++ b/libstdc++-v3/testsuite/std/time/zoned_traits.cc
> @@ -1,5 +1,5 @@
>  // { dg-do run { target c++20 } }
> -// { dg-require-effective-target cxx11_abi }
> +// { dg-require-effective-target chrono_tz }
>
>  #include <chrono>
>  #include <testsuite_hooks.h>
> --
> 2.43.0
>
>
>

Reply via email to