LINUX.ORG.RU

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

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