3 травня відбувся перший публічний випуск дев'ятої версії GCC: GCC 9.1.
Він містить безліч істотних покращень та додавань у порівнянні з восьмою
версією.
загальні зміни
Опції
- Команди, що приймають розмір, тепер підтримують 64-бітові значення та суфікси для вказівки розміру;
- Додана опція -flive-patchingдля управління оптимізаціями, потенційно деструктивними для динамічної заміни коду;
- Додано опцію -completion для підтримки авто-доповнення в командній оболонці;
- Діагностики компілятора тепер включають номери рядків (-fno-diagnostics-show-line-numbers) і
інформацію про типи (fno-diagnostics-show-labels); - Додана опція -fdiagnostics-format=json для виведення діагностик у форматі JSON;
- Опції для вказівки вирівнювання (-falign-функції, наприклад) тепер можуть приймати кілька варіантів вирівнювання;
- Додані опції для фільтрації списку файлів (-fprofile-filter-files, -fprofile-exclude-files), які піддаються інструментуванню профільником;
- AddressSanitizer тепер використовує компактніше вирівнювання для вилову некоректних звернень до змінних на стеку;
- Численні покращення у висновку -fopt-info;
- Додана опція -fsave-optimization-record для збереження звіту про оптимізацію у файл;
- Додана опція -fipa-stack-alignment и -fipa-reference-addressable.
Нові вбудовані функції
Новий атрибут
Інше
Численні поліпшення кодогенерації пов'язані з:
- генерацією 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.
Фортран
- Повна підтримка асинхронного введення/виводу;
- Реалізовано аргумент BACK для MINLOC та MAXLOC;
- Реалізовано функції FINDLOC та IS_CONTIGUOUS;
- Реалізовано синтаксис доступу до складових частин комплексних чисел: c%re та c%im;
- Реалізовано синтаксис str%len та a%kind;
- Реалізовано дескриптори C та заголовок ISO_Fortran_binding.h;
- Ослаблені вимоги на результат функцій MAX та MIN, коли один із аргументів є NaN;
- Додана опція -fdec-include;
- Додано директиву Вбудований.
libgccjit
- Додана функція gcc_jit_context_add_driver_option.
Інше
Безліч архітектурно- та ОС-специфічних змін.
Джерело: linux.org.ru