История изменений
Исправление monk, (текущая версия) :
Нет, тут не может быть никакого бесконечного цикла
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53265
если уб - можно что-то выкидывать
Если UB, то можно делать что угодно. В частности, можно считать, что в этом случае происходит переход на начало цикла без проверки.
Поэтому статически анализ показывает, что либо i < N, либо есть доступ к a, а значит можно делать что угодно. Значит всегда (по результату статического анализа) i<N.
Со шлангом это не работает.
Пример для шланга:
struct timeval tv;
unsigned long junk;
gettimeofday(&tv, NULL);
srand((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
Компилируется в srand(0)
Исходная версия monk, :
Нет, тут не может быть никакого бесконечного цикла
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53265
если уб - можно что-то выкидывать
Если UB, то можно делать что угодно. В частности, можно считать, что в этом случае происходит переход на начало цикла без проверки.
Поэтому статически анализ показывает, что либо i < N, либо есть доступ к a, а значит можно делать что угодно. Значит всегда (по результату статического анализа) i<N.
Со шлангом это не работает.
Пример для шланга:
struct timeval tv;
unsigned long junk;
gettimeofday(&tv, NULL);
srand((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
Компилируется в [url=http://kqueue.org/blog/2012/06/25/more-randomness-or-less/]srand(0)[/url]