nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1From f073c54f9c69108707dc477c890592049fcd95db Mon Sep 17 00:00:00 2001
2From: Hartmut Kaiser <hartmut.kaiser@gmail.com>
3Date: Mon, 30 Jun 2025 09:49:03 -0500
4Subject: [PATCH 1/2] Removing deprecated Asio features
5
6Signed-off-by: Hartmut Kaiser <hartmut.kaiser@gmail.com>
7---
8 .../iostreams/src/server/output_stream.cpp | 30 ++++--
9 examples/async_io/async_io_low_level.cpp | 5 +
10 libs/core/asio/include/hpx/asio/asio_util.hpp | 6 ++
11 libs/core/asio/src/asio_util.cpp | 102 +++++++++++++++++-
12 libs/core/executors/src/service_executors.cpp | 10 +-
13 .../hpx/io_service/io_service_pool.hpp | 4 +
14 libs/core/io_service/src/io_service_pool.cpp | 4 +
15 libs/core/runtime_local/src/pool_timer.cpp | 2 +-
16 .../src/parcelport_gasnet.cpp | 6 ++
17 .../parcelport_lci/src/parcelport_lci.cpp | 13 ++-
18 .../parcelport_mpi/src/parcelport_mpi.cpp | 6 ++
19 11 files changed, 168 insertions(+), 20 deletions(-)
20
21diff --git a/components/iostreams/src/server/output_stream.cpp b/components/iostreams/src/server/output_stream.cpp
22index dd0a519b27f8..40f8ee0758a3 100644
23--- a/components/iostreams/src/server/output_stream.cpp
24+++ b/components/iostreams/src/server/output_stream.cpp
25@@ -34,7 +34,7 @@ namespace hpx::iostreams::detail {
26 ar << valid;
27 if (valid)
28 {
29- ar& data_;
30+ ar & data_;
31 }
32 }
33
34@@ -44,7 +44,7 @@ namespace hpx::iostreams::detail {
35 ar >> valid;
36 if (valid)
37 {
38- ar& data_;
39+ ar & data_;
40 }
41 }
42 } // namespace hpx::iostreams::detail
43@@ -53,23 +53,29 @@ namespace hpx::iostreams::server {
44 ///////////////////////////////////////////////////////////////////////////
45 void output_stream::call_write_async(std::uint32_t locality_id,
46 std::uint64_t count, detail::buffer const& in, hpx::id_type /*this_id*/)
47- { // {{{
48+ {
49 // Perform the IO operation.
50 pending_output_.output(locality_id, count, in, write_f, mtx_);
51- } // }}}
52+ }
53
54 void output_stream::write_async(std::uint32_t locality_id,
55 std::uint64_t count, detail::buffer const& buf_in)
56- { // {{{
57+ {
58 // Perform the IO in another OS thread.
59 detail::buffer in(buf_in);
60 // we need to capture the GID of the component to keep it alive long
61 // enough.
62 hpx::id_type this_id = this->get_id();
63+#if ASIO_VERSION >= 103400
64+ asio::post(hpx::get_thread_pool("io_pool")->get_io_service(),
65+ hpx::bind_front(&output_stream::call_write_async, this, locality_id,
66+ count, HPX_MOVE(in), HPX_MOVE(this_id)));
67+#else
68 hpx::get_thread_pool("io_pool")->get_io_service().post(
69 hpx::bind_front(&output_stream::call_write_async, this, locality_id,
70 count, HPX_MOVE(in), HPX_MOVE(this_id)));
71- } // }}}
72+#endif
73+ }
74
75 ///////////////////////////////////////////////////////////////////////////
76 void output_stream::call_write_sync(std::uint32_t locality_id,
77@@ -86,16 +92,22 @@ namespace hpx::iostreams::server {
78
79 void output_stream::write_sync(std::uint32_t locality_id,
80 std::uint64_t count, detail::buffer const& buf_in)
81- { // {{{
82+ {
83 // Perform the IO in another OS thread.
84 detail::buffer in(buf_in);
85+#if ASIO_VERSION >= 103400
86+ asio::post(hpx::get_thread_pool("io_pool")->get_io_service(),
87+ hpx::bind_front(&output_stream::call_write_sync, this, locality_id,
88+ count, std::ref(in),
89+ threads::thread_id_ref_type(threads::get_outer_self_id())));
90+#else
91 hpx::get_thread_pool("io_pool")->get_io_service().post(
92 hpx::bind_front(&output_stream::call_write_sync, this, locality_id,
93 count, std::ref(in),
94 threads::thread_id_ref_type(threads::get_outer_self_id())));
95-
96+#endif
97 // Sleep until the worker thread wakes us up.
98 this_thread::suspend(threads::thread_schedule_state::suspended,
99 "output_stream::write_sync");
100- } // }}}
101+ }
102 } // namespace hpx::iostreams::server
103diff --git a/examples/async_io/async_io_low_level.cpp b/examples/async_io/async_io_low_level.cpp
104index 75312984bf7f..153e5d124930 100644
105--- a/examples/async_io/async_io_low_level.cpp
106+++ b/examples/async_io/async_io_low_level.cpp
107@@ -39,7 +39,12 @@ hpx::future<int> async_io(char const* string_to_write)
108 hpx::get_runtime().get_thread_pool("io_pool");
109
110 // ... and schedule the handler to run on one of its OS-threads.
111+#if ASIO_VERSION >= 103400
112+ asio::post(
113+ pool->get_io_service(), hpx::bind(&do_async_io, string_to_write, p));
114+#else
115 pool->get_io_service().post(hpx::bind(&do_async_io, string_to_write, p));
116+#endif
117
118 return p->get_future();
119 }
120diff --git a/libs/core/asio/include/hpx/asio/asio_util.hpp b/libs/core/asio/include/hpx/asio/asio_util.hpp
121index 286536692102..e79bb15c4cb1 100644
122--- a/libs/core/asio/include/hpx/asio/asio_util.hpp
123+++ b/libs/core/asio/include/hpx/asio/asio_util.hpp
124@@ -17,6 +17,7 @@
125 #endif
126 #include <asio/io_context.hpp>
127 #include <asio/ip/tcp.hpp>
128+#include <asio/version.hpp>
129
130 /* The asio support includes termios.h.
131 * The termios.h file on ppc64le defines these macros, which
132@@ -50,7 +51,12 @@ namespace hpx::util {
133 [[nodiscard]] HPX_CORE_EXPORT std::string cleanup_ip_address(
134 std::string const& addr);
135
136+#if ASIO_VERSION >= 103400
137+ using endpoint_iterator_type =
138+ asio::ip::basic_resolver_iterator<asio::ip::tcp>;
139+#else
140 using endpoint_iterator_type = asio::ip::tcp::resolver::iterator;
141+#endif
142
143 [[nodiscard]] endpoint_iterator_type HPX_CORE_EXPORT connect_begin(
144 std::string const& address, std::uint16_t port,
145diff --git a/libs/core/asio/src/asio_util.cpp b/libs/core/asio/src/asio_util.cpp
146index b5443e5dfa4e..bd248f3345d0 100644
147--- a/libs/core/asio/src/asio_util.cpp
148+++ b/libs/core/asio/src/asio_util.cpp
149@@ -54,8 +54,13 @@ namespace hpx::util {
150 {
151 using namespace asio::ip;
152 std::error_code ec;
153+#if ASIO_VERSION >= 103400
154+ address_v4 const addr4 = //-V821
155+ make_address_v4(addr.c_str(), ec);
156+#else
157 address_v4 const addr4 = //-V821
158 address_v4::from_string(addr.c_str(), ec);
159+#endif
160 if (!ec)
161 { // it's an IPV4 address
162 ep = tcp::endpoint(address(addr4), port);
163@@ -64,8 +69,13 @@ namespace hpx::util {
164
165 if (!force_ipv4)
166 {
167+#if ASIO_VERSION >= 103400
168+ address_v6 const addr6 = //-V821
169+ make_address_v6(addr.c_str(), ec);
170+#else
171 address_v6 const addr6 = //-V821
172 address_v6::from_string(addr.c_str(), ec);
173+#endif
174 if (!ec)
175 { // it's an IPV6 address
176 ep = tcp::endpoint(address(addr6), port);
177@@ -108,8 +118,26 @@ namespace hpx::util {
178 {
179 // resolve the given address
180 tcp::resolver resolver(io_service);
181- tcp::resolver::query query(hostname, std::to_string(port));
182
183+#if ASIO_VERSION >= 103400
184+ auto resolver_results = resolver.resolve(
185+ asio::ip::tcp::v4(), hostname, std::to_string(port));
186+
187+ auto it = resolver_results.begin();
188+ auto end = resolver_results.begin();
189+
190+ // skip ipv6 results, if required
191+ if (it == end && !force_ipv4)
192+ {
193+ resolver_results = resolver.resolve(
194+ asio::ip::tcp::v6(), hostname, std::to_string(port));
195+ it = resolver_results.begin();
196+ }
197+
198+ HPX_ASSERT(it != end);
199+ return *it;
200+#else
201+ tcp::resolver::query query(hostname, std::to_string(port));
202 asio::ip::tcp::resolver::iterator it = resolver.resolve(query);
203
204 // skip ipv6 results, if required
205@@ -121,9 +149,9 @@ namespace hpx::util {
206 ++it;
207 }
208 }
209-
210 HPX_ASSERT(it != asio::ip::tcp::resolver::iterator());
211 return *it;
212+#endif
213 }
214 catch (std::system_error const&)
215 {
216@@ -149,8 +177,21 @@ namespace hpx::util {
217 {
218 asio::io_context io_service;
219 tcp::resolver resolver(io_service);
220+
221+#if ASIO_VERSION >= 103400
222+ auto resolver_results = resolver.resolve(
223+ asio::ip::tcp::v4(), asio::ip::host_name(), "");
224+ auto it = resolver_results.begin();
225+ if (it == resolver_results.end())
226+ {
227+ resolver_results = resolver.resolve(
228+ asio::ip::tcp::v6(), asio::ip::host_name(), "");
229+ it = resolver_results.begin();
230+ }
231+#else
232 tcp::resolver::query query(asio::ip::host_name(), "");
233 tcp::resolver::iterator it = resolver.resolve(query);
234+#endif
235 tcp::endpoint endpoint = *it;
236 return endpoint.address().to_string();
237 }
238@@ -230,8 +271,14 @@ namespace hpx::util {
239 tcp::endpoint ep;
240 if (util::get_endpoint(address, port, ep))
241 {
242+#if ASIO_VERSION >= 103400
243+ auto resolver_results =
244+ tcp::resolver::results_type::create(ep, address, port_str);
245+ return resolver_results.begin();
246+#else
247 return {
248 tcp::resolver::results_type::create(ep, address, port_str)};
249+#endif
250 }
251 }
252 catch (std::system_error const&)
253@@ -244,10 +291,24 @@ namespace hpx::util {
254 {
255 // resolve the given address
256 tcp::resolver resolver(io_service);
257+
258+#if ASIO_VERSION >= 103400
259+ auto resolver_results = resolver.resolve(asio::ip::tcp::v4(),
260+ !address.empty() ? address : asio::ip::host_name(), port_str);
261+ auto it = resolver_results.begin();
262+ if (it == resolver_results.end())
263+ {
264+ resolver_results = resolver.resolve(asio::ip::tcp::v6(),
265+ !address.empty() ? address : asio::ip::host_name(),
266+ port_str);
267+ it = resolver_results.begin();
268+ }
269+ return it;
270+#else
271 tcp::resolver::query query(
272 !address.empty() ? address : asio::ip::host_name(), port_str);
273-
274 return {resolver.resolve(query)};
275+#endif
276 }
277 catch (std::system_error const&)
278 {
279@@ -276,8 +337,14 @@ namespace hpx::util {
280 tcp::endpoint ep;
281 if (util::get_endpoint(address, port, ep))
282 {
283+#if ASIO_VERSION >= 103400
284+ auto resolver_results =
285+ tcp::resolver::results_type::create(ep, address, port_str);
286+ return resolver_results.begin();
287+#else
288 return {
289 tcp::resolver::results_type::create(ep, address, port_str)};
290+#endif
291 }
292 }
293 catch (std::system_error const&)
294@@ -290,9 +357,21 @@ namespace hpx::util {
295 {
296 // resolve the given address
297 tcp::resolver resolver(io_service);
298+#if ASIO_VERSION >= 103400
299+ auto resolver_results =
300+ resolver.resolve(asio::ip::tcp::v4(), address, port_str);
301+ auto it = resolver_results.begin();
302+ if (it == resolver_results.end())
303+ {
304+ resolver_results =
305+ resolver.resolve(asio::ip::tcp::v6(), address, port_str);
306+ it = resolver_results.begin();
307+ }
308+ return it;
309+#else
310 tcp::resolver::query query(address, port_str);
311-
312 return {resolver.resolve(query)};
313+#endif
314 }
315 catch (std::system_error const&)
316 {
317@@ -306,9 +385,22 @@ namespace hpx::util {
318 {
319 // resolve the given address
320 tcp::resolver resolver(io_service);
321- tcp::resolver::query query(asio::ip::host_name(), port_str);
322
323+#if ASIO_VERSION >= 103400
324+ auto resolver_results = resolver.resolve(
325+ asio::ip::tcp::v4(), asio::ip::host_name(), port_str);
326+ auto it = resolver_results.begin();
327+ if (it == resolver_results.end())
328+ {
329+ resolver_results = resolver.resolve(
330+ asio::ip::tcp::v6(), asio::ip::host_name(), port_str);
331+ it = resolver_results.begin();
332+ }
333+ return it;
334+#else
335+ tcp::resolver::query query(asio::ip::host_name(), port_str);
336 return {resolver.resolve(query)};
337+#endif
338 }
339 catch (std::system_error const&)
340 {
341diff --git a/libs/core/executors/src/service_executors.cpp b/libs/core/executors/src/service_executors.cpp
342index 4e3ba88a2392..3e39e59ede45 100644
343--- a/libs/core/executors/src/service_executors.cpp
344+++ b/libs/core/executors/src/service_executors.cpp
345@@ -1,4 +1,4 @@
346-// Copyright (c) 2023 Hartmut Kaiser
347+// Copyright (c) 2023-2025 Hartmut Kaiser
348 //
349 // SPDX-License-Identifier: BSL-1.0
350 // Distributed under the Boost Software License, Version 1.0. (See accompanying
351@@ -10,12 +10,20 @@
352 #include <hpx/io_service/io_service_pool.hpp>
353
354 #include <asio/io_context.hpp>
355+#include <asio/version.hpp>
356+#if ASIO_VERSION >= 103400
357+#include <asio/post.hpp>
358+#endif
359
360 namespace hpx::parallel::execution::detail {
361
362 void service_executor::post(
363 hpx::util::io_service_pool* pool, hpx::function<void()>&& f)
364 {
365+#if ASIO_VERSION >= 103400
366+ asio::post(pool->get_io_service(), HPX_MOVE(f));
367+#else
368 pool->get_io_service().post(HPX_MOVE(f));
369+#endif
370 }
371 } // namespace hpx::parallel::execution::detail
372diff --git a/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp b/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp
373index 8d800f36d18d..8441886b9a1d 100644
374--- a/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp
375+++ b/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp
376@@ -19,6 +19,10 @@
377 #endif
378 #include <asio/executor_work_guard.hpp>
379 #include <asio/io_context.hpp>
380+#include <asio/version.hpp>
381+#if ASIO_VERSION >= 103400
382+#include <asio/post.hpp>
383+#endif
384
385 // The boost asio support includes termios.h. The termios.h file on ppc64le
386 // defines these macros, which are also used by blaze, blaze_tensor as Template
387diff --git a/libs/core/io_service/src/io_service_pool.cpp b/libs/core/io_service/src/io_service_pool.cpp
388index 44eb3318c04b..ca2fe443e219 100644
389--- a/libs/core/io_service/src/io_service_pool.cpp
390+++ b/libs/core/io_service/src/io_service_pool.cpp
391@@ -259,7 +259,11 @@ namespace hpx::util {
392 for (std::size_t i = 0; i < pool_size_; ++i)
393 {
394 work_.emplace_back(initialize_work(*io_services_[i]));
395+#if ASIO_VERSION >= 103400
396+ io_services_[i]->restart();
397+#else
398 io_services_[i]->reset();
399+#endif
400 }
401
402 continue_barrier_->wait();
403diff --git a/libs/core/runtime_local/src/pool_timer.cpp b/libs/core/runtime_local/src/pool_timer.cpp
404index 7487b5a72692..d2723d2452e8 100644
405--- a/libs/core/runtime_local/src/pool_timer.cpp
406+++ b/libs/core/runtime_local/src/pool_timer.cpp
407@@ -146,7 +146,7 @@ namespace hpx::util::detail {
408 }
409
410 HPX_ASSERT(timer_ != nullptr);
411- timer_->expires_from_now(time_duration.value());
412+ timer_->expires_at(time_duration.from_now());
413 timer_->async_wait(hpx::bind_front( //-V779
414 &pool_timer::timer_handler, this->shared_from_this()));
415
416diff --git a/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp b/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp
417index 77da0c839b16..16160af101b7 100644
418--- a/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp
419+++ b/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp
420@@ -142,8 +142,14 @@ namespace hpx::parcelset {
421
422 for (std::size_t i = 0; i != io_service_pool_.size(); ++i)
423 {
424+#if ASIO_VERSION >= 103400
425+ asio::post(
426+ io_service_pool_.get_io_service(static_cast<int>(i)),
427+ hpx::bind(&parcelport::io_service_work, this));
428+#else
429 io_service_pool_.get_io_service(int(i)).post(
430 hpx::bind(&parcelport::io_service_work, this));
431+#endif
432 }
433 return true;
434 }
435diff --git a/libs/full/parcelport_lci/src/parcelport_lci.cpp b/libs/full/parcelport_lci/src/parcelport_lci.cpp
436index d9083191376a..40cf14faba5c 100644
437--- a/libs/full/parcelport_lci/src/parcelport_lci.cpp
438+++ b/libs/full/parcelport_lci/src/parcelport_lci.cpp
439@@ -98,8 +98,13 @@ namespace hpx::parcelset::policies::lci {
440 sender_p->run();
441 for (std::size_t i = 0; i != io_service_pool_.size(); ++i)
442 {
443+#if ASIO_VERSION >= 103400
444+ asio::post(io_service_pool_.get_io_service(static_cast<int>(i)),
445+ hpx::bind(&parcelport::io_service_work, this));
446+#else
447 io_service_pool_.get_io_service(int(i)).post(
448 hpx::bind(&parcelport::io_service_work, this));
449+#endif
450 }
451 return true;
452 }
453@@ -167,10 +172,10 @@ namespace hpx::parcelset::policies::lci {
454 static_cast<int>(hpx::get_local_worker_thread_num());
455 HPX_ASSERT(prg_thread_id < config_t::progress_thread_num);
456 for (int i = prg_thread_id * config_t::ndevices /
457- config_t::progress_thread_num;
458- i < (prg_thread_id + 1) * config_t::ndevices /
459- config_t::progress_thread_num;
460- ++i)
461+ config_t::progress_thread_num;
462+ i < (prg_thread_id + 1) * config_t::ndevices /
463+ config_t::progress_thread_num;
464+ ++i)
465 {
466 devices_to_progress.push_back(&devices[i]);
467 }
468diff --git a/libs/full/parcelport_mpi/src/parcelport_mpi.cpp b/libs/full/parcelport_mpi/src/parcelport_mpi.cpp
469index e30025899e76..c319c54df7ef 100644
470--- a/libs/full/parcelport_mpi/src/parcelport_mpi.cpp
471+++ b/libs/full/parcelport_mpi/src/parcelport_mpi.cpp
472@@ -181,8 +181,14 @@ namespace hpx::parcelset {
473
474 for (std::size_t i = 0; i != io_service_pool_.size(); ++i)
475 {
476+#if ASIO_VERSION >= 103400
477+ asio::post(
478+ io_service_pool_.get_io_service(static_cast<int>(i)),
479+ hpx::bind(&parcelport::io_service_work, this));
480+#else
481 io_service_pool_.get_io_service(static_cast<int>(i))
482 .post(hpx::bind(&parcelport::io_service_work, this));
483+#endif
484 }
485 return true;
486 }
487
488From 85805f56579fe6fa6c5905daa0d228eba26c40c3 Mon Sep 17 00:00:00 2001
489From: Hartmut Kaiser <hartmut.kaiser@gmail.com>
490Date: Mon, 30 Jun 2025 10:31:26 -0500
491Subject: [PATCH 2/2] Changing some CIs to use Asio 1.34.2
492
493Signed-off-by: Hartmut Kaiser <hartmut.kaiser@gmail.com>
494---
495 .github/workflows/linux_debug.yml | 1 +
496 .github/workflows/macos_debug.yml | 1 +
497 .github/workflows/windows_debug_vs2022.yml | 1 +
498 libs/full/parcelport_lci/src/parcelport_lci.cpp | 2 ++
499 4 files changed, 5 insertions(+)
500
501diff --git a/.github/workflows/linux_debug.yml b/.github/workflows/linux_debug.yml
502index 551e6d7215b2..0048b533326f 100644
503--- a/.github/workflows/linux_debug.yml
504+++ b/.github/workflows/linux_debug.yml
505@@ -26,6 +26,7 @@ jobs:
506 -DCMAKE_BUILD_TYPE=Debug \
507 -DHPX_WITH_MALLOC=system \
508 -DHPX_WITH_FETCH_ASIO=ON \
509+ -DHPX_WITH_ASIO_TAG=asio-1-34-2 \
510 -DHPX_WITH_EXAMPLES=ON \
511 -DHPX_WITH_TESTS=ON \
512 -DHPX_WITH_TESTS_MAX_THREADS_PER_LOCALITY=2 \
513diff --git a/.github/workflows/macos_debug.yml b/.github/workflows/macos_debug.yml
514index 7d0936730d54..5406fc0be0f1 100644
515--- a/.github/workflows/macos_debug.yml
516+++ b/.github/workflows/macos_debug.yml
517@@ -29,6 +29,7 @@ jobs:
518 -GNinja \
519 -DCMAKE_BUILD_TYPE=Debug \
520 -DHPX_WITH_FETCH_ASIO=ON \
521+ -DHPX_WITH_ASIO_TAG=asio-1-34-2 \
522 -DHPX_WITH_EXAMPLES=ON \
523 -DHPX_WITH_TESTS=ON \
524 -DHPX_WITH_TESTS_MAX_THREADS_PER_LOCALITY=3 \
525diff --git a/.github/workflows/windows_debug_vs2022.yml b/.github/workflows/windows_debug_vs2022.yml
526index cebecd992140..f91765418163 100644
527--- a/.github/workflows/windows_debug_vs2022.yml
528+++ b/.github/workflows/windows_debug_vs2022.yml
529@@ -31,6 +31,7 @@ jobs:
530 -DCMAKE_BUILD_TYPE=Debug \
531 -DCMAKE_TOOLCHAIN_FILE='C:/projects/vcpkg/scripts/buildsystems/vcpkg.cmake' \
532 -DHPX_WITH_FETCH_ASIO=ON \
533+ -DHPX_WITH_ASIO_TAG=asio-1-34-2 \
534 -DHPX_WITH_EXAMPLES=ON \
535 -DHPX_WITH_TESTS=ON \
536 -DHPX_WITH_TESTS_EXAMPLES=ON \
537diff --git a/libs/full/parcelport_lci/src/parcelport_lci.cpp b/libs/full/parcelport_lci/src/parcelport_lci.cpp
538index 40cf14faba5c..b9d1bcf293e9 100644
539--- a/libs/full/parcelport_lci/src/parcelport_lci.cpp
540+++ b/libs/full/parcelport_lci/src/parcelport_lci.cpp
541@@ -171,6 +171,7 @@ namespace hpx::parcelset::policies::lci {
542 int prg_thread_id =
543 static_cast<int>(hpx::get_local_worker_thread_num());
544 HPX_ASSERT(prg_thread_id < config_t::progress_thread_num);
545+ // clang-format off
546 for (int i = prg_thread_id * config_t::ndevices /
547 config_t::progress_thread_num;
548 i < (prg_thread_id + 1) * config_t::ndevices /
549@@ -179,6 +180,7 @@ namespace hpx::parcelset::policies::lci {
550 {
551 devices_to_progress.push_back(&devices[i]);
552 }
553+ // clang-format on
554 }
555 }
556 }
557