Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build fails with LTO #481

Open
eli-schwartz opened this issue Mar 26, 2024 · 0 comments
Open

Build fails with LTO #481

eli-schwartz opened this issue Mar 26, 2024 · 0 comments

Comments

@eli-schwartz
Copy link

I tried to build with the following *FLAGS to optimize the build: -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing

Note the -Werror=* flags are used to help detect cases where the compiler tries to optimize by assuming UB cannot exist in the source code -- if it does exist, ordinarily the code would be miscompiled, and this says to make the miscompilation a fatal error.

I got this error:

FAILED: libembree4.so.4.3.1 
: && /usr/bin/x86_64-pc-linux-gnu-g++ -fPIC -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-clash-protection -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wformat -Werror=format-security -Wall -Wformat -Wformat-security -Wno-class-memaccess -fno-strict-overflow -fno-delete-null-pointer-checks -fwrapv -fsigned-char -fPIE -fPIC -std=c++11 -fvisibility=hidden -fvisibility-inlines-hidden -fno-strict-aliasing -fno-tree-vectorize -D_FORTIFY_SOURCE=2  -g -DNDEBUG -O3  -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -Wl,--no-undefined -z noexecstack -z relro -z now  -Wl,--version-script="/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/export.linux.map" -shared -Wl,-soname,libembree4.so.4 -o libembree4.so.4.3.1 kernels/CMakeFiles/embree.dir/common/device.cpp.o kernels/CMakeFiles/embree.dir/common/stat.cpp.o kernels/CMakeFiles/embree.dir/common/acceln.cpp.o kernels/CMakeFiles/embree.dir/common/accelset.cpp.o kernels/CMakeFiles/embree.dir/common/state.cpp.o kernels/CMakeFiles/embree.dir/common/rtcore.cpp.o kernels/CMakeFiles/embree.dir/common/rtcore_builder.cpp.o kernels/CMakeFiles/embree.dir/common/scene.cpp.o kernels/CMakeFiles/embree.dir/common/scene_verify.cpp.o kernels/CMakeFiles/embree.dir/common/alloc.cpp.o kernels/CMakeFiles/embree.dir/common/geometry.cpp.o kernels/CMakeFiles/embree.dir/common/scene_user_geometry.cpp.o kernels/CMakeFiles/embree.dir/common/scene_instance.cpp.o kernels/CMakeFiles/embree.dir/common/scene_instance_array.cpp.o kernels/CMakeFiles/embree.dir/common/scene_triangle_mesh.cpp.o kernels/CMakeFiles/embree.dir/common/scene_quad_mesh.cpp.o kernels/CMakeFiles/embree.dir/common/scene_curves.cpp.o kernels/CMakeFiles/embree.dir/common/scene_line_segments.cpp.o kernels/CMakeFiles/embree.dir/common/scene_grid_mesh.cpp.o kernels/CMakeFiles/embree.dir/common/scene_points.cpp.o kernels/CMakeFiles/embree.dir/common/motion_derivative.cpp.o kernels/CMakeFiles/embree.dir/subdiv/bezier_curve.cpp.o kernels/CMakeFiles/embree.dir/subdiv/bspline_curve.cpp.o kernels/CMakeFiles/embree.dir/subdiv/catmullrom_curve.cpp.o kernels/CMakeFiles/embree.dir/geometry/primitive4.cpp.o kernels/CMakeFiles/embree.dir/geometry/instance_intersector.cpp.o kernels/CMakeFiles/embree.dir/geometry/instance_array_intersector.cpp.o kernels/CMakeFiles/embree.dir/geometry/curve_intersector_virtual_4v.cpp.o kernels/CMakeFiles/embree.dir/geometry/curve_intersector_virtual_4i.cpp.o kernels/CMakeFiles/embree.dir/geometry/curve_intersector_virtual_4i_mb.cpp.o kernels/CMakeFiles/embree.dir/geometry/curve_intersector_virtual_8v.cpp.o kernels/CMakeFiles/embree.dir/geometry/curve_intersector_virtual_8i.cpp.o kernels/CMakeFiles/embree.dir/geometry/curve_intersector_virtual_8i_mb.cpp.o kernels/CMakeFiles/embree.dir/builders/primrefgen.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_statistics.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh4_factory.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh8_factory.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_collider.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_rotate.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_refit.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_hair.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_hair_mb.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_morton.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_sah.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_sah_spatial.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_sah_mb.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_twolevel.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_intersector1_bvh4.cpp.o kernels/CMakeFiles/embree.dir/common/scene_subdiv_mesh.cpp.o kernels/CMakeFiles/embree.dir/subdiv/tessellation_cache.cpp.o kernels/CMakeFiles/embree.dir/subdiv/subdivpatch1base.cpp.o kernels/CMakeFiles/embree.dir/subdiv/catmullclark_coefficients.cpp.o kernels/CMakeFiles/embree.dir/geometry/grid_soa.cpp.o kernels/CMakeFiles/embree.dir/subdiv/subdivpatch1base_eval.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_builder_subdiv.cpp.o kernels/CMakeFiles/embree.dir/bvh/bvh_intersector_hybrid4_bvh4.cpp.o  libembree_sse42.a  libembree_avx.a  libembree_avx2.a  libsys.a  libmath.a  libsimd.a  liblexers.a  libtasking.a  /usr/lib64/libtbb.so.12.9  libsys.a  -ldl  libmath.a && :
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:12:10: error: type ‘struct vfloat_impl’ violates the C++ One Definition Rule [-Werror=odr]
   12 |   struct vfloat_impl
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vfloat8_avx.h:18:10: note: a different type is defined in another translation unit
   18 |   struct vfloat<8>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:14:5: note: the first difference of corresponding definitions is field ‘<anonymous>’
   14 |     union { float f[N]; int i[N]; };
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vfloat8_avx.h:27:5: note: a field of same name but different type is defined in another translation unit
   27 |     union { __m256 v; float f[8]; int i[8]; }; // data
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:14:11: note: type name ‘embree::vfloat_impl<8>::{unnamed type#1}’ should match type name ‘embree::vfloat_impl<8>::{unnamed type#2}’
   14 |     union { float f[N]; int i[N]; };
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vfloat8_avx.h:27:11: note: the incompatible type is defined here
   27 |     union { __m256 v; float f[8]; int i[8]; }; // data
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:36:10: error: type ‘struct vuint_impl’ violates the C++ One Definition Rule [-Werror=odr]
   36 |   struct vuint_impl
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vuint8_avx.h:18:10: note: a different type is defined in another translation unit
   18 |   struct vuint<8>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:38:18: note: the first difference of corresponding definitions is field ‘i’
   38 |     unsigned int i[N];
      |                  ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vuint8_avx.h:27:5: note: a field with different name is defined in another translation unit
   27 |     union {                    // data
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:21:14: error: type ‘struct <anon>’ violates the C++ One Definition Rule [-Werror=odr]
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:21:14: note: a different type is defined in another translation unit
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:22:11: note: the first difference of corresponding definitions is field ‘x’
   22 |         T x, y, z;
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:22:11: note: a field of same name but different type is defined in another translation unit
   22 |         T x, y, z;
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:12:10: note: type ‘struct vfloat_impl’ itself violates the C++ One Definition Rule
   12 |   struct vfloat_impl
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vfloat8_avx.h:18:10: note: the incompatible type is defined here
   18 |   struct vfloat<8>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:20:11: error: type ‘union <anon>’ violates the C++ One Definition Rule [-Werror=odr]
   20 |     union {
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:20:11: note: a different type is defined in another translation unit
   20 |     union {
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:21:7: note: the first difference of corresponding definitions is field ‘<anonymous>’
   21 |       struct {
      |       ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:21:7: note: a field of same name but different type is defined in another translation unit
   21 |       struct {
      |       ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:21:14: note: type ‘struct <anon>’ itself violates the C++ One Definition Rule
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:21:14: note: the incompatible type is defined here
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:16:31: error: type ‘struct Vec3’ violates the C++ One Definition Rule [-Werror=odr]
   16 |   template<typename T> struct Vec3
      |                               ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:16:31: note: a different type is defined in another translation unit
   16 |   template<typename T> struct Vec3
      |                               ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:20:5: note: the first difference of corresponding definitions is field ‘<anonymous>’
   20 |     union {
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:20:5: note: a field of same name but different type is defined in another translation unit
   20 |     union {
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/vec3.h:20:11: note: type ‘union <anon>’ itself violates the C++ One Definition Rule
   20 |     union {
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/vec3.h:20:11: note: the incompatible type is defined here
   20 |     union {
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:28:10: error: type ‘struct vint_impl’ violates the C++ One Definition Rule [-Werror=odr]
   28 |   struct vint_impl
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx.h:18:10: note: a different type is defined in another translation unit
   18 |   struct vint<8>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/../../common/sys/../math/../simd/varying.h:30:9: note: the first difference of corresponding definitions is field ‘i’
   30 |     int i[N];
      |         ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx.h:27:5: note: a field with different name is defined in another translation unit
   27 |     union {                    // data
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/ray.h:15:10: error: type ‘struct RayK’ violates the C++ One Definition Rule [-Werror=odr]
   15 |   struct RayK
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/ray.h:15:10: note: a different type is defined in another translation unit
   15 |   struct RayK
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/ray.h:56:15: note: the first difference of corresponding definitions is field ‘org’
   56 |     Vec3vf<K> org;    // ray origin
      |               ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/ray.h:56:15: note: a field of same name but different type is defined in another translation unit
   56 |     Vec3vf<K> org;    // ray origin
      |               ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/ray.h:15:10: note: type ‘struct Vec3vf’ itself violates the C++ One Definition Rule
   15 |   struct RayK
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/common/ray.h:73:10: error: type ‘struct RayHitK’ violates the C++ One Definition Rule [-Werror=odr]
   73 |   struct RayHitK : RayK<K>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/ray.h:73:10: note: a type with different bases is defined in another translation unit
   73 |   struct RayHitK : RayK<K>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vuint8_avx.h:27:11: error: type ‘union <anon>’ violates the C++ One Definition Rule [-Werror=odr]
   27 |     union {                    // data
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vuint8_avx2.h:27:11: note: a different type is defined in another translation unit
   27 |     union {             // data
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vuint8_avx.h:29:7: note: the first difference of corresponding definitions is field ‘<anonymous>’
   29 |       struct { __m128i vl,vh; };
      |       ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vuint8_avx2.h:29:20: note: a field with different name is defined in another translation unit
   29 |       unsigned int i[8];
      |                    ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx.h:27:11: error: type ‘union <anon>’ violates the C++ One Definition Rule [-Werror=odr]
   27 |     union {                    // data
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx2.h:27:11: note: a different type is defined in another translation unit
   27 |     union {             // data
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx.h:29:7: note: the first difference of corresponding definitions is field ‘<anonymous>’
   29 |       struct { __m128i vl,vh; };
      |       ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx2.h:29:11: note: a field with different name is defined in another translation unit
   29 |       int i[8];
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/hit.h:14:12: error: type ‘struct HitK’ violates the C++ One Definition Rule [-Werror=odr]
   14 |     struct HitK
      |            ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/hit.h:14:12: note: a different type is defined in another translation unit
   14 |     struct HitK
      |            ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/hit.h:47:14: note: the first difference of corresponding definitions is field ‘primID’
   47 |     vuint<K> primID;      // primitive ID
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/hit.h:47:14: note: a field of same name but different type is defined in another translation unit
   47 |     vuint<K> primID;      // primitive ID
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/hit.h:14:12: note: type ‘struct vuint’ itself violates the C++ One Definition Rule
   14 |     struct HitK
      |            ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/pointi.h:11:10: error: type ‘struct PointMi’ violates the C++ One Definition Rule [-Werror=odr]
   11 |   struct PointMi
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/pointi.h:11:10: note: a different type is defined in another translation unit
   11 |   struct PointMi
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/pointi.h:224:14: note: the first difference of corresponding definitions is field ‘primIDs’
  224 |     vuint<M> primIDs;  // primitive ID
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/pointi.h:224:14: note: a field of same name but different type is defined in another translation unit
  224 |     vuint<M> primIDs;  // primitive ID
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/pointi.h:11:10: note: type ‘struct vuint’ itself violates the C++ One Definition Rule
   11 |   struct PointMi
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/linei.h:11:10: error: type ‘struct LineMi’ violates the C++ One Definition Rule [-Werror=odr]
   11 |   struct LineMi
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/linei.h:11:10: note: a different type is defined in another translation unit
   11 |   struct LineMi
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/linei.h:271:14: note: the first difference of corresponding definitions is field ‘v0’
  271 |     vuint<M> v0;      // index of start vertex
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/linei.h:271:14: note: a field of same name but different type is defined in another translation unit
  271 |     vuint<M> v0;      // index of start vertex
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/linei.h:11:10: note: type ‘struct vuint’ itself violates the C++ One Definition Rule
   11 |   struct LineMi
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:21:14: error: type ‘struct <anon>’ violates the C++ One Definition Rule [-Werror=odr]
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:21:14: note: a different type is defined in another translation unit
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:22:11: note: the first difference of corresponding definitions is field ‘x’
   22 |         T x, y, z;
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:22:11: note: a field of same name but different type is defined in another translation unit
   22 |         T x, y, z;
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx.h:18:10: note: type ‘struct vint_impl’ itself violates the C++ One Definition Rule
   18 |   struct vint<8>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/geometry/../common/../../common/sys/../math/../simd/vint8_avx2.h:18:10: note: the incompatible type is defined here
   18 |   struct vint<8>
      |          ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:20:11: error: type ‘union <anon>’ violates the C++ One Definition Rule [-Werror=odr]
   20 |     union {
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:20:11: note: a different type is defined in another translation unit
   20 |     union {
      |           ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:21:7: note: the first difference of corresponding definitions is field ‘<anonymous>’
   21 |       struct {
      |       ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:21:7: note: a field of same name but different type is defined in another translation unit
   21 |       struct {
      |       ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:21:14: note: type ‘struct <anon>’ itself violates the C++ One Definition Rule
   21 |       struct {
      |              ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:16:31: error: type ‘struct Vec3’ violates the C++ One Definition Rule [-Werror=odr]
   16 |   template<typename T> struct Vec3
      |                               ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:16:31: note: a different type is defined in another translation unit
   16 |   template<typename T> struct Vec3
      |                               ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:20:5: note: the first difference of corresponding definitions is field ‘<anonymous>’
   20 |     union {
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:20:5: note: a field of same name but different type is defined in another translation unit
   20 |     union {
      |     ^
/var/tmp/portage/media-libs/embree-4.3.1/work/embree-4.3.1/kernels/bvh/../common/../../common/sys/../math/vec3.h:20:11: note: type ‘union <anon>’ itself violates the C++ One Definition Rule
   20 |     union {
      |           ^
lto1: some warnings being treated as errors
lto-wrapper: fatal error: /usr/bin/x86_64-pc-linux-gnu-g++ returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Originally reported downstream: https://bugs.gentoo.org/859838
Full build log: build.log

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant