LINUX.ORG.RU

История изменений

Исправление 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]