Am 3. Mai fand die erste öffentliche Veröffentlichung der neunten Version von GCC: GCC 9.1 statt.
Es enthält zahlreiche wesentliche Verbesserungen und Ergänzungen im Vergleich zur achten
Version.
Allgemeine Änderungen
Optionen
- Befehle, die eine Größe akzeptieren, unterstützen jetzt 64-Bit-Werte und Suffixe zur Angabe der Größe;
- Die Option -flive-patching, um Optimierungen zu steuern, die potenziell destruktiv für die dynamische Codeersetzung sind;
- Die Option —completion wurde hinzugefügt, um die Auto-Vervollständigung in der Kommandozeile zu unterstützen;
- Die Diagnosen des Compilers umfassen jetzt Zeilennummern (-fno-diagnostics-show-line-numbers) und
Informationen über Typen (fno-diagnostics-show-labels); - Die Option -fdiagnostics-format=json um Diagnosen im JSON-Format auszugeben;
- Optionen zur Angabe der Ausrichtung (-falign-functions, zum Beispiel) können jetzt eine Reihe von Ausrichtungsoptionen akzeptieren;
- Es wurden Optionen zur Filterung der Dateiliste hinzugefügt (-fprofile-filter-files, -fprofile-exclude-files), die dem Profiler zur Instrumentierung unterzogen werden;
- AddressSanitizer verwendet jetzt eine kompaktere Ausrichtung, um ungültige Zugriffe auf Variablen im Stapel zu erkennen;
- Zahlreiche Verbesserungen in der Ausgabe -fopt-info;
- Die Option -fsave-optimization-record zum Speichern des Optimierungsberichts in eine Datei;
- Die Option -fipa-stack-alignment und -fipa-reference-addressable.
Neue eingebettete Funktionen
Neues Attribut
- copy.
Sonstiges
Zahlreiche Verbesserungen der Codegenerierung im Zusammenhang mit:
- der Generierung von switch-Strukturen;
- interproceduralen Optimierungen;
- Optimierungen basierend auf Profildaten;
- Optimierungen zur Compile-Zeit (LTO);
Auch das interne Format von gcov ist jetzt JSON, und die neue Option —use-hotness-colors führt zur Färbung von Codezeilen basierend auf der Häufigkeit ihrer Nutzung.
Sprachen
Qualität und Vollständigkeit der Implementierung OpenACC in den Sprachen C, C++ und Fortran werden weiterhin verbessert.
C-ähnliche Sprachen
- Teilweise Unterstützung für OpenMP 5.0 wurde implementiert;
- Eine Funktion wurde hinzugefügt __builtin_convertvector;
- Eine Warnung wurde hinzugefügt -Waddress-of-packed-member;
- Verbesserungen bei einer Reihe bestehender Warnungen;
- Der Fehlermeldung beim Übergeben einer falschen Anzahl von Argumenten an ein Makro enthält jetzt die Erklärung des Makros selbst;
- Verbesserungen bei Vorschlägen zur Korrektur von Tippfehlern.
C
- Unterstützung für _Static_assert mit einem Argument für -std=c2x (der zukünftige C-Standard);
- Eine neue Warnung -Wabsolute-value, die falsche Argumenttypen für Funktionen wie abs() abfängt.
C++
- Neue Warnungen: -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Die Arbeit an der Implementierung neuer Funktionen aus dem zukünftigen Standard wird fortgesetzt. C++ 2a;
- Das Frontend speichert jetzt genauere Informationen über eine Reihe von Elementen des Quellcodes, was eine detailliertere Anzeige in Diagnosen ermöglicht;
- Diagnosen für überladene Funktionen, binäre Operatoren, Funktionsaufrufe und Formatstrings wurden verbessert;
- Automatische Korrekturen für eine Reihe von häufigen Fehlern (fehlende Klammern, Namensräume, Tippfehler usw.), die von einigen Entwicklungsumgebungen unterstützt werden, wurden hinzugefügt.
libstdc++
- Die Implementierung von C++17 ist nicht mehr experimentell;
- Parallele Algorithmen wurden hinzugefügt, , , und erfordert nicht mehr -lstdc++fs;
- Die experimentelle Unterstützung von C++ 2a (, , std::bind_front usw.) wurde verbessert;
- Unterstützung für das Öffnen von Dateien auf Windows, deren Pfade Zeichen enthalten, die über char hinausgehen;
- Erste Unterstützung von unter Windows;
- Erste Unterstützung des Networking TS.
D
Die D-Sprache Version 2.076 ist in GCC enthalten.
Fortran
- Vollständige Unterstützung für asynchrone Ein- und Ausgabe;
- Das Argument BACK für MINLOC und MAXLOC wurde implementiert;
- Die Funktionen FINDLOC und IS_CONTIGUOUS wurden implementiert;
- Der Syntax für den Zugriff auf die Bestandteile komplexer Zahlen wurde implementiert: c%re und c%im;
- Der Syntax str%len und a%kind wurde implementiert;
- C-Deskriptoren und die Headerdatei ISO_Fortran_binding.h wurden implementiert;
- Die Anforderungen an das Ergebnis der Funktionen MAX und MIN wurden gelockert, wenn einer der Argumente NaN ist;
- Die Option -fdec-include;
- Direktive hinzugefügt BUILTIN.
libgccjit
- Eine Funktion wurde hinzugefügt gcc_jit_context_add_driver_option.
Sonstiges
Eine Vielzahl architektur- und betriebssystemspezifischer Änderungen.
Quelle: linux.org.ru

