經過六個月的開發
新版本中的關鍵變化是包含
- 新增了恢復抽象語法樹的功能(
AST )用於損壞的 C++ 程式碼,可用於協助診斷錯誤並向外部實用程式(例如 clang-tidy 和 clangd)提供附加資訊。 此功能預設為 C++ 程式碼啟用,並透過「-Xclang -f[no-]recovery-ast」選項進行控制。 - 新增了新的診斷模式:
- 「-Wpointer-to-int-cast」是一組有關將指標強制轉換為不能容納所有可能值的整數類型 int 的警告。
- “-Wuninitialized-const-reference” - 關於在接受帶有“const”屬性的引用參數的函數參數中傳遞未初始化變數的警告。
- “-Wimplicit-const-int-float-conversion” - 預設啟用實數常數隱式轉換為整數類型的警告。
- 對於ARM平台,提供了編譯器內建的C函數(
內在的 ),替換為高效向量指令 Arm v8.1-M MVE 和 CDE。 可用函數在頭檔arm_mve.h 和arm_cde.h 中定義。 -
添加 一組擴充整數類型 _ExtInt(N),可讓您建立不是 XNUMX 的倍數的類型,可以在 FPGA/HLS 上有效處理。例如 , _ExtInt(7) 定義由 7 位元組成的整數類型。 - 新增了定義對基於 ARM SVE(可擴展向量擴展)指令的內建 C 函數的支援的巨集:
__ARM_FEATURE_SVE,__ARM_FEATURE_SVE_BF16,
__ARM_FEATURE_SVE_MATMUL_FP32、__ARM_FEATURE_SVE_MATMUL_FP64、
__ARM_FEATURE_SVE_MATMUL_INT8,
__ARM_FEATURE_SVE2,__ARM_FEATURE_SVE2_AES,
__ARM_FEATURE_SVE2_BITPERM,
__ARM_FEATURE_SVE2_SHA3,
__ARM_FEATURE_SVE2_SM4。 例如,透過設定命令列選項「-march=armv64-a+sve」產生AArch8程式碼時定義__ARM_FEATURE_SVE宏。 - 「-O」標誌現在以「-O1」最佳化模式標識,而不是「-O2」。
- 新增了新的編譯器標誌:
- “-fstack-clash-protection” - 啟用保護
棧和堆積的交集 . - "-ffp-exception-behavior={ignore,maytrap,strict}" - 允許您選擇浮點數的異常處理程序模式。
- “-ffp-model={precise,strict,fast}” - 簡化對一系列浮點數專用選項的存取。
- 「-fpch-codegen」和「-fpch-debuginfo」產生預編譯頭(PCH),其中包含程式碼和偵錯資訊的單獨目標檔案。
- 「-fsanitize-coverage-allowlist」和「-fsanitize-coverage-blocklist」用於檢查覆蓋測試白名單和黑名單。
- “-mtls-size={12,24,32,48}”選擇 TLS(執行緒本地儲存)大小。
- 「-menable-experimental-extension」以啟用實驗性 RISC-V 擴充。
- “-fstack-clash-protection” - 啟用保護
- C 的預設模式是“-fno-common”,它允許在某些平台上更有效地存取全域變數。
- 預設模組快取已從 /tmp 移至 ~/.cache 目錄。 要覆蓋,您可以使用“-fmodules-cache-path =”標誌。
- 預設的 C 語言標準已從 gnu11 更新為 gnu17。
- 增加了對 GNU C 擴展的初步支援“
彙編內聯 » 新增組譯器插入。 該擴展仍在分析中,但沒有以任何方式進行處理。 - 與 OpenCL 和 CUDA 支援相關的功能已擴展。 新增了對 OpenCL 2.0 區塊診斷的支援並實作了新的 OpenMP 5.0 功能。
- 在 clang-format 實用程式中新增了 IndentExternBlock 選項,用於在 extern「C」和 extern「C++」區塊內對齊。
- 靜態分析器改進了 C++ 中繼承建構子的處理。 新增了新檢查alpha.core.C11Lock 和alpha.fuchsia.Lock 來檢查鎖,alpha.security.cert.pos.34c 來偵測putenv 的不安全使用,webkit.NoUncountedMemberChecker 和webkit.RefCntblBaseVirtualDtor 來偵測不可數型的問題,alpha .cplusplus .SmartPtr 檢查空智慧指標取消引用。
- 乾淨整潔的短絨
添加 很大一部分是新支票。 - clangd 快取伺服器(Clang Server)提高了效能並添加了新的診斷功能。
主要的
- 建置系統已切換為使用 Python 3。如果 Python 3 不可用,可以回滾到使用 Python 2。
- Go 語言編譯器(llgo)的前端不包含在該版本中,將來可能會進行重組。
- vector-function-abi-variant 屬性已新增至中間表示 (IR) 中,以描述標量函數和向量函數之間的對應以向量化呼叫。 llvm::VectorType 有兩種獨立的向量類型 llvm::FixedVectorType 和 llvm::ScalableVectorType。
- 基於 udef 值進行分支並將 undef 值傳遞給標準庫函數被識別為未定義行為。 在
memset/memcpy/memmove 允許傳遞 undef 指針,但如果大小參數為零。 - LLJIT 新增了透過 LLJIT::initialize 和 LLJIT::deinitialize 方法執行靜態初始化的支援。 已經實作了使用 StaticLibraryDefinitionGenerator 類別將靜態函式庫新增至 JITDylib 的功能。 新增了 C API
獸人v2 (用於建置 JIT 編譯器的 API)。 - AArch64 架構的後端增加了對 Cortex-A34、Cortex-A77、Cortex-A78 和 Cortex-X1 處理器的支援。 實現了ARMv8.2-BF16 (BFloat16) 和ARMv8.6-A 擴展,包括RMv8.6-ECV(增強型計數器虛擬化)、ARMv8.6-FGT(細粒度陷阱)、ARMv8.6-AMU(活動監視器虛擬化)和 ARMv8.0-DGH(資料收集提示)。 提供了為與 SVE 向量指令綁定的內建函數產生程式碼的能力。
- ARM 架構的後端增加了對 Cortex-M55、Cortex-A77、Cortex-A78 和 Cortex-X1 處理器的支援。 實施擴展
Armv8.6-A 矩陣乘法和 RMv8.2-AA32BF16 BFloat16。 - PowerPC 架構的後端增加了對 POWER10 處理器程式碼產生的支援。 循環優化已擴展,浮點支援也得到了改進。
- RISC-V 架構的後端允許接受支援尚未正式批准的實驗性擴展指令集的補丁。
- AVR 架構的後端已從實驗類別轉移到穩定版本,包含在基本發行版中。
- x86 架構的後端支援 Intel AMX 和 TSXLDTRK 指令。 增加了針對攻擊的保護
低電壓指數 (加載值注入),並且還實現了通用的推測執行副作用抑制機制,以阻止因 CPU 上操作的推測執行而引起的攻擊。 - 在 SystemZ 架構的後端中,增加了對 MemorySanitizer 和 LeakSanitizer 的支援。
- 向 Libc++ 添加了對帶有數學常數的頭文件的支持
. -
擴充 LLD 連結器功能。 改進了對ELF 格式的支持,包括添加的選項“--lto-emit-asm”、“--lto-whole-program-visibility”、“-print-archive-stats”、“-shuffle-sections”、 「 -thinlto-單模組」、「-unique」、「-rosegment」、「-threads=N」。 新增了「--time-trace」選項,將追蹤儲存到檔案中,然後可以透過 Chrome 中的 chrome://tracing 介面進行分析。
來源: opennet.ru