Build fails with LTO
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:
gcc -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 -no-integrated-cpp -W -Wswitch -Wcomment -Wpointer-arith -Wreturn-type -Wmissing-declarations -Wimplicit -Wno-sign-compare -Wno-format-nonliteral -Wno-shift-negative-value -O -fwrapv -fno-strict-aliasing -DNO_ASM -DNO_ARI_ASM -DNO_SP_ASM -DNO_FAST_DISPATCH -DNO_FAST_FLOAT -DNO_FAST_DOUBLE -DNO_ALLOCA -DNO_ADDRESS_SPACE_ASSUMPTIONS -DNO_GENERATIONAL_GC -DNO_SYMBOLFLAGS -DENABLE_UNICODE -DDYNAMIC_FFI -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 modules.o readline.o /usr/lib64/libreadline.so -ltinfo regexi.o calls.o -lm -lcrypt gettext.o lisp.a libgnu.a /usr/lib64/libreadline.so -ltinfo /usr/lib64/libffcall.so /usr/lib64/libsigsegv.so /usr/lib64/libunistring.so -o lisp.run
modules.h:4:65: error: type of ‘module__readline__subr_tab’ does not match original declaration [-Werror=lto-type-mismatch]
4 | MODULE(readline)
| ^
../readline/readline.c:17:8: note: ‘module__readline__subr_tab’ was previously declared here
17 | subr_t module__readline__subr_tab[1];
| ^
../readline/readline.c:17:8: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:3:316: error: type of ‘module__regexp__object_tab_initdata’ does not match original declaration [-Werror=lto-type-mismatch]
3 | MODULE(regexp)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:57:3: note: ‘module__regexp__object_tab_initdata’ was previously declared here
57 | { /* release the contents and the data of the compiled pattern */
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:57:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:3:254: error: type of ‘module__regexp__subr_tab_initdata’ does not match original declaration [-Werror=lto-type-mismatch]
3 | MODULE(regexp)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:189:3: note: ‘module__regexp__subr_tab_initdata’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:189:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:3:154: error: type of ‘module__regexp__object_tab’ does not match original declaration [-Werror=lto-type-mismatch]
3 | MODULE(regexp)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:41:3: note: ‘module__regexp__object_tab’ was previously declared here
41 | free(re);
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:41:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:3:63: error: type of ‘module__regexp__subr_tab’ does not match original declaration [-Werror=lto-type-mismatch]
3 | MODULE(regexp)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:169:35: note: ‘module__regexp__subr_tab’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/regexp/regexi.c:169:35: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:2:328: error: type of ‘module__syscalls__object_tab_initdata’ does not match original declaration [-Werror=lto-type-mismatch]
2 | MODULE(syscalls)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:15386:3: note: ‘module__syscalls__object_tab_initdata’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:15386:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:2:264: error: type of ‘module__syscalls__subr_tab_initdata’ does not match original declaration [-Werror=lto-type-mismatch]
2 | MODULE(syscalls)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:6497:3: note: ‘module__syscalls__subr_tab_initdata’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:6497:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:2:160: error: type of ‘module__syscalls__object_tab’ does not match original declaration [-Werror=lto-type-mismatch]
2 | MODULE(syscalls)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:7774:3: note: ‘module__syscalls__object_tab’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:7774:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:2:65: error: type of ‘module__syscalls__subr_tab’ does not match original declaration [-Werror=lto-type-mismatch]
2 | MODULE(syscalls)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:5923:37: note: ‘module__syscalls__subr_tab’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/syscalls/calls.c:5923:37: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:1:304: error: type of ‘module__i18n__object_tab_initdata’ does not match original declaration [-Werror=lto-type-mismatch]
1 | MODULE(i18n)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:1132:3: note: ‘module__i18n__object_tab_initdata’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:1132:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:1:244: error: type of ‘module__i18n__subr_tab_initdata’ does not match original declaration [-Werror=lto-type-mismatch]
1 | MODULE(i18n)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:540:3: note: ‘module__i18n__subr_tab_initdata’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:540:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:1:148: error: type of ‘module__i18n__object_tab’ does not match original declaration [-Werror=lto-type-mismatch]
1 | MODULE(i18n)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:579:3: note: ‘module__i18n__object_tab’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:579:3: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
modules.h:1:61: error: type of ‘module__i18n__subr_tab’ does not match original declaration [-Werror=lto-type-mismatch]
1 | MODULE(i18n)
| ^
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:504:33: note: ‘module__i18n__subr_tab’ was previously declared here
/var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/modules/i18n/gettext.c:504:33: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
lto1: some warnings being treated as errors
lto-wrapper: fatal error: gcc 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
./clisp-link: failed in /var/tmp/portage/dev-lisp/clisp-2.49.92-r1/work/clisp-2.49.92/builddir/base
make: *** [Makefile:2385: base] Error 1
* ERROR: dev-lisp/clisp-2.49.92-r1::gentoo failed (compile phase):
Previously reported at https://bugs.gentoo.org/856103 Full build log: build.log