You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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:
Originally reported downstream: https://bugs.gentoo.org/859838
Full build log: build.log
The text was updated successfully, but these errors were encountered: