undefined behavior
Шикарный пример неопределённого поведения в C++:
#include <iostream>
int main() {
    for (int i = 0; i < 4; ++i)
        std::cout << i*1000000000 << std::endl;
    return 0;
}
Если скомпилировать в gcc -O2, запуск приведёт к зависанию. Если 1000000000 заменить, скажем, на 10, то зависания не будет.
Компилятор видит i*1000000000, понимает, что целочисленного переполнения в int быть не может по определению, соображает, что такое возможно только если i будет меньше 4 и выбрасывает проверку на i < 4 из кода нафиг.
Подглядел у winnie