https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119327
Bug ID: 119327 Summary: -Os breaks inlining: raw_hash_set.h: error: inlining failed in call to 'always_inline': target specific option mismatch Product: gcc Version: 14.2.0 URL: https://github.com/google/s2geometry/issues/417 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: vital.had at gmail dot com CC: iains at gcc dot gnu.org, linkw at gcc dot gnu.org, pinskia at gcc dot gnu.org Target Milestone: --- Target: powerpc-apple-darwin The code in s2geometry library fails to compile with gcc 14.2.0 if -Os is used: [ 86%] Building CXX object CMakeFiles/s2.dir/src/s2/s2shapeutil_conversion.cc.o /opt/local/bin/g++-mp-14 -DABSL_MIN_LOG_LEVEL=1 -Ds2_EXPORTS -I/opt/local/libexec/openssl3/include -I/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src -isystem /opt/local/include -pipe -I/opt/local/libexec/openssl3/include -Os -DNDEBUG -I/opt/local/libexec/openssl3/include -isystem/opt/local/include/LegacySupport -isystem/opt/local/include -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++17 -arch ppc -mmacosx-version-min=10.6 -fPIC -Wno-attributes -Wno-deprecated-declarations -MD -MT CMakeFiles/s2.dir/src/s2/s2shapeutil_conversion.cc.o -MF CMakeFiles/s2.dir/src/s2/s2shapeutil_conversion.cc.o.d -o CMakeFiles/s2.dir/src/s2/s2shapeutil_conversion.cc.o -c /opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src/s2/s2shapeutil_conversion.cc [ 87%] Building CXX object CMakeFiles/s2.dir/src/s2/s2shapeutil_count_vertices.cc.o /opt/local/bin/g++-mp-14 -DABSL_MIN_LOG_LEVEL=1 -Ds2_EXPORTS -I/opt/local/libexec/openssl3/include -I/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src -isystem /opt/local/include -pipe -I/opt/local/libexec/openssl3/include -Os -DNDEBUG -I/opt/local/libexec/openssl3/include -isystem/opt/local/include/LegacySupport -isystem/opt/local/include -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++17 -arch ppc -mmacosx-version-min=10.6 -fPIC -Wno-attributes -Wno-deprecated-declarations -MD -MT CMakeFiles/s2.dir/src/s2/s2shapeutil_count_vertices.cc.o -MF CMakeFiles/s2.dir/src/s2/s2shapeutil_count_vertices.cc.o.d -o CMakeFiles/s2.dir/src/s2/s2shapeutil_count_vertices.cc.o -c /opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src/s2/s2shapeutil_count_vertices.cc [ 87%] Building CXX object CMakeFiles/s2.dir/src/s2/s2shapeutil_edge_iterator.cc.o /opt/local/bin/g++-mp-14 -DABSL_MIN_LOG_LEVEL=1 -Ds2_EXPORTS -I/opt/local/libexec/openssl3/include -I/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src -isystem /opt/local/include -pipe -I/opt/local/libexec/openssl3/include -Os -DNDEBUG -I/opt/local/libexec/openssl3/include -isystem/opt/local/include/LegacySupport -isystem/opt/local/include -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++17 -arch ppc -mmacosx-version-min=10.6 -fPIC -Wno-attributes -Wno-deprecated-declarations -MD -MT CMakeFiles/s2.dir/src/s2/s2shapeutil_edge_iterator.cc.o -MF CMakeFiles/s2.dir/src/s2/s2shapeutil_edge_iterator.cc.o.d -o CMakeFiles/s2.dir/src/s2/s2shapeutil_edge_iterator.cc.o -c /opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src/s2/s2shapeutil_edge_iterator.cc In file included from /opt/local/include/absl/container/internal/raw_hash_map.h:26, from /opt/local/include/absl/container/flat_hash_map.h:45, from /opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/s2geometry-0.12.0/src/s2/s2shapeutil_build_polygon_boundaries.cc:24: /opt/local/include/absl/container/internal/raw_hash_set.h: In function 'void absl::lts_20240722::container_internal::IterateOverFullSlots(const CommonFields&, SlotType*, Callback) [with SlotType = map_slot_type<const S2Shape*, std::vector<S2Shape*> >; Callback = raw_hash_set<FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, HashEq<const S2Shape*, void>::Hash, HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const ctrl_t*, raw_hash_set<FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, HashEq<const S2Shape*, void>::Hash, HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>]': /opt/local/include/absl/container/internal/raw_hash_set.h:3536:9: error: inlining failed in call to 'always_inline' 'absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const absl::lts_20240722::container_internal::ctrl_t*, absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>': target specific option mismatch 3536 | [&](const ctrl_t*, slot_type* slot) | ^ /opt/local/include/absl/container/internal/raw_hash_set.h:1884:9: note: called from here 1884 | cb(ctrl + i, slot + i); | ~~^~~~~~~~~~~~~~~~~~~~ /opt/local/include/absl/container/internal/raw_hash_set.h:3536:9: error: inlining failed in call to 'always_inline' 'absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const absl::lts_20240722::container_internal::ctrl_t*, absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>': target specific option mismatch 3536 | [&](const ctrl_t*, slot_type* slot) | ^ /opt/local/include/absl/container/internal/raw_hash_set.h:1893:9: note: called from here 1893 | cb(ctrl + i, slot + i); | ~~^~~~~~~~~~~~~~~~~~~~ /opt/local/include/absl/container/internal/raw_hash_set.h:3536:9: error: inlining failed in call to 'always_inline' 'absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const absl::lts_20240722::container_internal::ctrl_t*, absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>': target specific option mismatch 3536 | [&](const ctrl_t*, slot_type* slot) | ^ /opt/local/include/absl/container/internal/raw_hash_set.h:1884:9: note: called from here 1884 | cb(ctrl + i, slot + i); | ~~^~~~~~~~~~~~~~~~~~~~ /opt/local/include/absl/container/internal/raw_hash_set.h:3536:9: error: inlining failed in call to 'always_inline' 'absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const absl::lts_20240722::container_internal::ctrl_t*, absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>': target specific option mismatch 3536 | [&](const ctrl_t*, slot_type* slot) | ^ /opt/local/include/absl/container/internal/raw_hash_set.h:1884:9: note: called from here 1884 | cb(ctrl + i, slot + i); | ~~^~~~~~~~~~~~~~~~~~~~ /opt/local/include/absl/container/internal/raw_hash_set.h:3536:9: error: inlining failed in call to 'always_inline' 'absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const absl::lts_20240722::container_internal::ctrl_t*, absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>': target specific option mismatch 3536 | [&](const ctrl_t*, slot_type* slot) | ^ /opt/local/include/absl/container/internal/raw_hash_set.h:1893:9: note: called from here 1893 | cb(ctrl + i, slot + i); | ~~^~~~~~~~~~~~~~~~~~~~ /opt/local/include/absl/container/internal/raw_hash_set.h:3536:9: error: inlining failed in call to 'always_inline' 'absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::destroy_slots()::<lambda(const absl::lts_20240722::container_internal::ctrl_t*, absl::lts_20240722::container_internal::raw_hash_set<absl::lts_20240722::container_internal::FlatHashMapPolicy<const S2Shape*, std::vector<S2Shape*> >, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Hash, absl::lts_20240722::container_internal::HashEq<const S2Shape*, void>::Eq, std::allocator<std::pair<const S2Shape* const, std::vector<S2Shape*> > > >::slot_type*)>': target specific option mismatch 3536 | [&](const ctrl_t*, slot_type* slot) | ^ /opt/local/include/absl/container/internal/raw_hash_set.h:1893:9: note: called from here 1893 | cb(ctrl + i, slot + i); | ~~^~~~~~~~~~~~~~~~~~~~ make[2]: *** [CMakeFiles/s2.dir/src/s2/s2shapeutil_build_polygon_boundaries.cc.o] Error 1 make[2]: *** Waiting for unfinished jobs.... make[2]: Leaving directory `/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/build' make[1]: *** [CMakeFiles/s2.dir/all] Error 2 make[1]: Leaving directory `/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/build' make: *** [all] Error 2 make: Leaving directory `/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/build' Command failed: cd "/opt/local/var/macports/build/_opt_local_ppcports_math_s2geometry/s2geometry/work/build" && /usr/bin/make -j6 -w all VERBOSE=ON Exit code: 2 The same code compiles normally without -Os being passed. Upstream suggests it could be a compiler bug.