Здравствуйте, Кодт, Вы писали:
Тут с коллегой прокопали ещё пару фактов.
1. Кроме -fno-strict-overflow, проблема лечится -fno-aggressive-loop-optimizations. Последний появился в 4.8 и формально включен на всех уровнях (а реально — RTFS'ить надо).
2. А вот ещё более суровый вариант:
#include <stdio.h>
int main()
{
int i, j, x = 27;
for (i=0, j=0; i < 10; ++i, ++j)
{
printf("%d : %d : %d\n", i, j*1000000000, x);
if (x==1) break;
x = x%2 ? x*3+1 : x/2;
}
return 0;
}
Запускаем (4.8 или 4.9, -O2):
$ ./kodt
0 : 0 : 27
1 : 1000000000 : 82
2 : 2000000000 : 41
это всё, оно остановилось.