發布 LLVM 13.0 編譯器套件

經過六個月的開發,LLVM 13.0 專案發布了——一個與 GCC 相容的工具包(編譯器、優化器和程式碼產生器),可將程式編譯成類 RISC 虛擬指令的中間位碼(具有多層最佳化系統)。 產生的偽代碼可以在程式執行時直接使用 JIT 編譯器轉換為機器指令。

Clang 13.0 中的改進:

  • 支援保證尾呼叫(在函數末尾呼叫子例程,如果子例程呼叫自身,則建立尾遞歸)。使用 C++ 中的「[[clang::musttail]]」屬性和 C 中的「__attribute__((musttail))」屬性(用於「return」表達式)支援保證尾呼叫。此功能透過將程式碼展開為平面迭代來節省堆疊空間,從而實現最佳化。
  • 現在,clang“using”聲明和擴充支援使用“[[]]”格式的 C++11 風格的屬性定義。
  • 新增了“-Wreserved-identifier”標誌,以便在使用者代碼中指定保留標識符時輸出警告。
  • 新增了“-Wunused-but-set-parameter”和“-Wunused-but-set-variable”標誌,以便在設定了參數或變數但未使用時列印警告。
  • 新增了「-Wnull-pointer-subtraction」標誌,以警告程式碼是否因在減法運算中使用空指標而導致未定義的行為。
  • 新增了“-fstack-usage”標誌,為每個程式碼檔案產生一個額外的“.su”文件,其中包含有關正在處理的文件中定義的每個函數的堆疊幀大小的資訊。
  • 靜態分析器新增了輸出類型“sarif-html”,可產生 HTML 和 Sarif 格式的報表。新增了 allocClassWithName 檢查。指定“-analyzer-display-progress”選項時,將輸出每個函數的分析時間。智慧型指標分析器 (alpha.cplusplus.SmartPtr) 即將完成。
  • 擴充了與 OpenCL 支援相關的功能。新增了對新擴充功能 cl_khr_integer_dot_product、cl_khr_extended_bit_ops、__cl_clang_bitfields 和 __cl_clang_non_portable_kernel_param_types 的支援。繼續實作 OpenCL 3.0 規格。對於 C 語言,除非明確選擇其他版本,否則預設使用 OpenCL 1.2 規格。對於 C++,新增了對「.clcpp」副檔名檔案的支援。
  • 已實作對 OpenMP 5.1 規範中定義的循環轉換指令(“#pragma omp unrol”和“#pragma omp tile”)的支援。
  • clang-format 實用程式已更新,包含以下選項:SpacesInLineCommentPrefix 用於確定註解前的空格數;IndentAccessModifiers、LambdaBodyIndentation 和 PPIndentWidth 用於控制記錄、lambda 表達式和預處理器指令的對齊方式。擴充了對頭檔清單 (SortIncludes) 進行排序的功能。新增了對 JSON 檔案格式化的支援。
  • 大量新的檢查已添加到 clang-tidy linter 中。

LLVM 13.0 的主要創新:

  • 新增了“-ehcontguard”選項以使用CET技術(Windows 控制流強制技術)用於在異常處理階段防止執行使用面向返回編程 (ROP) 技術構建的漏洞利用程序。
  • debuginfo-test 專案已重新命名為 cross-project-tests,旨在測試來自不同專案的元件,而不僅限於偵錯資訊。
  • 建置系統支援建立多個發行版,例如,一個包含實用程序,另一個包含開發人員庫。
  • AArch64 架構的後端實現了對彙編程式中的 Armv9-A RME(領域管理擴展)和 SME(可擴展矩陣擴展)擴展的支援。
  • Hexagon 架構後端已新增對 ISA V68/HVX 的支援。
  • x86 後端改進了對 AMD Zen 3 處理器的支援。
  • 增加了對 AMDGPU 後端的 GFX1013 RDNA2 APU 的支援。
  • Libc++ 持續實作 C++20 和 C++2b 標準的新特性,包括完成「concepts」函式庫。對於該平台而言, Windows 新增了對基於 MinGW 的 std::filesystem 的支援。頭文件已分離。 ,和新增了 LIBCXX_ENABLE_INCOMPLETE_FEATURES 建置選項,用於停用功能不完整的頭檔。
  • LLD 連結器已擴展,支援大端 Aarch64 處理器,Mach-O 後端也已改進,支援連結常規程式。此外,還包含使用 LLD 連結 Glibc 所需的改進。
  • llvm-mca(機器碼分析器)實用程式已更新,以支援有序超標量管線處理器,例如 ARM Cortex-A55。
  • AArch64 平台的 LLDB 偵錯器現已全面支援指標認證、MTE(MemTag,記憶體標記擴充)機制和 SVE 暫存器。新增了一些命令,用於將標記綁定到每個記憶體分配操作,並在存取必須綁定到有效標記的記憶體時檢查指標。
  • LLDB 偵錯器和 Fortran 前端 Flang 已新增至專案產生的二進位程式集中。

來源: opennet.ru

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster