Потенциально несовместимое изменение при разборе опции -fno-strict-aliasing в lcc-1.26¶
В компиляторах версий до lcc-1.25 включительно присутствовала ошибка при разборе опции -fno-strict-aliasing. Выражалось это в то, что комбинации опций
-fno-strict-aliasing -fstrict-aliasing
-fno-strict-aliasing -ffast
должны были включать режим -fstrict-aliasing (опция -ffast включает в себя -fstrict-aliasing), но не включали. Невключение режима означало, что оптимизации работали более консервативно, без учёта соблюдения strict aliasing rules. Это в свою очередь могло приводить к тому, что наличие в программе формальной некорректности (нарушение strict aliasing rules) оставалось незамеченным
После исправления ошибки данные комбинации опций работают правильно и ВКЛючают режим -fstrict-aliasing. Если исходники программы нарушают strict aliasing rules, то компиляция с такой комбинацией опций может привести к ошибке исполнения
Ситуация исправляется следующим образом:
Если нет уверенности в том, что исходники программы строго соблюдают strict aliasing rules, то нужно обеспечить, чтобы опция -fno-srict-aliasing находилась справа от опции -fstrict-aliasing или -ffast. Это можно обеспечить двумя способами
Способ 1. Поменять местами опции. Т.е. получить комбинации
-fstrict-aliasing -fno-strict-aliasing
-ffast -fno-strict-aliasing
Способ 2. Справа добавить ещё одну опцию -fno-srict-aliasing. Т.е. получить комбинации
-fno-strict-aliasing -fstrict-aliasing -fno-strict-aliasing
-fno-strict-aliasing -ffast -fno-strict-aliasing
В обоих случаях поведение компиляторов lcc-1.26 и выше будет симметричным поведению компиляторов lcc-1.25 и ниже. Т.е. такие изменения будут эквивалетны исходному порядку опций независимо от наличия или отсутствия ошибки при разборе опции -fno-srict-aliasing
Если есть уверенность, что исходники программы строго соблюдают strict aliasing rules, то ничего делать не нужно. Включение режима -fstrict-aliasing ничего не сломает, но может дать дополнительное ускорение. Правда в этом случае следует задуматься о том, а зачем же тогда была использована опция -fno-strict-aliasing