附录 A. 版本 11.0 中的更改
以下小节记录了 Red Hat Developer Toolset 11.0 中引入的功能和兼容性更改。列表未满,并将更新。
A.1. GCC 的更改 复制链接链接已复制到粘贴板!
Red Hat Developer Toolset 11.0 与 GCC 11.2 一起发布。
从以前的 Red Hat Developer Toolset 版本开始添加了或修改了以下功能:
常规改进
- GCC 现在默认为 DWARF 版本 5 调试格式。
- 诊断中显示的列号默认代表实际列号,并尊重多列字符。
- 直线代码矢量器会在矢量化时考虑整个功能。
- 如果每个条件表达式都包含一个比较表达式,则可以将比较同一变量的一系列条件表达式转换为 switch 语句。
过程间优化改进:
-
新的 IPA-modref 传递,由
-fipa-modref选项控制,跟踪函数调用的副作用,并提高点分析的准确性。 -
相同的代码折叠传递,由
-fipa-icf选项控制,得到了极大改进,以增加统一功能的数量并减少编译时内存使用。
-
新的 IPA-modref 传递,由
链接时间优化改进:
- 改进了链接期间的内存分配,以减低内存使用的峰值。
-
在 IDE 中使用新的
GCC_EXTRA_DIAGNOSTIC_OUTPUT环境变量,您可以请求机器可读的"fix-it hints",而不调整构建标志。 -
通过
-fanalyzer选项运行的静态分析器得到了显著改进,提供的很多 bug 修复和增强。 为缓解 CVE-2021-42574,在 GCC 中添加了一个带有 RHSA-2021:4669 公告的发行版本的新警告。这个 new
-Wbidirectional=[none|unpaired|any]警告会警告可能危险的双向(BiDi) Unicode 字符,并有三个级别:-
-Wbidirectional=unpaired(默认)会警告不当终止的 BiDi 上下文。 -
-Wbidirectional=none关闭警告。 -
-Wbidirectional=anywarns 关于 BiDi 字符的使用。
-
特定于语言的改进
C 系列
- C 和 C++ 编译器支持 OpenMP 结构中的非矩形循环嵌套以及 OpenMP 5.0 规范的分配器例程。
属性:
-
新的
no_stack_protector属性标记不应通过堆栈保护来检测的函数(-fstack-protector)。 -
改进后的
malloc属性可用于识别分配器和解除分配器 API 对。
-
新的
新警告:
-
-Wsizeof-array-div由-Wall选项启用,当第一个运算符应用到数组,且除数不等于数组元素的大小时,会警告两个sizeof运算符的除法。 -
-Wstringop-overread(默认启用)会警告对字符串函数的调用,这些函数试图读取作为参数传递给它们的数组的末尾。
-
增强的警告:
-
-Wfree-nonheap-object使用不是从动态内存分配函数返回的指针检测更多调用取消分配函数的实例。 -
-Wmaybe-uninitialized诊断将未初始化内存的指针和引用传给接受const限定参数的函数。 -
-Wuninitialized检测来自未初始化动态分配的内存的读。
-
C
通过
-std=c2x和-std=gnu2x选项支持来自 ISO C 标准的即将推出的 C2X 修订版的几个新功能。例如:-
支持
标准属性。 -
支持
__has_c_attribute预处理器运算符。 - 标签可能会在声明之前和复合语句的末尾出现。
-
支持
C++
-
默认模式更改为
-std=gnu++17。 -
C++ 库
libstdc++现在改进了 C++17 支持。 实现了几个新的 C++20 功能。请注意,C++20 支持是实验性的。
有关功能的更多信息,请参阅 C++20 语言功能。
- C++ 前端对即将到来的 C++23 草案功能具有实验性支持。
新警告:
-
-Wctad-maybe-unsupported, 默认禁用,警告在没有推导指南的类型上执行类模板参数推理。 -
当基于范围的 for 循环创建不必要的和资源低效的副本时,由
-Wall启用的-Wrange-loop-construct将发出警告。 -
-Wmismatched-new-delete由-Wall启用,警告有关使用从不匹配的运算符形式或从其他不匹配的分配函数返回的指针对操作符删除的调用。 -
-Wvexing-parse默认启用,警告大多数 vexing 解析规则:当声明看起来像变量定义时,但 C++ 语言要求它被解释为函数声明。
-
特定于架构的改进
64 位 ARM 架构
-
Armv8-R 架构通过
-march=armv8-r选项支持。 - GCC 可自动矢量化对复杂数字执行加法、减法、乘法和累加和减法变体的操作。
AMD 和 Intel 64 位构架
- 支持以下 Intel CPU:Sapphire Rapids、Aandder Lake 和 Rocket Lake。
-
添加了对 Intel AVX-VNNI 的新 ISA 扩展支持。
-mavxvnni编译器交换机控制 AVX-VNNI 内部函数。 -
新的
-march=znver3选项支持基于 znver3 核的 AMD CPU。 -
新的
-march=x86-64-v2、-march=x86-64-v3和-march=x86-64-v4选项支持 x86-64 psABI 补充 中定义的三个微架构级别。