.. ВНИМАНИЕ!
   При изменении в данном документе, сам документ нужно скопировать во все ветки,
   где он присутствует. Кроме копирования ничего делать не надо

Наиболее важные изменения при переходе от lcc-1.26 к lcc-1.27 (changelog)
=========================================================================

Изменения, затрагивающие совместимость
--------------------------------------

* По аналогии с gfortran-10 изменилась реакция компилятора на несовпадение типа аргумента
  операции вызова типу фактического параметра. Теперь вместо предупреждения выдаётся
  ошибка. Для совместимости со старыми программами по опции ``-fallow-argument-mismatch``
  повторяется старое поведение, т.е. выдача ошибки вместо предупреждения

* Следующие устаревшие атрибуты более не поддерживаются
  (в скобках указаны атрибуты, на которые их следует заменить):

  * ``__attribute__((no_associative_math))`` [ ``__attribute__((optimize("-fno-associative-math")))`` ]
  * ``__attribute__((no_fp_spec))`` [ ``__attribute__((optimize("-fno-spec-fp")))`` ]

* Следующие устаревшие опции более не поддерживаются
  (в скобках указаны опции, на которые их следует заменить):

  * ``-fcontrol-spec`` (``-fno-semi-spec-ld``)
  * ``-fno-control-spec`` (``-fno-spec-ld``)
  * ``-fno-control-spec-globals`` (``-fsemi-spec-ld-glob``)
  * ``-fno-control-spec-stack`` (``-fsemi-spec-ld-stack``)
  * ``-fno-control-spec-greg`` (``-fsemi-spec-ld-greg``)
  * ``-fno-ld-spec`` (``-fno-semi-spec-ld -fno-spec-ld``)
  * ``-fno-fp-spec`` (``-fno-spec-fp``)
  * ``-fdisable-spec-ctp`` (``-fno-spec-ctp``)
  * ``-fomp-for-procs=<proc_list>``
  * ``-fno-ipo-region``
  * ``-fipo-min-region-size=<n>``
  * ``-fipo-max-region-size=<n>``

* Изменилась реакция на синтаксические ошибки в некоторых директивах #pragma:
  теперь вместо предупреждений выдаются ошибки


Общие улучшения
---------------

* Переход на совместимость с gfortran-10.3.0. В lcc-1.26 была совместимость с gfortran-5.5.0

* Переход на edg-6.3. В lcc-1.26 использовался edg-6.2

* В режиме языка Fortran изменился стандарт по умолчанию. По умолчанию используется режим ``-std=gnu``,
  как и в lcc-1.26. Но теперь это означает "язык Fortran 2018 с gnu-расширениями", в lcc-1.26
  это означало "язык Fortran 95 с gnu-расширениями"

* Доработка поддержки OpenMP:

  - Добавлена поддержка конструкций: teams, distribute, target (в режиме игнорирования)
  - Добавлена поддержка clause aligned в конструкции omp simd
  - Добавлена поддержка 64-битных границ распараллеленных циклов
  - Добавлена поддержка OpenMP в режиме ``-mptr128`` (начиная с lcc-1.27.07)
  - Добавлена поддержка опции -fopenmp-simd (начиная с lcc-1.27.07)
  - Добавлена поддержка выражений в clause'ах ``if`` и ``num_threads`` для C/C++ (начиная с lcc-1.27.04)

* Улучшен синтаксический разбор для цикловых директив ``#pragma``, требующих константные значения
  в качестве параметров (пока кроме ``#pragma omp``). Теперь в качестве константного значения
  можно использовать const/constexpr-переменные и константные параметры template'ов

* Добавлена поддержка ``__attribute__((optimize))`` для следующих опций:

  * ``-fomit-frame-pointer``, ``-fno-omit-frame-pointer`` (в виде игнорирования)
  * ``-funroll-loops``, ``-fno-unroll-loops`` (в виде игнорирования)
  * ``-fgsr``, ``-fno-gsr``
  * ``-fdce-fp``, ``-fno-dce-fp``
  * ``-fint-divide-opt``, ``-fno-int-divide-opt``

* Добавлена поддержка ``__attribute__((assume_aligned))`` - позволяет указать
  выравнивание указателя, возвращаемого функцией, и избавить компилятор
  от необходимости строить динамические проверки выравнивания указателей
  при автоматической векторизации.

* Следующие опции теперь могут принимать неманглированные имена процедур:

  * ``-fprofile-skip-proc=``
  * ``-frestrict-disable=``
  * ``-fno-tls-list=``

* Добавлена опция ``-frestrict-locals`` для трактовки локальных указателей
  как с модификатором restrict

* Добавлена опция ``-frestrict-safe`` для включения более консервативного
  анализа зависимостей для restrict-указателей

* Добавлена опция ``-Wmaybe-use-out-of-scope`` для выдачи предупреждений
  о возможном использовании адреса автоматической переменной за пределами
  её времени жизни

* Добавлена опция ``-Wuninitialized-extra`` для выдачи предупреждений
  об использовании гарантированно неинициализированных полей
  автоматических переменных типа структура, класс

* Добавлена опция ``-Wmaybe-uninitialized-extra`` для выдачи предупреждений
  об использовании возможно неинициализированных полей
  автоматических переменных типа структура, класс

* Доработана выдача отчёта о применении оптимизаций (опция ``-fopt-report[=N]``).
  Реализованы уровни отчёта
  4 (указание причин, по которым важные оптимизации не смогли отработать) и
  5 (подсказки по улучшению производительности).

Доработки оптимизаций
---------------------

* Реализовано удаление мертвых переходов на фазе планирования
  и распределения регистров

* Реализована автоматическая векторизация конверсий типов
