libstdc++: Make std::chrono::current_zone() default to UTC
authorJonathan Wakely <jwakely@redhat.com>
Tue, 28 Feb 2023 21:07:48 +0000 (21:07 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 1 Mar 2023 21:26:08 +0000 (21:26 +0000)
commit4abd5bc600193e821fbc41995a0b8d9ea42b42c3
tree63d094ee9628e23e341c9f7c07a748d52b136b3e
parent096f034a8f5df41f610e62c1592fb90a3f551cd5
libstdc++: Make std::chrono::current_zone() default to UTC

This is consistent with the behaviour of glibc, which assumes UTC when
/etc/localtime and TZ do not identify a valid time zone. The fallback
tzdb used when no valid tzdata exists always contains the UTC zone, so
this change means we have a valid tzdb and valid current zone even in
the degenerate case.

With this default we no longer need the AIX-specific kluge to try and
identify TZ values specifying a 0-offset zone. We can just use the UTC
default for those, as it has the same effect.

It's still possible for chrono::current_zone() to fail, because the user
could have provided a custom tzdata.zi file which doesn't contain the
UTC time zone, so the "UTC" default would fail to find a valid zone, and
throw an exception. That's just user error, they should not provide bad
data and expect reasonable behaviour.

libstdc++-v3/ChangeLog:

* src/c++20/tzdb.cc (chrono::tzdb::current_zone()) Use "UTC" if
current time zone cannot be determined.
* testsuite/std/time/tzdb/1.cc: Remove conditions based on
HAVE_TZDB macro and test all members unconditionally.
libstdc++-v3/src/c++20/tzdb.cc
libstdc++-v3/testsuite/std/time/tzdb/1.cc