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.