Я только принял решение изменить столько переменных от unsigned
до int
и после перекомпиляции рассматриваемого кода было встречено этим предупреждающим сообщением:
freespace_state.c:203: warning: assuming that the loop is not infinite
Соответствующая строка:
for (x = startx; x <= endx; ++x, ++xptr)
Этот цикл состоит из 60 строк кода (включая пробел/скобки и т.д.) и имеет goto
внутри него и по крайней мере одно вхождение continue
.
В этом случае я считаю, что я благодарен GCC за то, что этот цикл не бесконечен, потому что он никогда не должен зацикливаться бесконечно.
Что GCC пытается рассказать мне здесь?
Грамматика предупреждения почти наводит на мысль, что предупреждение должно быть принято в контексте какого-либо другого предупреждения, но в этом контексте нет.
[править] Это полностью моя вина. Я украл некоторые варианты оптимизации и предупреждения из вопроса здесь, где-то, не понимая их, и с тех пор забыл о них.
См. ответ Марка Рушакова, и, кроме того, я также использовал -Wunsafe-loop-optimizations
для явного предупреждения, если GCC делает предположения о цикле. См. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html