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?