# Наиболее важные изменения при переходе от 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 (подсказки по улучшению производительности).

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

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

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