osrm-backend
osrm-backend copied to clipboard
OSRM build fails on GCC 10.2.1
Building the OSRM in Debian Bullseye (the latest stable one) fails with the "use of deleted function" error. You can see it with the Dockerfile in this repo. Same with Ubuntu 22.04. But OSRM builds with Ubuntu 20.04 — although it uses much more memory for processing data for some reason.
Bisected it to #6279.
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp: In instantiation of 'TSubitem& osmium::detail::subitem_of_type(TIter, const TIter&) [with TSubitem = const osmium::TagList; TIter = osmium::memory::CollectionIterator<const osmium::memory::Item>]':
#9 78.05 /src/third_party/libosmium/include/osmium/osm/object.hpp:333:83: required from here
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp:54:29: error: use of deleted function 'osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>::Collection(osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>&&)'
#9 78.05 54 | static TSubitem subitem{};
#9 78.05 | ^~~~~~~
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/osm/relation.hpp:36,
#9 78.05 from /src/include/extractor/extraction_relation.hpp:6,
#9 78.05 from /src/src/extractor/extractor.cpp:8:
#9 78.05 /src/third_party/libosmium/include/osmium/memory/collection.hpp:117:15: note: 'osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>::Collection(osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>&&)' is implicitly deleted because the default definition would be ill-formed:
#9 78.05 117 | class Collection : public Item {
#9 78.05 | ^~~~~~~~~~
#9 78.05 /src/third_party/libosmium/include/osmium/memory/collection.hpp:117:15: error: use of deleted function 'osmium::memory::Item::Item(osmium::memory::Item&&)'
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/memory/buffer.hpp:36,
#9 78.05 from /src/include/extractor/scripting_environment.hpp:9,
#9 78.05 from /src/include/extractor/graph_compressor.hpp:4,
#9 78.05 from /src/include/extractor/extractor.hpp:34,
#9 78.05 from /src/src/extractor/extractor.cpp:1:
#9 78.05 /src/third_party/libosmium/include/osmium/memory/item.hpp:146:13: note: declared here
#9 78.05 146 | Item(Item&&) = delete;
#9 78.05 | ^~~~
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/memory/buffer.hpp:38,
#9 78.05 from /src/include/extractor/scripting_environment.hpp:9,
#9 78.05 from /src/include/extractor/graph_compressor.hpp:4,
#9 78.05 from /src/include/extractor/extractor.hpp:34,
#9 78.05 from /src/src/extractor/extractor.cpp:1:
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp: In instantiation of 'TSubitem& osmium::detail::subitem_of_type(TIter, const TIter&) [with TSubitem = osmium::RelationMemberList; TIter = osmium::memory::CollectionIterator<osmium::memory::Item>]':
#9 78.05 /src/third_party/libosmium/include/osmium/osm/relation.hpp:188:86: required from here
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp:54:29: error: use of deleted function 'osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>::Collection(osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>&&)'
#9 78.05 54 | static TSubitem subitem{};
#9 78.05 | ^~~~~~~
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/osm/relation.hpp:36,
#9 78.05 from /src/include/extractor/extraction_relation.hpp:6,
#9 78.05 from /src/src/extractor/extractor.cpp:8:
#9 78.05 /src/third_party/libosmium/include/osmium/memory/collection.hpp:117:15: note: 'osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>::Collection(osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>&&)' is implicitly deleted because the default definition would be ill-formed:
#9 78.05 117 | class Collection : public Item {
#9 78.05 | ^~~~~~~~~~
Looks like it's caused by this gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98642
Most likely this should fix the problem, because I see changes exactly on the problematic line in libosmium diff and also there are something about C++17 compatibility in Release Notes of 2.17.2:

I was going to configure CI to check Docker image on every PR, but have weird errors for some reason 🤔