https://gcc.gnu.org/g:ebca7252ebc47cf6daab41c5ca1ea7e858302fbe
commit r17-4931-gebca7252ebc47cf6daab41c5ca1ea7e858302fbe Author: Jonathan Wakely <[email protected]> Date: Tue Oct 6 13:40:11 2026 +0100 libstdc++: Rename _M_is_leap_second to _M_60th_second in chrono::parse The _M_is_leap_second flag doesn't actually mean the time is a leap second, additional checks are needed to confirm that. It really just means that we parsed "60" or something like "60.123" for the seconds field. How the caller interprets that depends on the caller. Rename it to _M_60th_second which is more accurate and avoids implying that the parsed time is definitely a leap second. libstdc++-v3/ChangeLog: * include/bits/chrono_io.h (_Parser::_M_is_leap_second): Rename to _M_60th_second. Diff: --- libstdc++-v3/include/bits/chrono_io.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index 33f6fcb9d2c6..028e60075448 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -3450,7 +3450,7 @@ namespace __detail year_month_day _M_ymd{}; weekday _M_wd{}; __format::_ChronoParts _M_need; - unsigned _M_is_leap_second : 1 {}; + unsigned _M_60th_second : 1 {}; unsigned _M_reserved : 15 {}; template<typename _CharT, typename _Traits, typename _Alloc> @@ -3923,7 +3923,7 @@ namespace __detail __detail::_Parser_t<_Duration> __p(__need); if (__p(__is, __fmt, __abbrev, __offset)) { - if (__p._M_is_leap_second) + if (__p._M_60th_second) __is.setstate(ios_base::failbit); else { @@ -3962,7 +3962,7 @@ namespace __detail auto __ut = utc_clock::from_sys(__p._M_sys_days) + __p._M_time - *__offset; // Reject ":60" seconds unless the utc_time is a known leap second. - if (__p._M_is_leap_second + if (__p._M_60th_second && (chrono::floor<seconds>(__p._M_time - *__offset) != hours(24) || !chrono::get_leap_second_info(__ut).is_leap_second)) __is.setstate(ios_base::failbit); @@ -3995,7 +3995,7 @@ namespace __detail __detail::_Parser_t<_Duration> __p(__need); if (__p(__is, __fmt, __abbrev, __offset)) { - if (__p._M_is_leap_second) + if (__p._M_60th_second) __is.setstate(ios_base::failbit); else { @@ -4030,7 +4030,7 @@ namespace __detail __detail::_Parser_t<_Duration> __p(__need); if (__p(__is, __fmt, __abbrev, __offset)) { - if (__p._M_is_leap_second) + if (__p._M_60th_second) __is.setstate(ios_base::failbit); else { @@ -5461,7 +5461,7 @@ namespace __detail __t += __s; // Record that we had "60" or "60.ddd" for seconds. // Caller checks for valid leap second, if needed. - _M_is_leap_second = __s >= seconds(60); + _M_60th_second = __s >= seconds(60); } if (__ok)
