Skip to content

Build fails with LTO #37

@eli-schwartz

Description

@eli-schwartz

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:

/bin/sh ../libtool  --tag=CC   --mode=link x86_64-pc-linux-gnu-cc  -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-pointer-types -fopenmp  -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -fopenmp -o liblis.la -rpath /usr/lib64  array/libarray.la esolver/libesolver.la matrix/libmatrix.la matvec/libmatvec.la precision/libprecision.la precon/libprecon.la solver/libsolver.la system/libsystem.la vector/libvector.la  fortran/libfortran.la -L/usr/lib/gcc/x86_64-pc-linux-gnu/13 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../.. -lgfortran -lm -lquadmath -lm 
libtool: link: x86_64-pc-linux-gnu-cc -shared  -fPIC -DPIC  -Wl,--whole-archive array/.libs/libarray.a esolver/.libs/libesolver.a matrix/.libs/libmatrix.a matvec/.libs/libmatvec.a precision/.libs/libprecision.a precon/.libs/libprecon.a solver/.libs/libsolver.a system/.libs/libsystem.a vector/.libs/libvector.a fortran/.libs/libfortran.a -Wl,--no-whole-archive  -Wl,--as-needed -L/usr/lib/gcc/x86_64-pc-linux-gnu/13 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../.. -lgfortran /usr/lib/gcc/x86_64-pc-linux-gnu/13/libquadmath.so -lm  -march=native -fstack-protector-all -O2 -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-pointer-types -fopenmp -Wl,-O1 -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -fopenmp   -fopenmp -Wl,-soname -Wl,liblis.so.0 -o .libs/liblis.so.0.0.0
fortran/lisf_init.F:43:72: error: type of 'lis_set_argv_f' does not match original declaration [-Werror=lto-type-mismatch]
   43 |         call lis_set_argv(i,argv,ierr)
      |                                                                        ^
fortran/lisf_system.c:158:6: note: type mismatch in parameter 4
  158 | void lis_set_argv_f(LIS_INT *no, char *argv, LIS_INT *ierr, LIS_INT len)
      |      ^
fortran/lisf_system.c:158:6: note: type 'LIS_INT' should match type 'long int'
fortran/lisf_system.c:158:6: note: 'lis_set_argv_f_' was previously declared here
fortran/lisf_system.c:158:6: note: code may be misoptimized unless '-fno-strict-aliasing' is used
lto1: some warnings being treated as errors
lto-wrapper: fatal error: x86_64-pc-linux-gnu-cc 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
make[2]: *** [Makefile:484: liblis.la] Error 1

Downstream report: https://bugs.gentoo.org/927587
Full build log: build.log

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions