https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127815

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |redi at gcc dot gnu.org

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
--- a/libstdc++-v3/src/c++20/tzdb.cc
+++ b/libstdc++-v3/src/c++20/tzdb.cc
@@ -1085,7 +1085,10 @@ namespace std::chrono
     sys_info info;

     if (i == infos.begin())
-      info.begin = sys_days(year::min()/January/1);
+      {
+       info.begin = sys_days(year::min()/January/1);
+       tp = info.begin;
+      }
     else
       info.begin = i[-1].until();

@@ -1106,7 +1109,7 @@ namespace std::chrono
       __throw_runtime_error("std::chrono::time_zone::get_info: invalid data");

     vector<pair<sys_info, string_view>> new_infos;
-    if (int n = ceil<years>(tp - info.begin).count())
+    if (int n = ceil<years>(chrono::abs(tp - info.begin)).count())
       new_infos.reserve(std::min(100, n * 2));
     long result_index = -1;
     int num_after = 4; // number of sys_info to generate past tp.

Reply via email to