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?

Reply via email to