Bug 32720 - глючит -D_FORTIFY_SOURCE -flto, off by one
Summary: глючит -D_FORTIFY_SOURCE -flto, off by one
Status: CLOSED WONTFIX
Alias: None
Product: Sisyphus
Classification: Development
Component: gcc5 (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-11-06 08:14 MSK by Big Benis
Modified: 2018-07-13 02:41 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Big Benis 2016-11-06 08:14:37 MSK
В github.com/svpv/ppmd-mini у меня есть такой код:

   102      char fname[0x1FF];
   103      size_t fnlen = hdr.fnlen & 0x1FF;
   104      if (fread(fname, fnlen, 1, stdin) != 1)
   105          return 1;

gcc5 выдает такое предупреждение:

$ make
gcc -Ilib -g -O3 -flto -fvisibility=hidden -Wall -Wextra -o ppmd-mini ppmd-mini.c lib/Ppmd8.c lib/Ppmd8Enc.c lib/Ppmd8Dec.c
In function ‘__fread_alias’,
    inlined from ‘decompress’ at ppmd-mini.c:104:9:
/usr/include/bits/stdio2.h:290:9: warning: call to ‘__fread_chk_warn’ declared with attribute warning: fread called with bigger size * nmemb than length of destination buffer
  return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream);
         ^

То есть он считает, что размер (hdr.fnlen & 0x1FF) может переполнить буфер fname[0x1FF]. А я так не считаю. Причем если заменить на frname[0x200], то всё становится нормально. Ну что сказать, компилятор глюкавый. Где-то там у него плюс-минус один - это вообще, как два пишем три в уме.

Причем если убрать -flto, то предупреждения нету.

$ gcc -Ilib -g -O3  -fvisibility=hidden -Wall -Wextra -o ppmd-mini ppmd-mini.c lib/Ppmd8.c lib/Ppmd8Enc.c lib/Ppmd8Dec.c                                    
$

То есть эта приблизительная арифметика где-то в кишках у него сидит очень глубоко.

Причем gcc6 уже не глючит. В связи с этим, и не только с этим, агитирую за скорейший переход на gcc6.

$ ~/gcc-6/bin/gcc -D_FORTIFY_SOURCE=2 -Ilib -g -O3 -flto -fvisibility=hidden -Wall -Wextra -o ppmd-mini ppmd-mini.c lib/Ppmd8.c lib/Ppmd8Enc.c lib/Ppmd8Dec.c
$
Comment 1 Dmitry V. Levin 2018-07-13 02:41:15 MSK
(In reply to comment #0)
> Причем gcc6 уже не глючит. В связи с этим, и не только с этим, агитирую за
> скорейший переход на gcc6.

Спасибо, давно уже перешли.