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.

Reply via email to