第 5 章 LLVM Toolset 中的更改


LLVM Toolset 在 RHEL 8 和 RHEL 9 上已从 17.0.6 更新至 18.1.8。

重要的 LLVM 更新:

  • 以下指令的常量表达式变体已删除:and,orlshr,ashr,zext,sext,fptrunc,fpext,fptoui,fptosi,uitofp,sitofp.
  • 添加了 llvm.exp10 内在函数。
  • 添加了全局变量的 code_model 属性。
  • 改进了 AArch64, AMDGPU, PowerPC, RISC-V, SystemZ 和 x86 架构的后端。
  • LLVM 工具已改进。

显著的 Clang 改进:

  • C++20 功能支持:

    • clang 不再执行 One Definition Rule(ODR)来检查全局模块片段中的声明。要启用更严格的行为,请使用 -Xclang -fno-skip-odr-check-in-gmf 选项。
  • C++23 功能支持:

    • 添加了一个新的诊断标记 -Wc++23-lambda-attributes,以警告对 lambdas 使用属性。
  • C++2c 功能支持:

    • clang 现在允许在同一范围内多次使用 _ 字符作为占位符变量名称。
    • 在是字符串文字的属性参数中,属性现在期望未评估的字符串。
    • 对 C++26 中弃用的枚举的算术转换已删除。
    • 改进了模板参数初始化的规范。
  • 有关更改的完整列表,请参阅 Clang 的上游发行注记

Clang 中的 ABI 变化:

  • 按照 x86_64 的 SystemV ABI ,__int128 参数不再在寄存器和堆栈插槽之间拆分。
  • 如需更多信息,请参阅 Clang 中 ABI 变化的列表

重要的后向不兼容变化:

  • 模板运算符的反向参数顺序中的 bug 修复破坏了之前在 C++17 中接受的 C++20 中的代码。
  • GCC_INSTALL_PREFIX CMake 变量(其设置默认的 -gcc-toolchain=)已被弃用,并将被删除。改为在配置文件中指定 --gcc-install-dir=--gcc-triple= 选项。
  • 预编译标头(PCH)生成(-c -xc-header-c -xc++-header)的默认扩展名称是 .pch 而不是 .gch
  • -include a.h 探测 a.h.gch 文件时,如果a.h.gch 不是 Clang PCH 文件或包含任何 Clang PCH 文件的目录,则 include 现在忽略 a.h.gch
  • 修复了对某些 C++-11-style 属性导致 __has_cpp_attribute__has_c_attribute 返回错误值的 bug 。
  • 在添加反向 operator== 时查找匹配的 operator!= 的 bug 已修复。
  • 功能模板的名称修改规则已更改为接受函数可以在其模板参数列表或 requires 子句上超载。
  • 现在,在系统标头和宏上默认启用 -Wenum-constexpr-conversion 警告。在下一个 Clang 版本中,它将被转换为一个硬(不可升级)错误。
  • 用于 C++20 命名的模块的导入模块的路径不再被硬编码。您必须从命令行指定所有依赖的模块。
  • 不再可能使用 import <module> 来导入模块;Clang 使用明确构建的模块。
  • 如需了解更多详细信息,请参阅 可能破坏更改的列表

有关更新的详细信息,请参阅上游 LLVM 发行注记Clang 发行注记

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat