Цитата(ViKo @ May 31 2018, 07:25)

С чего это вдруг компилятор отказался читать non-volatile переменную?
Он не отказывается ее читать, просто иногда он считает, что имеет полное представление о ее содержимом на стадии компиляции
и выкидывает целые куски кода из соображений оптимизации. Однажды включил LTO и многое перестало читаться верно,
дикие "volatile const" для некоторых данных пришлось с умом дописывать. Для себя вывел правило, если в переменную заносит
значение что-то в обход компилятора, то volatile поможет.