Потенциально несовместимое изменение при разборе опции -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