История изменений
Исправление
hateyoufeel,
(текущая версия)
:
Там прикол в том, что даже уже при -O1 компилятор не делает отдельного итерирования j и вычисления j * 0x20000001, а преобразует сначала код в
Да-да. Вопрос в том, нахера он это делает-то. Потому что на производительность это не то чтобы сильно влияет. Как и написано в PDF по ссылке, оптимизации вокруг UB в основном достаточно бесполезны.
Если написать хотя бы
0x20000001L, то значение long укладывается в допустимые рамки, и цикл остаётся.
И вот поэтому большая часть сишных и плюсовых проектов собираются с -fwrapv. Потому что это UB проще выключить чем пытаться не отстрелить себе случайно член.
Исправление
hateyoufeel,
:
Там прикол в том, что даже уже при -O1 компилятор не делает отдельного итерирования j и вычисления j * 0x20000001, а преобразует сначала код в
Да-да. Вопрос в том, нахера он это делает-то. Потому что на производительность это не то чтобы сильно влияет.
Если написать хотя бы
0x20000001L, то значение long укладывается в допустимые рамки, и цикл остаётся.
И вот поэтому большая часть сишных и плюсовых проектов собираются с -fwrapv. Потому что это UB проще выключить чем пытаться не отстрелить себе случайно член.
Исходная версия
hateyoufeel,
:
Если написать хотя бы
0x20000001L, то значение long укладывается в допустимые рамки, и цикл остаётся.
И вот поэтому большая часть сишных и плюсовых проектов собираются с -fwrapv. Потому что это UB проще выключить чем пытаться не отстрелить себе случайно член.