Release des Compiler-Sets GCC 14

Nach einem Jahr der Entwicklung wurde das Release der freien Compiler-Sets GCC 14.1 veröffentlicht, der erste bedeutende Release der neuen GCC 14.x Reihe. Gemäß dem neuen Versionsnummerierungsschema wurde Version 14.0 während der Entwicklungsphase verwendet, und kurz vor der Veröffentlichung von GCC 14.1 wurde bereits der Branch GCC 15.0 abgezweigt, auf dessen Basis der nächste wichtige Release GCC 15.1 entstehen wird.

Wesentliche Änderungen:

  • Die Möglichkeiten für die statische Analyse von C-Code wurden erheblich erweitert, die über die Option „-fanalyzer“ verfügbar sind (die statische Analyse für C++ ist derzeit noch nicht ausgereift). Die Analyse von String-Operationen und die Überprüfung auf das Vorhandensein des abschließenden Nullzeichens in Strings wurden verstärkt. Eine neue Warnung „-Wanalyzer-infinite-loop“ wurde hinzugefügt, um endlose Schleifen zu erkennen. Zudem wurden eine Reihe von Warnungen „-Wanalyzer-tainted-*“ eingeführt, um Probleme bei der Eingabewertprüfung zu identifizieren. Die Warnmöglichkeiten „-Wanalyzer-out-of-bounds“ wurden erweitert, um Pufferüberläufe zu erkennen, beispielsweise kann nun ein Diagramm zur Visualisierung des Zustands angezeigt werden, der zu einem Überlauf führt.
    Release des Compiler-Sets GCC 14
  • Eine neue Kompilierungsoption «—enable-host-pie» wurde hinzugefügt, um ausführbare Dateien im PIE-Modus (Position Independent Executable) zu erstellen, sowie die Option «—enable-host-bind-now» für das Binden mit den Optionen «-Wl,-z,now».
  • Die neue Option «-fhardened» wurde eingeführt, die Flags zur Verbesserung der Sicherheit aktiviert (-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector-strong -fstack-clash-protection -fcf-protection=full).
  • Die Option «-fharden-control-flow-redundancy» wurde hinzugefügt, um am Ende von Funktionen Code zur Erkennung bestimmter Formen undefinierten Verhaltens einzufügen, die potenziell die normale Ausführungsreihenfolge (control flow) durch die Nutzung von Exploits, die gespeicherte Funktionszeiger im Speicher ändern, beeinträchtigen können.
  • Ein neues Typattribut «hardbool» wurde eingeführt, das ermöglicht, die Werte, die mit true und false verknüpft sind, zu überschreiben, um einige Arten von Angriffen zu erschweren.
  • Ein neues Typattribut «strub» wurde hinzugefügt, um das Zurücksetzen von Stackrahmen mit den Daten von Funktionen und Variablen nach dem Verlassen einer Funktion oder dem Auslösen einer Ausnahme zu steuern.
  • Die Option -finline-stringops wurde hinzugefügt, um Inline-Entfaltung von Funktionen wie memcmp, memcpy, memmove und memset zu aktivieren, selbst wenn dies nicht zur Optimierung erforderlich ist.
  • Ein neuer Attributtyp für die Funktionen null_terminated_string_arg(PARAM_IDX) wurde hinzugefügt, um Parameter zu kennzeichnen, die als nullterminierte Zeichenfolgen behandelt werden sollen.
  • Der Vektorisierer unterstützt jetzt die Vektorisierung von Schleifen, die Ausdrücke wie 'break' enthalten.
  • Die anfängliche Unterstützung für die Vorabversion der OpenMP 6.0-Spezifikation (Open Multi-Processing) wurde implementiert, und die Implementierung der OpenMP-Standards 5.0, 5.1 und 5.2, die APIs und Methoden zum parallelen Programmieren auf Mehrkern- und hybriden (CPU+GPU/DSP) Systemen mit gemeinsamem Speicher und SIMD-Vektorisierungsblöcken definieren, wurde fortgesetzt.
  • Die Implementierung der OpenACC 2.7 und 3.2-Spezifikationen für paralleles Programmieren, die Mittel zum Offloading auf GPUs und spezialisierte Prozessoren wie NVIDIA PTX definieren, wurde verbessert.
  • Für C, C++ und Objective-C wurde die Unterstützung der Erweiterungen '__has_feature' und '__has_extension', die in Clang verwendet werden, implementiert.
  • Die zukünftigen C-Standardfunktionen C23 wurden umgesetzt, darunter die Typen «_BitInt (N)» und «unsigned _BitInt (N)». Strukturen, Vereinigungen und Aufzählungen dürfen mehrmals in einem Sichtbereich mit demselben Inhalt und sich wiederholendem Tag definiert werden. Die Unterstützung für die Header-Datei stdckdint.h wurde hinzugefügt. Zur Aktivierung der C23-Elementunterstützung sind die Flags «-std=c23», «-std=gnu23» und «-Wc11-c23-compat» vorgesehen.
  • Für die Programmiersprache C wurde die Anweisung «#pragma GCC novector» hinzugefügt, die die Vektorisierung annotierter Schleifen deaktiviert.
  • Möglichkeiten im Zusammenhang mit dem C++23-Standard wurden hinzugefügt. Die Unterstützung für den Mechanismus «Deducing this» wurde implementiert, der es ermöglicht, in Templates Parameter mit dem Bezeichner «this» zu verwenden und der einer Klassenfunktion erlaubt, die Kategorie des Ausdrucks zu erkennen (zum Beispiel, ob es sich um eine Konstante handelt), für den diese Funktion aufgerufen wurde. Die Anforderung wurde umgesetzt, dass alle Funktionen, die Funktionen mit dem Bezeichner consteval aufrufen, ebenfalls consteval sind, d.h. zur Compile-Zeit ausgeführt werden. Einige Anforderungen an «constexpr» wurden gelockert.
  • Funktionen in Verbindung mit dem zukünftigen Standard C++2c (C++26) wurden hinzugefügt. Zum Beispiel können jetzt Zeichenfolgenliterale in Kontexten verwendet werden, in denen sie nicht zur Initialisierung von Character-Arrays verwendet werden und nicht in den resultierenden Code eingehen. Sie werden ausschließlich während der Kompilierung für Diagnosemeldungen und Preprocessing genutzt. Es wurde die Möglichkeit hinzugefügt, mehrere Platzhaltervariablen mit dem Namen „_“ in einem Gültigkeitsbereich zu verwenden. Die implizierte Umwandlung von Enumerationswerten in arithmetischen Berechnungen wurde in den Status veraltet versetzt.
  • In libstdc++ wurde die Unterstützung für die Standards C++20, C++23 und C++26 verbessert.
  • Im Compiler für die Programmiersprache Fortran hat die Arbeit an der Unterstützung des Standards Fortran 2023 (-std=f2023) begonnen.
  • Die Unterstützung der GCC-Erweiterung zur Angabe flexibler Array-Elemente (Arrays unbestimmter Größe, z. B. „int b[]“) nicht am Ende der Struktur wurde als veraltet erklärt. In Zukunft kann ein Array unbestimmter Größe nur noch am Ende einer Struktur verwendet werden.
  • Im Backend für die Architektur AArch64 wurde die Unterstützung für die CPU Ampere-1B (ampere1b), Arm Cortex-A520 (cortex-a520), Arm Cortex-A720 (cortex-a720), Arm Cortex-X4 (cortex-x4) und Microsoft Cobalt-100 (cobalt-100) implementiert. Für die Optionen "-mcpu=" und "-mtune=" wurden neue CPU-Identifikatoren generic, generic-armv8-a und generic-armv9-a hinzugefügt. Die Unterstützung für die Erweiterungen Arm SME und SME2 (Streaming Matrix Extensions) wurde hinzugefügt. Es wurden architekturspezifische Optimierungen für AArch64 umgesetzt.
  • Im Backend für die ARM-Architektur wurde die Unterstützung für die CPU Cortex-M52 (cortex-m52 in den Optionen "-mcpu=" und "-mtune=") hinzugefügt.
  • Im Codegenerierungs-Backend für AMD Radeon GPUs (GCN) wurde die Unterstützung für die GPUs AMD Radeon gfx90c (GCN5), gfx1030, gfx1036 (RDNA2), gfx1100 und gfx1103 (RDNA3) implementiert. Die Leistung für AMD-Geräte der Serien MI100 und MI200 wurde verbessert. Die Architektur der gfx900-Geräte (Vega) ist standardmäßig aktiviert.
  • Im Backend für die x86-Architektur wurde die Unterstützung für die Erweiterungen des Intel-Befehlssatzes AVX10.1, Intel APX (teilweise), Intel AVX-VNNI-INT16, Intel SHA512, Intel SM3, Intel SM4 und Intel USER_MSR hinzugefügt.

    Die Unterstützung für AMD CPUs auf Basis der Zen 5 Architektur (-march=znver5) sowie für Intel-Prozessoren wie Clearwater Forest (-march=clearwaterforest), Arrow Lake (-march=arrowlake), Arrow Lake S (-march=arrowlake-s), Lunar Lake (-march=lunarlake) und Panther Lake (-march=pantherlake) wurde hinzugefügt. Die Option „-m[no-]evex512“ zur Steuerung der Nutzung von 512-Bit-Vektoren wurde eingeführt (standardmäßig aktiviert, wenn AVX512F unterstützt wird). Die Unterstützung von Intel Xeon Phi CPUs wurde als veraltet erklärt.

  • Die Backend-Funktionen für die Plattformen LoongArch, AVR und RISC-V wurden erweitert.
  • Die Diagnoserausgabe im JSON-basierten SARIF-Format wurde erweitert. Das SARIF-Format kann verwendet werden, um Ergebnisse der statischen Analyse (GCC -fanalyzer) sowie Informationen über Warnungen und Fehler abzurufen.
  • Die Unterstützung der Zielarchitekturen ia64 und nios2, die in Intel Itanium- und Nios II-Prozessoren verwendet werden, wurde als veraltet erklärt und wird in der nächsten GCC-Version entfernt.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster