--- /dev/null
+// { dg-do compile }
+// { dg-additional-options "-std=gnu++20 -O2 -w -march=isaa" }
+namespace std {
+struct __conditional {
+ template <typename _Tp, typename> using type = _Tp;
+};
+template <bool, typename _If, typename _Else>
+using __conditional_t = __conditional::type<_If, _Else>;
+template <typename> constexpr bool is_lvalue_reference_v = true;
+template <typename> bool is_same_v;
+template <typename _From, typename _To>
+constexpr bool is_convertible_v = __is_convertible(_From, _To);
+template <typename> bool is_invocable_v;
+template <typename...> using common_reference_t = int;
+template <typename _Iterator> struct iterator_traits : _Iterator {};
+namespace __detail {
+template <typename, typename _Up>
+concept __same_as = is_same_v<_Up>;
+}
+template <typename _Tp, typename _Up>
+concept same_as = __detail::__same_as<_Up, _Tp>;
+template <typename _Derived, typename _Base>
+concept derived_from = is_convertible_v<_Derived, _Base>;
+template <typename, typename>
+concept common_reference_with =
+ same_as<common_reference_t<>, common_reference_t<>>;
+namespace __detail {
+template <typename _Tp>
+concept __boolean_testable = requires(_Tp __t) { __t; };
+template <typename _Tp, typename>
+concept __weakly_eq_cmp_with = requires(_Tp __t) { __t; };
+} // namespace __detail
+template <typename... _Args>
+concept invocable = is_invocable_v<_Args...>;
+template <typename>
+concept regular_invocable = invocable<>;
+template <typename _Fn>
+concept predicate = __detail::__boolean_testable<_Fn>;
+template <typename _Rel, typename, typename>
+concept relation = predicate<_Rel>;
+template <typename _Rel, typename _Tp, typename _Up>
+concept strict_weak_order = relation<_Rel, _Tp, _Up>;
+namespace {
+struct duration {
+ duration() = default;
+ template <typename _Rep2> duration(_Rep2 __rep) : __r(__rep) {}
+ long long count() { return __r; }
+ long long __r;
+};
+long long operator+(duration __lhs, duration __rhs) {
+ long __trans_tmp_1 = __lhs.count();
+ return __trans_tmp_1 + __rhs.count();
+}
+struct time_point {
+ time_point();
+ time_point(duration __dur) : __d(__dur) {}
+ duration time_since_epoch() { return __d; }
+ duration __d;
+};
+time_point operator+(time_point __lhs, duration __rhs) {
+ duration __trans_tmp_2 = __lhs.time_since_epoch();
+ return time_point(__trans_tmp_2 + __rhs);
+}
+template <typename> using sys_time = time_point;
+} // namespace
+template <typename> class allocator;
+namespace {
+struct less {};
+} // namespace
+struct forward_iterator_tag {};
+namespace __detail {
+template <typename _Iter> struct __iter_traits_impl {
+ using type = iterator_traits<_Iter>;
+};
+template <typename _Iter> using __iter_traits = __iter_traits_impl<_Iter>::type;
+template <typename> struct __iter_concept_impl;
+template <typename _Iter>
+ requires requires { typename _Iter; }
+struct __iter_concept_impl<_Iter> {
+ using type = __iter_traits<_Iter>::iterator_concept;
+};
+template <typename _Iter>
+using __iter_concept = __iter_concept_impl<_Iter>::type;
+template <typename _In>
+concept __indirectly_readable_impl = common_reference_with<_In, _In>;
+} // namespace __detail
+template <typename _In>
+concept indirectly_readable = __detail::__indirectly_readable_impl<_In>;
+template <typename _Iter>
+concept input_or_output_iterator = requires(_Iter __i) { __i; };
+template <typename _Sent, typename _Iter>
+concept sentinel_for = __detail::__weakly_eq_cmp_with<_Sent, _Iter>;
+template <typename _Iter>
+concept forward_iterator =
+ derived_from<__detail::__iter_concept<_Iter>, forward_iterator_tag>;
+template <typename _Fn, typename>
+concept indirectly_regular_unary_invocable = regular_invocable<_Fn>;
+template <typename _Fn, typename _I1, typename _I2>
+concept indirect_strict_weak_order = strict_weak_order<_Fn, _I1, _I2>;
+namespace __detail {
+template <typename, typename> struct __projected;
+}
+template <indirectly_readable _Iter,
+ indirectly_regular_unary_invocable<_Iter> _Proj>
+using projected = __detail::__projected<_Iter, _Proj>;
+namespace ranges::__access {
+template <typename _Tp> auto __begin(_Tp __t) { return __t.begin(); }
+} // namespace ranges::__access
+namespace __detail {
+template <typename _Tp>
+using __range_iter_t = decltype(ranges::__access::__begin(_Tp()));
+}
+template <typename _Tp> struct iterator_traits<_Tp *> {
+ typedef forward_iterator_tag iterator_concept;
+ using reference = _Tp;
+};
+} // namespace std
+template <typename _Iterator, typename> struct __normal_iterator {
+ using iterator_concept = std::__detail::__iter_concept<_Iterator>;
+ std::iterator_traits<_Iterator>::reference operator*();
+ void operator++();
+};
+template <typename _IteratorL, typename _IteratorR, typename _Container>
+bool operator==(__normal_iterator<_IteratorL, _Container>,
+ __normal_iterator<_IteratorR, _Container>);
+int _M_get_sys_info_ri;
+namespace std {
+template <typename> struct allocator_traits;
+template <typename _Tp> struct allocator_traits<allocator<_Tp>> {
+ using pointer = _Tp *;
+};
+namespace {
+namespace __detail {
+template <typename _Tp>
+concept __maybe_borrowed_range = is_lvalue_reference_v<_Tp>;
+}
+int end;
+template <typename>
+concept range = requires { end; };
+template <typename _Tp>
+concept borrowed_range = __detail::__maybe_borrowed_range<_Tp>;
+template <typename _Tp> using iterator_t = std::__detail::__range_iter_t<_Tp>;
+template <typename _Tp>
+concept forward_range = forward_iterator<iterator_t<_Tp>>;
+struct dangling;
+template <input_or_output_iterator _It, sentinel_for<_It> _Sent = _It>
+struct subrange {
+ _It begin();
+ _Sent end();
+};
+template <range _Range>
+using borrowed_subrange_t =
+ __conditional_t<borrowed_range<_Range>, subrange<iterator_t<_Range>>,
+ dangling>;
+} // namespace
+template <typename _Alloc> struct _Vector_base {
+ typedef allocator_traits<_Alloc>::pointer pointer;
+};
+template <typename _Tp, typename _Alloc = allocator<_Tp>> struct vector {
+ __normal_iterator<typename _Vector_base<_Alloc>::pointer, int> begin();
+};
+template <typename _Tp> struct __shared_ptr_access {
+ _Tp *operator->();
+};
+namespace chrono {
+struct weekday {
+ char _M_wd;
+ weekday _S_from_days() {
+ long __trans_tmp_3;
+ return 7 > __trans_tmp_3;
+ }
+ weekday(unsigned __wd) : _M_wd(__wd == 7 ?: __wd) {}
+ weekday() : weekday{_S_from_days()} {}
+ unsigned c_encoding() { return _M_wd; }
+ friend duration operator-(weekday __x, weekday __y) {
+ auto __n = __x.c_encoding() - __y.c_encoding();
+ return int(__n) >= 0 ? __n : duration{};
+ }
+};
+struct year_month_day {
+ year_month_day _S_from_days(duration __dp) {
+ auto __r0 = int(__dp.count()), __u2 = 5 * __r0;
+ year_month_day{__u2};
+ }
+ year_month_day();
+ year_month_day(int);
+ year_month_day(sys_time<long> __dp)
+ : year_month_day(_S_from_days(__dp.time_since_epoch())) {}
+};
+struct time_zone {
+ void _M_get_sys_info() const;
+};
+} // namespace chrono
+namespace ranges {
+struct {
+ template <
+ forward_range _Range, typename _Tp, typename _Proj,
+ indirect_strict_weak_order<_Tp, projected<_Range, _Proj>> _Comp = less>
+ borrowed_subrange_t<_Range> operator()(_Range, _Tp, _Comp, _Proj);
+} equal_range;
+} // namespace ranges
+} // namespace std
+namespace std::chrono {
+struct Rule;
+unsigned day_of_week;
+struct _Node {
+ vector<Rule> rules;
+};
+char name;
+struct Rule {
+ int from;
+ void start_time(int, long) {
+ year_month_day ymd;
+ sys_time<long> date;
+ duration diff = day_of_week - weekday{};
+ ymd = date + diff;
+ }
+};
+__shared_ptr_access<_Node> __trans_tmp_5;
+void time_zone::_M_get_sys_info() const {
+ auto node = __trans_tmp_5;
+ auto rules = ranges::equal_range(node->rules, _M_get_sys_info_ri, {}, name);
+ for (auto rule : rules)
+ rule.start_time(rule.from, {});
+}
+} // namespace std::chrono