On Mon, 8 Jun 2026 at 14:21, Torbjörn SVENSSON <[email protected]> wrote: > > Ok for trunk?
Hmm, I think I'd rather make this work without atomics. I can look at this on Monday. > > Kind regards, > Torbjörn > > -- > > On target that does not support atomic word operations, like Cortex-M0, > the following error can be seen in the logs: > > /build/r17-1372-g80b78b2504fba0/arm-none-eabi/bin/ld: > /build/r17-1372-g80b78b2504fba0/bin/../lib/gcc/arm-none-eabi/17.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(tzdb.o): > in function > `std::chrono::__detail::__recent_leap_second_info(std::chrono::leap_second_info&, > unsigned int)': > (.text._ZNSt6chrono8__detail25__recent_leap_second_infoERNS_16leap_second_infoEj+0xf0): > undefined reference to `__atomic_compare_exchange_4' > /build/r17-1372-g80b78b2504fba0/arm-none-eabi/bin/ld: > (__atomic_compare_exchange_4): Unknown destination type (ARM/Thumb) in > /build/r17-1372-g80b78b2504fba0/bin/../lib/gcc/arm-none-eabi/17.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(tzdb.o) > (.text._ZNSt6chrono8__detail25__recent_leap_second_infoERNS_16leap_second_infoEj+0xf0): > dangerous relocation: unsupported relocation > collect2: error: ld returned 1 exit status > > libstdc++-v3/ChangeLog: > > * testsuite/std/time/clock/gps/1.cc: Add > dg-require-atomic-cmpxchg-word to test. > * testsuite/std/time/clock/tai/1.cc: Likewise. > * testsuite/std/time/clock/utc/1.cc: Likewise. > * testsuite/std/time/clock/utc/io.cc: Likewise. > * testsuite/std/time/clock/utc/leap_second_info-2.cc: Likewise. > * testsuite/std/time/clock/utc/leap_second_info.cc: Likewise. > * testsuite/std/time/exceptions.cc: Likewise. > * testsuite/std/time/format/empty_spec.cc: Likewise. > * testsuite/std/time/format/format.cc: Likewise. > * testsuite/std/time/hash.cc: Likewise. > * testsuite/std/time/leap_seconds/io.cc: Likewise. > * testsuite/std/time/parse/114240.cc: Likewise. > * testsuite/std/time/parse/114279.cc: Likewise. > * testsuite/std/time/time_zone/116110.cc: Likewise. > * testsuite/std/time/time_zone/124513.cc: Likewise. > * testsuite/std/time/time_zone/get_info_local.cc: Likewise. > * testsuite/std/time/time_zone/get_info_sys.cc: Likewise. > * testsuite/std/time/time_zone/numeric_save.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/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/zoned_time/1.cc: Likewise. > * testsuite/std/time/zoned_time/custom.cc: Likewise. > * testsuite/std/time/zoned_time/io.cc: Likewise. > * testsuite/std/time/zoned_traits.cc: Likewise. > > Signed-off-by: Torbjörn SVENSSON <[email protected]> > --- > libstdc++-v3/testsuite/std/time/clock/gps/1.cc | 1 + > libstdc++-v3/testsuite/std/time/clock/tai/1.cc | 1 + > libstdc++-v3/testsuite/std/time/clock/utc/1.cc | 1 + > libstdc++-v3/testsuite/std/time/clock/utc/io.cc | 1 + > libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc | 1 + > libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc | 1 + > libstdc++-v3/testsuite/std/time/exceptions.cc | 1 + > libstdc++-v3/testsuite/std/time/format/empty_spec.cc | 1 + > libstdc++-v3/testsuite/std/time/format/format.cc | 1 + > libstdc++-v3/testsuite/std/time/hash.cc | 1 + > libstdc++-v3/testsuite/std/time/leap_seconds/io.cc | 1 + > libstdc++-v3/testsuite/std/time/parse/114240.cc | 1 + > libstdc++-v3/testsuite/std/time/parse/114279.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/116110.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/124513.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc | 1 + > libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc | 1 + > libstdc++-v3/testsuite/std/time/tzdb/1.cc | 1 + > libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc | 1 + > libstdc++-v3/testsuite/std/time/tzdb/links.cc | 1 + > libstdc++-v3/testsuite/std/time/tzdb_list/1.cc | 1 + > libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc | 1 + > libstdc++-v3/testsuite/std/time/zoned_time/1.cc | 1 + > libstdc++-v3/testsuite/std/time/zoned_time/custom.cc | 1 + > libstdc++-v3/testsuite/std/time/zoned_time/io.cc | 1 + > libstdc++-v3/testsuite/std/time/zoned_traits.cc | 1 + > 29 files changed, 29 insertions(+) > > diff --git a/libstdc++-v3/testsuite/std/time/clock/gps/1.cc > b/libstdc++-v3/testsuite/std/time/clock/gps/1.cc > index 8be517b316b..48ae2e9b3ae 100644 > --- a/libstdc++-v3/testsuite/std/time/clock/gps/1.cc > +++ b/libstdc++-v3/testsuite/std/time/clock/gps/1.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > > #include <chrono> > #include <testsuite_hooks.h> > diff --git a/libstdc++-v3/testsuite/std/time/clock/tai/1.cc > b/libstdc++-v3/testsuite/std/time/clock/tai/1.cc > index 63cc9927859..5ad27d4f532 100644 > --- a/libstdc++-v3/testsuite/std/time/clock/tai/1.cc > +++ b/libstdc++-v3/testsuite/std/time/clock/tai/1.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > > #include <chrono> > #include <testsuite_hooks.h> > diff --git a/libstdc++-v3/testsuite/std/time/clock/utc/1.cc > b/libstdc++-v3/testsuite/std/time/clock/utc/1.cc > index 4852658001e..f574ff41686 100644 > --- a/libstdc++-v3/testsuite/std/time/clock/utc/1.cc > +++ b/libstdc++-v3/testsuite/std/time/clock/utc/1.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > > #include <chrono> > #include <testsuite_hooks.h> > diff --git a/libstdc++-v3/testsuite/std/time/clock/utc/io.cc > b/libstdc++-v3/testsuite/std/time/clock/utc/io.cc > index ed1daa7a855..8e168bc35d7 100644 > --- a/libstdc++-v3/testsuite/std/time/clock/utc/io.cc > +++ b/libstdc++-v3/testsuite/std/time/clock/utc/io.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-timeout-factor 2 } > > #include <chrono> > 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 59634b34944..7cf97ca271d 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,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > diff --git a/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc > b/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc > index 2fabda49423..7272772188a 100644 > --- a/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc > +++ b/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-additional-options "-DHAVE_TZDB" { target tzdb } } > > #include <chrono> > diff --git a/libstdc++-v3/testsuite/std/time/exceptions.cc > b/libstdc++-v3/testsuite/std/time/exceptions.cc > index 06b8a53c353..e455eb6f271 100644 > --- a/libstdc++-v3/testsuite/std/time/exceptions.cc > +++ b/libstdc++-v3/testsuite/std/time/exceptions.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > > #include <chrono> > diff --git a/libstdc++-v3/testsuite/std/time/format/empty_spec.cc > b/libstdc++-v3/testsuite/std/time/format/empty_spec.cc > index b84f84a3069..6eef475d815 100644 > --- a/libstdc++-v3/testsuite/std/time/format/empty_spec.cc > +++ b/libstdc++-v3/testsuite/std/time/format/empty_spec.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target hosted } > // { dg-timeout-factor 5 } > > diff --git a/libstdc++-v3/testsuite/std/time/format/format.cc > b/libstdc++-v3/testsuite/std/time/format/format.cc > index d1aee053acd..ac8c1cc1f59 100644 > --- a/libstdc++-v3/testsuite/std/time/format/format.cc > +++ b/libstdc++-v3/testsuite/std/time/format/format.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-timeout-factor 2 } > > #include <chrono> > diff --git a/libstdc++-v3/testsuite/std/time/hash.cc > b/libstdc++-v3/testsuite/std/time/hash.cc > index ed9139bb810..a511099207e 100644 > --- a/libstdc++-v3/testsuite/std/time/hash.cc > +++ b/libstdc++-v3/testsuite/std/time/hash.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++26 } } > +// { dg-require-atomic-cmpxchg-word "" } > > #include <chrono> > #include <unordered_set> > diff --git a/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc > b/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc > index 511fafdd1a0..3c721f29543 100644 > --- a/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc > +++ b/libstdc++-v3/testsuite/std/time/leap_seconds/io.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > > diff --git a/libstdc++-v3/testsuite/std/time/parse/114240.cc > b/libstdc++-v3/testsuite/std/time/parse/114240.cc > index 46310efd09a..188690ab9d9 100644 > --- a/libstdc++-v3/testsuite/std/time/parse/114240.cc > +++ b/libstdc++-v3/testsuite/std/time/parse/114240.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > > // PR libstdc++/114240 sys_days not being parsed with only a date in the > stream > > diff --git a/libstdc++-v3/testsuite/std/time/parse/114279.cc > b/libstdc++-v3/testsuite/std/time/parse/114279.cc > index 67e5cba23bd..dbb9fdb5774 100644 > --- a/libstdc++-v3/testsuite/std/time/parse/114279.cc > +++ b/libstdc++-v3/testsuite/std/time/parse/114279.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > > #include <chrono> > #include <sstream> > diff --git a/libstdc++-v3/testsuite/std/time/time_zone/116110.cc > b/libstdc++-v3/testsuite/std/time/time_zone/116110.cc > index 26b9ba33c31..47fa427b7f7 100644 > --- a/libstdc++-v3/testsuite/std/time/time_zone/116110.cc > +++ b/libstdc++-v3/testsuite/std/time/time_zone/116110.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > > diff --git a/libstdc++-v3/testsuite/std/time/time_zone/124513.cc > b/libstdc++-v3/testsuite/std/time/time_zone/124513.cc > index 49d7ba8bb01..c02beb28147 100644 > --- a/libstdc++-v3/testsuite/std/time/time_zone/124513.cc > +++ b/libstdc++-v3/testsuite/std/time/time_zone/124513.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > diff --git a/libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc > b/libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc > index d2972aca7df..609dc6ae49a 100644 > --- a/libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc > +++ b/libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > > #include <chrono> > diff --git a/libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc > b/libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc > index 88f16b76ff4..05f1b40cf65 100644 > --- a/libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc > +++ b/libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > > #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..4761e3d3c5e 100644 > --- a/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc > +++ b/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > 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..86508c543a0 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,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > 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..9ca407655ab 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,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > diff --git a/libstdc++-v3/testsuite/std/time/tzdb/1.cc > b/libstdc++-v3/testsuite/std/time/tzdb/1.cc > index 7a31c1c20ba..d68968da226 100644 > --- a/libstdc++-v3/testsuite/std/time/tzdb/1.cc > +++ b/libstdc++-v3/testsuite/std/time/tzdb/1.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target cxx11_abi } > > #include <chrono> > diff --git a/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc > b/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc > index 5999635a89f..0a1cf04a62e 100644 > --- a/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc > +++ b/libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > diff --git a/libstdc++-v3/testsuite/std/time/tzdb/links.cc > b/libstdc++-v3/testsuite/std/time/tzdb/links.cc > index 0ba214846c6..676e1ba7804 100644 > --- a/libstdc++-v3/testsuite/std/time/tzdb/links.cc > +++ b/libstdc++-v3/testsuite/std/time/tzdb/links.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } } > diff --git a/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc > b/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc > index 587aa950277..18827f15378 100644 > --- a/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc > +++ b/libstdc++-v3/testsuite/std/time/tzdb_list/1.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > > diff --git a/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc > b/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc > index fe86602ecce..38139e5ca38 100644 > --- a/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc > +++ b/libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > // { dg-require-static-libstdcxx "" } > diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/1.cc > b/libstdc++-v3/testsuite/std/time/zoned_time/1.cc > index a77cd99dd55..dfead853e26 100644 > --- a/libstdc++-v3/testsuite/std/time/zoned_time/1.cc > +++ b/libstdc++-v3/testsuite/std/time/zoned_time/1.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > // { dg-require-effective-target cxx11_abi } > > diff --git a/libstdc++-v3/testsuite/std/time/zoned_time/custom.cc > b/libstdc++-v3/testsuite/std/time/zoned_time/custom.cc > index 83e1f6dca43..1f5056c3c76 100644 > --- a/libstdc++-v3/testsuite/std/time/zoned_time/custom.cc > +++ b/libstdc++-v3/testsuite/std/time/zoned_time/custom.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target tzdb } > > #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..a95bc629698 100644 > --- a/libstdc++-v3/testsuite/std/time/zoned_time/io.cc > +++ b/libstdc++-v3/testsuite/std/time/zoned_time/io.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target cxx11_abi } > // { dg-timeout-factor 2 } > > diff --git a/libstdc++-v3/testsuite/std/time/zoned_traits.cc > b/libstdc++-v3/testsuite/std/time/zoned_traits.cc > index 83cf6635127..4ccf6e74aaf 100644 > --- a/libstdc++-v3/testsuite/std/time/zoned_traits.cc > +++ b/libstdc++-v3/testsuite/std/time/zoned_traits.cc > @@ -1,4 +1,5 @@ > // { dg-do run { target c++20 } } > +// { dg-require-atomic-cmpxchg-word "" } > // { dg-require-effective-target cxx11_abi } > > #include <chrono> > -- > 2.43.0 >
