3 maja odbyła się pierwsza publiczna wersja dziewiątej wersji GCC: GCC 9.1.
Zawiera wiele istotnych ulepszeń i dodatków w porównaniu do ósmej
wersji.
Ogólne zmiany
Opcje
- Funkcje przyjmujące rozmiar teraz obsługują 64-bitowe wartości i sufiksy do wskazywania rozmiaru;
- Dodano opcję -flive-patching, do zarządzania optymalizacjami, które mogą być destrukcyjne dla dynamicznej wymiany kodu;
- Dodana opcja —completion w celu wsparcia auto-uzupełniania w powłoce komend;
- Diagnostyka kompilatora teraz zawiera numery linii (-fno-diagnostics-show-line-numbers) i
informacje o typach (fno-diagnostics-show-labels); - Dodano opcję -fdiagnostics-format=json do wyjścia diagnostyk w formacie JSON;
- Opcje do wskazania wyrównania (-falign-functions, na przykład) teraz mogą przyjmować parę wariantów wyrównania;
- Dodane opcje do filtrowania listy plików (-fprofile-filter-files, -fprofile-exclude-files), które są poddawane instrumentacji przez profiler;
- AddressSanitizer teraz używa bardziej kompaktowego wyrównania do przechwytywania niepoprawnych odwołań do zmiennych na stosie;
- Liczne ulepszenia w wyjściu -fopt-info;
- Dodano opcję -fsave-optimization-record do zapisywania raportu o optymalizacjach w pliku;
- Dodano opcję -fipa-stack-alignment i -fipa-reference-addressable.
Nowe wbudowane funkcje
Nowy atrybut
- copy.
Inne
Liczne ulepszenia generacji kodu związane z:
- generowaniem konstrukcji switch;
- optymalizacjami międzyproceduralnymi;
- optymalizacją opartą na informacjach z profilowania;
- optymalizacją na etapie budowy (LTO);
Również wewnętrzny format gcov teraz to JSON, a nowa opcja —use-hotness-colors włącza kolorowanie wierszy kodu w zależności od częstotliwości ich użycia.
Języki
Jakość i pełność implementacji OpenACC w językach C, C++ i Fortran są dalej ulepszane.
Języki podobne do C
- Częściowe wsparcie dla OpenMP 5.0 zostało zaimplementowane;
- Dodano funkcję __builtin_convertvector;
- Dodano ostrzeżenie -Waddress-of-packed-member;
- Ulepszenia w szeregu istniejących ostrzeżeń;
- Tekst błędu przy przekazywaniu do makra niepoprawnej liczby argumentów teraz zawiera deklarację samego makra;
- Ulepszenia w propozycjach dotyczących poprawy błędów ortograficznych.
C
- Wsparcie dla _Static_assert z jednym argumentem dla -std=c2x (przyszły standard C);
- Nowe ostrzeżenie -Wabsolute-value, które przechwytuje niepoprawny typ argumentu dla takich funkcji jak abs().
C++
- Nowe ostrzeżenia: -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Trwają prace nad wdrożeniem nowych możliwości z przyszłego standardu C++ 2a;
- Frontend teraz zachowuje dokładniejsze informacje o szeregu elementów kodu źródłowego, co pozwala na wyświetlanie bardziej szczegółowych informacji w diagnostyce;
- Udoskonalone diagnostyki dla przeciążonych funkcji, operatorów binarnych, wywołań funkcji i ciągów formatujących;
- Dodane automatyczne poprawki wspierane przez niektóre środowiska programistyczne dla popularnych błędów (brakujące nawiasy, przestrzenie nazw, literówki itd.).
libstdc++
- Implementacja C++17 nie jest już eksperymentalna;
- Dodane równoległe algorytmy, , , a nie wymaga już -lstdc++fs;
- Ulepszona eksperymentalna obsługa C++ 2a (, , std::bind_front itd.);
- Wsparcie dla otwierania strumieni plików w Windows, których ścieżki zawierają znaki wychodzące poza zakres char;
- Wstępne wsparcie w Windows;
- Wstępne wsparcie Networking TS.
D
Język D w wersji 2.076 został włączony do GCC.
Fortran
- Pełne wsparcie dla asynchronicznego wejścia/wyjścia;
- Zrealizowano argument BACK dla MINLOC i MAXLOC;
- Zrealizowano funkcje FINDLOC i IS_CONTIGUOUS;
- Zrealizowano składnię dostępu do składników liczb zespolonych: c%re i c%im;
- Zrealizowano składnię str%len i a%kind;
- Zrealizowano deskryptory C i nagłówek ISO_Fortran_binding.h;
- Złagodzone wymagania dotyczące wyników funkcji MAX i MIN, gdy jeden z argumentów jest NaN;
- Dodano opcję -fdec-include;
- Dodano dyrektywę BUILTIN.
libgccjit
- Dodano funkcję gcc_jit_context_add_driver_option.
Inne
Wiele zmian specyficznych dla architektury i systemu operacyjnego.
Źródło: linux.org.ru

