https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87525
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|i686-pc-linux-gnu |i686-pc-linux-gnu, | |x86_64-linux-gnu CC| |hubicka at gcc dot gnu.org Host|i686-pc-linux-gnu |i686-pc-linux-gnu, | |x86_64-linux-gnu Build|i686-pc-linux-gnu |i686-pc-linux-gnu, | |x86_64-linux-gnu --- Comment #11 from Martin Liška <marxin at gcc dot gnu.org> --- So I have a small reproducer that works on current trunk. Also 64-bit is affected: $ cat snippet.c #include <stdio.h> FILE *f; void call (void) { f = fopen("file.txt", "r"); char buffer[10]; while (1) { int r = fread (buffer, 1, sizeof (buffer), f); if (r) return; } } void *ptr = &fread; $ cat main.c extern void call(void); int main() { call (); return 0; } $ echo "abc" > files.txt $ gcc -flto -D_FORTIFY_SOURCE=2 -shared snippet.c -fPIC -o libx.so -O3 && gcc main.c -lx -L. && LD_LIBRARY_PATH=. timeout 3 ./a.out [timeout] while non-lto is file: $ gcc -D_FORTIFY_SOURCE=2 -shared snippet.c -fPIC -o libx.so -O3 && gcc main.c -lx -L. && LD_LIBRARY_PATH=. timeout 3 ./a.out && echo OK OK Honza can you please take a look what had happens?