From 53321f240ae8c71cbe266468ee2973aac74ff09d Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Tue, 13 Aug 2024 09:43:08 +0200 Subject: [PATCH] [PL] Revert ranges to for-range loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unfortunately with gcc-13.2.1 with optimizations there is a warning, which I was not able to correct. ... inlined from ‘std::vector<std::tuple<long int, std::reference_wrapper<ProcessLib::LocalAssemblerInterface> > > {anonymous}::collectActiveLocalAssemblers(const BaseLib::PolymorphicRandomAccessContainerView<ProcessLib::LocalAssemblerInterface>&, const std::vector<long unsigned int>&)’ at /var/lib/gitlab-runner/builds/F1XUyv4cx/1/ogs/ogs/ProcessLib/Assembly/ParallelVectorMatrixAssembler.cpp:132:62: /usr/include/c++/13.2.1/bits/stl_iterator_base_funcs.h:175:9: warning: iteration 576460752303423487 invokes undefined behavior [-Waggressive-loop-optimizations] 175 | while (__n--) | ^~~~~ /usr/include/c++/13.2.1/bits/stl_iterator_base_funcs.h:175:9: note: within this loop Other compilers gcc-14, clang-17 and 18, msvc had no problems with the former code. --- .../ParallelVectorMatrixAssembler.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ProcessLib/Assembly/ParallelVectorMatrixAssembler.cpp b/ProcessLib/Assembly/ParallelVectorMatrixAssembler.cpp index 14b9d24a6b9..c649e5ce3e6 100644 --- a/ProcessLib/Assembly/ParallelVectorMatrixAssembler.cpp +++ b/ProcessLib/Assembly/ParallelVectorMatrixAssembler.cpp @@ -12,10 +12,7 @@ #include <cstdlib> #include <fstream> -#include <range/v3/range/conversion.hpp> #include <range/v3/view/iota.hpp> -#include <range/v3/view/transform.hpp> -#include <range/v3/view/zip.hpp> #include <vector> #include "BaseLib/StringTools.h" @@ -115,15 +112,18 @@ collectActiveLocalAssemblers( ProcessLib::LocalAssemblerInterface> const& local_assemblers, std::vector<std::size_t> const& active_elements) { - auto id_and_local_asm = [&local_assemblers](std::size_t const id) - -> std::tuple<std::ptrdiff_t, std::reference_wrapper< - ProcessLib::LocalAssemblerInterface>> - { return {id, local_assemblers[id]}; }; - auto create_ids_asm_pairs = [&](auto const& element_ids) { - return element_ids | ranges::views::transform(id_and_local_asm) | - ranges::to<std::vector>(); + std::vector<std::tuple< + std::ptrdiff_t, + std::reference_wrapper<ProcessLib::LocalAssemblerInterface>>> + result; + result.reserve(static_cast<std::size_t>(element_ids.size())); + for (auto const id : element_ids) + { + result.push_back({id, local_assemblers[id]}); + } + return result; }; if (active_elements.empty()) -- GitLab