История изменений
Исправление hlebushek, (текущая версия) :
Спасибо за первую ссылку. Я смог сделать пример с signed integer overflow, который мне нравится, который на разных уровнях оптимизации выдает разное.
Соответственно если этот number < number + 1 добавить в if, то вероятно можно сделать так, чтобы компилятор выпилил код ненужный, и на разных уровнях оптимизации выполнялись разные ветки кода.
// ========== main.cpp ==========
#include <iostream>
extern signed int number;
int main()
{
std::cout << "number = " << number << std::endl;
std::cout << "number + 1 = " << number + 1 << std::endl;
std::cout << "number < number + 1 = " << (number < number + 1) << std::endl;
return 0;
}
// ========== library.cpp ==========
#include <limits>
signed int number = std::numeric_limits<int>::max();
Компилятор Desktop Qt 5.5.0 MinGW 32bit
Результат без оптимизаций:
number = 2147483647
number + 1 = -2147483648
number < number + 1 = 0
-O3:
number = 2147483647
number + 1 = -2147483648
number < number + 1 = 1
Исходная версия hlebushek, :
Спасибо за первую ссылку. Я смог сделать пример с signed integer overflow, который мне нравится, который на разных уровнях оптимизации выдает разное.
Соответственно если этот number < number + 1 добавить в if, то вероятно можно сделать так, чтобы компилятор выпилил код ненужный, и на разных уровнях оптимизации выполнялись разные ветки кода.
// ========== main.cpp ==========
#include <iostream>
extern signed int number;
int main()
{
std::cout << "number = " << number << std::endl;
std::cout << "number + 1 = " << number + 1 << std::endl;
std::cout << "number < number + 1 = " << (number < number + 1) << std::endl;
return 0;
}
// ========== library.cpp ==========
#include <limits>
signed int number = std::numeric_limits<int>::max();
Компилятор Desktop Qt 5.5.0 MinGW 32bit
Результат без оптимизаций:
number = 2147483647
number + 1 = -2147483648
number < number + 1 = 0
-O3:
number = 2147483647
number + 1 = -2147483648
number < number + 1 = 1