Compiler der GCC 10-Serie werden in großem Umfang aktualisiert

GCC (GNU Compiler Collection) 10.1, eine Hauptversion der Plattform, wurde am 7. Mai 2020 mit Highlights wie C ++ 20-Funktionen und C2X-Sprachunterstützung veröffentlicht. C2X ist die nächste größere Überarbeitung der C-Sprache, die 2022 erscheinen soll. 

Versionshinweise für GCC 10 zeigen, dass eine Vielzahl von C ++ 20-Funktionen implementiert wurden, darunter das Ermöglichen der Inline-Assemblierung in constexpr-Funktionen und das Erweitern strukturierter Bindungen. Auch für C ++ 20 erlaubt GCC 10 Konvertierungen in Arrays mit unbekannter Grenze, ermöglicht eine triviale Standardinitialisierung in constexpr-Kontexten, fügt das constinitSchlüsselwort hinzu und veraltet das  volatile Schlüsselwort.

Für C2X, die bevorstehende Überarbeitung des ISO C-Standards, werden mehrere Funktionen mit der Syntax  -std=c2xund unterstützt -std+gnu2x. Unter diesen sind strftimePrüfung Format der Unterstützung %OBund %ObFormate und UTF-8 - Zeichenkonstanten mit der U8' 'Syntax.

GCC, das es seit mehr als 33 Jahren gibt, enthält Frontends und Bibliotheken für C, C ++, Fortran, Ada, Go und D. Über die Portierung auf GCC 10 wurde ein Bulletin veröffentlicht. Weitere neue Funktionen in GCC 10.1 sind

  • Es wurden integrierte Funktionen hinzugefügt, einschließlich eines has_builtinPräprozessoroperators, mit dem die Unterstützung für integrierte Funktionen abgefragt werden kann, die von GCC und anderen Compilern, die dies unterstützen, bereitgestellt werden. 
  • Befehlsoptionen wurden hinzugefügt. Dazu gehören  -fallocation-dcedas Entfernen nicht benötigter Paare von newund deleteOperatoren sowie -fanalyzerdas Aktivieren eines neuen statischen Analysedurchlaufs und der zugehörigen Warnungen. Die letztere Option sollte als in der experimentellen Phase befindlich angesehen werden.
  • Verbesserungen der interprozeduralen Optimierung wurden vorgenommen. Dazu gehört die erneute Implementierung des IPA-SRA-Durchgangs (Interprozedural Scalar Replacement of Aggregates), der erneut implementiert wurde, um zur Verbindungszeit zu funktionieren. IPA-SRA kann jetzt auch das Berechnen und Zurückgeben nicht verwendeter Rückgabewerte entfernen.
  • Verbesserungen bei der Optimierung der Verbindungszeit umfassen eine neue Binärdatei ito-dump. Das Programm kann verschiedene Informationen zu einer LTO- byteObjektdatei ausgeben.
  • Profilgesteuerte Optimierungsverbesserungen wurden vorgenommen, einschließlich der Verbesserung der Profilpflege während der Kompilierung und der Hot / Cold-Partitionierung.
  • Für die C-Familie wurden die accessFunktion und das typeAttribut hinzugefügt, um zu beschreiben, wie eine Funktion auf Objekte zugreift, die per Zeiger oder Referenz an sie übergeben wurden, und um solche Argumente mit ganzzahligen Argumenten zu verknüpfen, die die Objektgröße angeben. Das Attribut wird verwendet, um die Erkennung ungültiger Zugriffe durch benutzerdefinierte Funktionen zu ermöglichen. Es gibt auch neue Warnungen und Verbesserungen an vorhandenen Warnungen. Eine Warnung -Wzero-length-boundswarnt vor dem Zugriff auf Elemente von Arrays mit der Länge Null, die andere Mitglieder desselben Objekts überlappen könnten.
  • Eine ABI-Inkompatibilität zwischen C ++ 14 und C ++ 17 wurde behoben. Bei einigen Zielen wird eine Klasse mit einem Unterobjekt der Größe Null beim Kompilieren als C ++ 17 oder C ++ 20 falsch übergeben.