На 3 мая состоялся первый публичный выпуск девятой версии GCC: GCC 9.1.
Она содержит множество существенных улучшений и дополнений по сравнению с восьмой
версией.
Общи промени
Опции
- Команды, принимающие размер, теперь поддерживают 64-битные значения и суффиксы для указания размера;
- Добавлена опция -flive-patching, для управления оптимизациями, потенциально деструктивными для динамической замены кода;
- Добавлена опция —completion для поддержки авто-дополнения в командной оболочке;
- Диагностики компилятора теперь включают номера строк (-fno-diagnostics-show-line-numbers) и
информацию о типах (fno-diagnostics-show-labels); - Добавлена опция -fdiagnostics-format=json для вывода диагностик в формате JSON;
- Опции для указания выравнивания (-falign-functions, например) теперь могут принимать пару вариантов выравнивания;
- Добавлены опции для фильтрации списка файлов (-fprofile-filter-files, -fprofile-exclude-files), которые подвергаются инструментированию профилировщиком;
- AddressSanitizer теперь использует более компактное выравнивание для отлова некорректных обращений к переменным на стеке;
- Многочисленные улучшения в выводе -fopt-info;
- Добавлена опция -fsave-optimization-record для сохранения отчёта об оптимизациях в файл;
- Добавлена опция -fipa-stack-alignment и -fipa-reference-addressable.
Новые встроенные функции
Новый атрибут
- copy.
Друго
Многочисленные улучшения кодогенерации, связанные с:
- генерацией конструкций switch;
- межпроцедурными оптимизациями;
- оптимизацией, основанной на информации о профилировании;
- оптимизацией на этапе сборки (LTO);
Также внутренним форматом gcov теперь является JSON, а новая опция —use-hotness-colors включает раскрашивание строк кода в зависимости от частоты их использования.
Языки
Качество и полнота реализации OpenACC в языках C, C++ и Fortran продолжают улучшаться.
С-подобные языки
- Реализована частичная поддержка OpenMP 5.0;
- Добавена функция __builtin_convertvector;
- Добавлено предупреждение -Waddress-of-packed-member;
- Улучшения в ряде существующих предупреждений;
- Текст ошибки при передаче в макрос неправильного количества аргументов теперь включает объявление самого макроса;
- Улучшения в предложениях об исправлении опечаток.
C
- Поддержка _Static_assert с одним аргументом для -std=c2x (будущий стандарт C);
- Новое предупреждение -Wabsolute-value, которое отлавливает неправильный тип аргумента для таких функций, как abs().
C++
- Новые предупреждения: -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Работим над реализацией новых возможностей из будущего стандарта C++ 2a;
- Фронтенд теперь сохраняет более точную информацию о ряде элементов исходного кода, что позволяет отображать более детальную информацию в диагностике;
- Улучшены диагностики для перегруженных функций, бинарных операторов, вызовов функций и строк форматирования;
- Добавлены автоматические исправления, поддерживаемые некоторыми средами разработки, для ряда популярных ошибок (отсутствующие скобки, пространства имён, опечатки и т.д.).
libstdc++
- Реализация C++17 больше не является экспериментальной;
- Добавлены параллельные алгоритмы, , , а больше не требует -lstdc++fs;
- Улучшена экспериментальная поддержка C++ 2a (, , std::bind_front и т.д.);
- Поддержка открытия потоков файлов на Windows, пути к которым содержат символы, выходящие за рамки char;
- Начальная поддержка на Windows;
- Начальная поддержка Networking TS.
D
Язык D версии 2.076 включён в состав GCC.
Fortran
- Полная поддержка асинхронного ввода/вывода;
- Реализован аргумент BACK для MINLOC и MAXLOC;
- Реализованы функции FINDLOC и IS_CONTIGUOUS;
- Реализован синтаксис доступа к составным частям комплексных чисел: c%re и c%im;
- Реализован синтаксис str%len и a%kind;
- Реализованы дескрипторы C и заголовок ISO_Fortran_binding.h;
- Ослаблены требования на результат функций MAX и MIN, когда один из аргументов является NaN;
- Добавлена опция -fdec-include;
- Добавена директива BUILTIN.
libgccjit
- Добавена функция gcc_jit_context_add_driver_option.
Друго
Множество архитектурно- и ОС-специфичных изменений.
Източник: linux.org.ru

