付録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 ステートメントに変換することができます。
プロシージャー間の最適化の改善:
-
fipa-modrefオプションで制御される新しい IPA-modref パスは、関数呼び出しの副作用を追跡し、ポイントツー分析の精度を向上させます。 -
fipa-icfオプションで制御される同一コードのフォールディングパスが大幅に改善され、統一された関数の数が増え、コンパイル時のメモリー使用量が削減されました。
-
リンクタイム最適化の改善:
- リンク時のメモリー割り当てを改善し、ピークのメモリー使用量を削減しました。
-
IDE で新しい
GCC_EXTRA_DIAGNOSTIC_OUTPUT環境変数を使用すると、ビルドフラグを調整することなく、機械的に読める “修正のヒント“ を要求することができます。 -
-fanalyzerオプションで実行されるスタティックアナライザーが大幅に改善され、多数のバグフィックスと機能強化が行われました。 CVE-2021-42574 を軽減するために、RHSA-2021:4669 アドバイザリーのリリースで新しい警告が GCC に追加されました。この新しい
-Wbidirectional=none|unpaired|anyの警告は、危険性のある双方向 (BiDi) Unicode 文字について、次の 3 つのレベルで警告しています。-
-Wbidirectional=unpaired(デフォルト) は、不適切に終了した BiDi コンテキストについて警告します。 -
-Wbidirectional=noneは警告をオフにします。 -
-Wbidirectional=anyは BiDi 文字の使用について警告します。
-
言語固有の改善
C ファミリー
- C および C++ コンパイラーは、OpenMP 5.0 仕様の OpenMP コンストラクトおよびアロケータルーチンにおいて、非矩形のループネストをサポートしています。
属性:
-
新しい
no_stack_protector属性は、スタック保護(-fstack-protector)をかけてはいけない関数を示します。 -
改良された
malloc属性は、アロケータとデアロケータの API ペアを識別するために使用することができます。
-
新しい
新しい警告:
-
-Wsizeof-array-div(-Wallオプションで有効) は、2 つのsizeof演算子の除算について、最初の演算子が配列に適用され、除算値が配列要素のサイズと一致しない場合に警告を発します。 -
-Wstringop-overreadは、デフォルトで有効になっており、引数として渡された配列の最後を超えて読み取ろうとする文字列関数の呼び出しを警告します。
-
警告の強化:
-
-Wfree-nonheap-objectは、動的メモリー割り当て関数から返されていないポインターを使用した割り当て解除関数の呼び出しのインスタンスをより多く検出します。 -
-Wmaybe-uninitializedは、初期化されていないメモリーへのポインターや参照が、const-qualified 引数を取る関数に渡すことを診断します。 -
-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 Language Features を参照してください。
- C++ フロントエンドは、今後予定されている C++23 ドラフト機能の一部を実験的にサポートしています。
新しい警告:
-
-Wctad-maybe-unsupportedはデフォルトでは無効で、控除ガイドのない型でクラステンプレート引数の控除を行うことを警告します。 -
-Wrange-loop-constructは、-Wallで有効になり、範囲ベースの for ループが不必要でリソース効率の悪いコピーを作成している場合に警告を発します。 -
-Wmismatched-new-deleteは-Wallで有効になり、不一致な形式の new 演算子や他の不一致な割り当て関数から返されたポインターを持つ delete 演算子の呼び出しを警告します。 -
-Wvexing-parseはデフォルトで有効になっており、最も厄介な構文解析ルールを警告します。つまり、宣言が変数定義のように見えても、C++ 言語では関数宣言として解釈される必要がある場合です。
-
アーキテクチャー固有の改善
64 ビット ARM アーキテクチャー
-
Armv8-R アーキテクチャーは、
-march=armv8-rオプションでサポートされています。 - GCC は、加算、減算、乗算、および複素数の累積と減算を行う演算を自動ベクトル化することができます。
AMD アーキテクチャーおよび Intel 64 ビットアーキテクチャー
- Sapphire Rapids、Alder Lake、および Rocket Lake のインテル製 CPU に対応しています。
-
Intel AVX-VNNI の新しい ISA 拡張サポートが追加されました。
-mavxvnniコンパイラースイッチは、AVX-VNNI の組込みを制御します。 -
znver3 コアを搭載した AMD CPU は、新たな
-march=znver3オプションによりサポートされます。 -
x86-64 psABI サプリメント で定義されている 3 つのマイクロアーキテクチャーレベルは、新しい
-march=x86-64-v2、-march=x86-64-v3、および-march=x86-64-v4オプションでサポートされています。