Enabling lto will result in failure during test phase, to be precise test 67 will cause it. Compiler flags for this test (and most likely for rest of them) are inherited from actual build phase. I'm not sure if this is expected. Most distribution disables this test. We try to keep it by stripping lto flags for it. Origin for this tests: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=391427 --- a/tests/link-order2.at 2015-01-16 19:52:04.000000000 +0100 +++ b/tests/link-order2_new.at 2021-11-30 02:01:09.574451906 +0100 @@ -47,6 +47,8 @@ AT_KEYWORDS([libtool]) AT_KEYWORDS([interactive])dnl running 'wrong' may cause a popup window. +NO_LTO_CFLAGS=${CFLAGS/-flto*-ffat-lto-objects } + eval `$LIBTOOL --config | $EGREP '^(shlibpath_var|allow_undefined_flag)='` undefined_setting=-no-undefined @@ -89,12 +91,12 @@ EOF for file in a0 a1 b; do - $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c $file.c + $LIBTOOL --mode=compile $CC $CPPFLAGS $NO_LTO_CFLAGS -c $file.c done -$CC $CPPFLAGS $CFLAGS -c main.c +$CC $CPPFLAGS $NO_LTO_CFLAGS -c main.c # Build an old, installed library. -$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $static -o liba0.la a0.lo -rpath $deflibdir +$LIBTOOL --mode=link $CC $NO_LTO_CFLAGS $LDFLAGS $static -o liba0.la a0.lo -rpath $deflibdir $LIBTOOL --mode=install cp liba0.la $deflibdir/liba0.la $LIBTOOL --mode=clean rm -f liba0.la @@ -118,13 +120,13 @@ esac test non-libtool,-static-libtool-libs = "$type_of_depdepl,$static" && static=-all-static - $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $static -o liba1.la a1.lo -rpath $libdir - $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $static -o libb.la b.lo liba1.la -rpath $libdir - AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $static -o main$EXEEXT main.$OBJEXT libb.la -la0], + $LIBTOOL --mode=link $CC $NO_LTO_CFLAGS $LDFLAGS $static -o liba1.la a1.lo -rpath $libdir + $LIBTOOL --mode=link $CC $NO_LTO_CFLAGS $LDFLAGS $static -o libb.la b.lo liba1.la -rpath $libdir + AT_CHECK([$LIBTOOL --mode=link $CC $NO_LTO_CFLAGS $LDFLAGS $static -o main$EXEEXT main.$OBJEXT libb.la -la0], [], [ignore], [ignore]) LT_AT_EXEC_CHECK([./main]) # Now test that if we reverse the link order, the program fails. - AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $static -o wrong$EXEEXT main.$OBJEXT -la0 libb.la], + AT_CHECK([$LIBTOOL --mode=link $CC $NO_LTO_CFLAGS $LDFLAGS $static -o wrong$EXEEXT main.$OBJEXT -la0 libb.la], [], [ignore], [ignore]) if test yes, != "$shared_fails,$static"; then LT_AT_EXEC_CHECK([./wrong], [1], [], [ignore], [|| (exit 1)])