GCC 13編譯器套件發布

經過一年的開發,免費編譯器套件 GCC 13.1 已經發布,這是新的 GCC 13.x 分支中的第一個重要版本。 根據新的版本編號方案,開發過程中使用了13.0版本,在GCC 13.1發布之前不久,GCC 14.0分支已經分支出來,從中形成下一個主要版本GCC 14.1。

主要變化:

  • GCC 包括一個用於以 Modula-2 程式語言彙編程式的前端。 支援與 PIM2、PIM3 和 PIM4 方言以及給定語言的公認 ISO 標準相對應的代碼彙編。
  • 由 gccrs 專案 (GCC Rust) 準備的具有 Rust 語言編譯器實現的前端已新增至 GCC 原始碼樹。 在當前形式中,前端被標記為實驗性的,並且預設為禁用狀態。 一旦前端準備就緒(預計在下一個版本中),就可以使用標準 GCC 工具來編譯 Rust 語言的程序,而無需安裝使用 LLVM 開發建置的 rustc 編譯器。
  • 連結時間最佳化 (LTO) 引擎增加了對 GNU make 專案支援的作業伺服器的支持,以優化跨多個執行緒的並行建置的執行。 在 GCC 中,作業伺服器用於在整個程式(WPA,全程式分析)上下文中並行化 LTO 最佳化期間的工作。 為了與 jobserver 交互,預設使用命名管道 (-jobserver-style=fifo)。
  • 靜態分析器(-fanalyzer) 提供20 種新的診斷檢查,包括「-Wanalyzer-out-of-bounds」、「-Wanalyzer-allocation-size」、「-Wanalyzer-deref-before-check」、「-Wanalyzer -Infinite” -遞歸“-Wanalyzer-jump-through-null”,“-Wanalyzer-va-list-leak”。
  • 已實現基於 JSON 以 SARIF 格式輸出診斷資訊的功能。 新格式可用於取得靜態分析結果(GCC -fanalyzer),以及取得警告和錯誤資訊。 使用選項“-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file”完成啟用,其中帶有“json”的選項會導致輸出為 GCC 特定的 JSON 格式變體。
  • 實作了 C23 C 標準中定義的一些功能,例如用於定義空指標的 nullptr 常數、簡化可變參數清單的使用、擴充枚舉的功能、noreturn 屬性、定義物件時允許使用 constexpr 和 auto、typeof和typeof_unqual ,新增關鍵字alignas、alignof、bool、false、static_assert、thread_local和true,允許在初始化期間指定空括號。
  • 實作了C++23 標準中定義的一些功能,例如在複合表達式末尾放置標記的能力、與char8_t 類型的兼容性、#warning 預處理器指令、分隔符號(\u{}、\o{} 、 \x{}) 和命名('\N{LATIN CAPITAL LETTER A}') 轉義序列、靜態運算子()、靜態運算子[]、表達式內的相等運算子、消除對constexpr 使用的一些限制、支援UTF源文本中為-8。
  • libstdc++ 改進了對 C++20 和 C++23 標準的實驗性支持,例如添加頭檔支持和 std::format,擴展頭檔功能,添加了額外的浮點類型,實現了頭文件和。
  • 新增了新的函數屬性來記錄檔案描述子在整數變數中傳遞:「__attribute__((fd_arg(N)))」、「__attribute__((fd_arg_read(N)))」和「__attribute__((fd_arg_write(N) )” )” 指定的屬性可用於靜態分析器 (-fanalyzer) 來偵測檔案描述符的錯誤操作。
  • 新增了一個新屬性“__attribute__((assume(EXPR)))”,您可以使用該屬性告訴編譯器該表達式為真,並且編譯器可以使用該事實而無需評估該表達式。
  • 新增了「-fstrict-flex-arrays=[level]」標誌來選擇處理結構中的靈活數組元素時的行為(靈活數組成員,結構末尾的不定大小的數組,例如「int b[]」 )。
  • 新增了“-Wenum-int-mismatch”標誌來警告枚舉類型和整數類型之間是否存在不匹配。
  • Fortran 語言的前端完全支援終結。
  • Go語言前端增加了對泛型函數和類型(generics)的支持,並保證了與Go語言1.18套件的兼容性。
  • AArch64 架構的後端支援 CPU Ampere-1A (ampere1a)、Arm Cortex-A715 (cortex-a715)、Arm Cortex-X1C (cortex-x1c)、Arm Cortex-X3 (cortex-x3) 和 Arm Neoverse V2 (neoverse) -v2)。 在“-march=”選項中新增了對“armv9.1-a”、“armv9.2-a”和“armv9.3-a”參數的支援。 新增了對 FEAT_LRCPC、FEAT_CSSC 和 FEAT_LSE2 處理器擴充的支援。
  • ARM 架構的後端增加了對 CPU STAR-MC1 (star-mc1)、Arm Cortex-X1C (cortex-x1c) 和 Arm Cortex-M85 (cortex-m85) 的支援。
  • x86 架構的後端增加了對 Intel Raptor Lake、Meteor Lake、Sierra Forest、Grand Ridge、Emerald Rapids、Granite Rapids 處理器以及 AMD Zen 4 (znver4) 處理器的支援。 Intel 處理器中提出的指令集架構擴展 AVX-IFMA、AVX-VNNI-INT8、AVX-NE-CONVERT、CMPccXADD、AMX-FP16、PREFETCHI、RAO-INT 和 AMX-COMPLEX 已實施。 對於SSE2系統上的C和C++語言,提供了__bf16類型。
  • AMD Radeon GPU (GCN) 的程式碼產生後端包括使用 AMD Instinct MI200 加速器來提升 OpenMP/OpenACC 效能的能力。 使用 SIMD 指令改進向量化。
  • LoongArch平台的後端能力得到了顯著擴展。
  • 在RISC-V架構後端,增加了對T-Head玄鐵C906(thead-c906)CPU的支援。 已實現對 RISC-V Vector Extension Intrinsic 0.11 規範中定義的向量處理器的支援。 新增了對 RISC-V 規範 30 種擴充的支援。
  • 如果啟用了 -Ofast、-ffast-math 或 -funsafe-math-optimizations,則使用 -shared 選項產生共用物件會在新增浮點環境後停止新增啟動程式碼。
  • 幾乎所有配置都實現了對 DWARF 調試格式的支援。
  • 新增選項“-gz=zstd”以使用 Zstandard 演算法壓縮偵錯資訊。 舊版「-gz=zlib-gnu」調試壓縮模式的支援已停止。
  • 增加了對OpenMP 5.2(開放式多處理)的初始支持,並繼續實施OpenMP 5.0 和5.1 標準,這些標準定義了在具有共享記憶體的多核心和混合(CPU+GPU/DSP) 系統上應用並行程式設計方法的API 和方法和向量化單元 (SIMD)。
  • 對 1980 世紀 XNUMX 年代創建並在 dbx 偵錯器中使用的傳統「STABS」偵錯資訊儲存格式(透過 -gstabs 和 -gxcoff 選項啟用)的支援已停止。
  • 已棄用對 Solaris 11.3 的支援(支援該平台的程式碼將在未來版本中刪除)。

來源: opennet.ru

添加評論