В 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 $
(In reply to comment #0) > Причем gcc6 уже не глючит. В связи с этим, и не только с этим, агитирую за > скорейший переход на gcc6. Спасибо, давно уже перешли.