經過六個月的開發, 項目“LLVM 13.0”新版本的發布剛剛發布 符合GCC(編譯器,優化器和代碼生成器)的要求,可以將程序編譯為類似於RISC(具有多級優化系統的低級虛擬機)的虛擬指令的中間位代碼。
在這個新版本中,增加了各種變化和新奇之處,其中 突出顯示支持改進 以及 C++ 20 和 C++ 2b 新功能的實現等。
LLVM 13.0的主要新功能
在這個新版本中我們可以發現添加了“-ehcontguard”選項以使用 CET 技術 (Windows 控制流強制技術)在使用面向返回編程 (ROP) 技術構建的漏洞執行的異常處理階段提供保護。
而且debuginfo-test 項目已重命名為 cross-project-tests 旨在測試來自多個項目的組件,不僅限於調試信息,並且構建系統提供對構建多個發行版的支持,例如,一個帶有實用程序,另一個帶有開發人員庫。
另一方面 Libc++ 繼續實現 C++20 和 C++2b 標準的新功能,包括完成“概念”庫,再加上 添加了對 std 的支持:基於 MinGW 的 Windows 文件系統,還有單獨的頭文件, 和並添加了 LIBCXX_ENABLE_INCOMPLETE_FEATURES 編譯器選項來禁用功能未完全實現的頭文件。
而 AArch64架構的後端支持Armv9-A RME擴展 彙編器中的(領域管理擴展)和 SME(可擴展矩陣擴展), 添加了 ISA V68/HVX 支持 到 Hexagon 架構後端和 x86 後端 改進了與 AMD Zen 3 處理器的兼容性 並向 AMDGPU 後端添加了對 GFX1013 RDNA2 APU 的支持。
實現對 Big-endian Aarch64 處理器的支持的 LLD 鏈接器的功能也得到了擴展,並且 Mach-O 後端已達到允許普通程序鏈接的狀態。 它包括通過 LLD 鏈接 Glibc 所需的增強功能。
llvm-mca(機器代碼分析器)實用程序添加了對有序超標量管道處理器(例如 ARM Cortex-A55)的支持。
AArch64平台的LLDB調試器提供對指針身份驗證的全面支持, MTE(MemTag,內存標記擴展)和 SVE 寄存器以及添加的命令允許您將標籤綁定到每個內存分配操作,並在訪問內存時通過檢查應與標籤正確關聯的指針來進行安排。
LLDB 調試器和 Fortran – Flang 接口已添加到項目生成的二進製程序集中。
由於 Clang 13.0 的突出改進:
- 已實現對保證尾部調用(函數末尾的子例程調用,如果子例程調用自身則形成尾部遞歸)的支持。
- 添加了“-Wunused-but-set-parameter”和“-Wunused-but-set-variable”標誌,以便在設置但未使用參數或變量時顯示警告。
- 添加了“-Wnull-pointer-subtraction”標誌,以在代碼由於在減法運算中使用空指針而導致未定義的行為時顯示警告。
- 添加了 -fstack-use 標誌,為每個代碼文件生成一個附加 .su 文件,其中包含有關已處理文件中定義的每個函數的堆棧幀大小的信息。
- 靜態分析器中添加了新的輸出類型“sarif-html”,這會導致同時生成 HTML 和 Sarif 格式的報告。
- 添加了對 allocClassWithName 的新檢查。 當指定“-analyzer-display-progress”選項時,顯示每個函數的分析時間。 智能指針解析器(alpha.cplusplus.SmartPtr)即將準備就緒。
- 已實現對 OpenMP 5.1 規範中定義的循環變換指令(“#pragma omp unrol”和“#pragma omptile”)的支持。
- 很大一部分新檢查已添加到 linter clang-tidy 中。
終於 如果您有興趣了解更多信息, 您可以查看詳細信息 在下面的鏈接中。