付録A バージョン 9.0 の変更点
以下のセクションでは、Red Hat Developer Toolset 9.0 で導入された互換性の変更点について説明します。
A.1. GCC の変更点
Red Hat Developer Toolset 9.0 には GCC 9.3.1 が同梱されています。
以下の機能は、Red Hat Developer Toolset の以前のリリース以降に追加または変更されています。
一般的な改善
- バイトサイズの引数を許可するすべてのコマンドラインオプションは、64 ビットの整数と標準の SI および IEC のサフィックスを受け入れるようになりました。
-
新しいオプション
-flive-patching=[inline-only-static|inline-clone]
が追加されました。これにより、ライブパッチの安全なコンパイルが提供されます。 GCC の診断が改善されました。
-
左のマージンに行番号が表示されるようになりました。この機能を設定するには、
-fno-diagnostics-show-line-numbers
オプションを使用します。 -
ソースコードのリージョンにラベルを付け、式内のタイプなどの関連情報が表示されるようになりました。ラベルを無効にするには、
-fno-diagnostics-show-labels
オプションを使用します。
-
左のマージンに行番号が表示されるようになりました。この機能を設定するには、
-
アライメント関連のオプションは、
-falign-functions
、-falign-labels
、-falign-loops
、および-falign-jumps
がセカンダリーアライメントでサポートされるようになりました (例:-falign-loops=n:m:n2:m2
) 。 -
新しいプロファイリングオプション
-fprofile-filter-files
と-fprofile-exclude-files
が追加されました。これらのオプションは、どのソースファイルをインストルメント化するかを絞り込むのに役立ちます。 以下の組み込み関数が追加されました。
-
この
__builtin_expect_with_probability
関数では、オプティマイザーに分岐予測可能性のヒントを提供します。 -
__builtin_has_attribute
関数は、関数、型、または変数が属性で宣言されるかどうかを決定します。 -
この
__builtin_speculation_safe_value
関数は、安全でない投機的実行に対する軽減に役立ちます。
-
この
-
新しい
copy
関数属性が追加されました。これを関数、変数、またはタイプで使用します。 手続間、プロファイル駆動型、リンクタイムの最適化など、以下のようなコード生成の改善が加えられています。
- スイッチケースのサブセットに異なるストラテジーを使用すると、スイッチの拡張が改善されます。ストラテジーには、ジャンプテーブル、ビットテスト、および決定ツリーが含まれます。
- GCOV コマンドラインユーティリティーが改善されました。たとえば、GCOV ツールの中間形式が新しい JSON 形式になりました。
言語機能
以下は、言語に関連する主な変更点です。
C ファミリー
- C および C++ コンパイラーは、OpenMP 仕様のバージョン 5.0 を部分的にサポートするようになりました。
-
ベクトル変換に新しい拡張
__builtin_convervector
が追加されます。 -
新しい警告
-Waddress-of-packed-member
が追加されます。これはデフォルトで有効にされており、構造または結合のパックされたメンバーのアドレスから、アラインされていないポインター値について警告します。 - 既存の警告の一部が強化されました。
C
-
-std=c2x
の実験的なサポートが追加されました。 -
新しい警告
-Wabsolute-value
が追加されます。より適切な標準関数が利用可能な場合に引数の絶対値を計算する標準関数への呼び出しを警告します。
C++
新しい警告が追加されます。
-
この
-Wredundant-move
オプションは-Wextra
によって暗示され、std::move
への冗長な呼び出しに関する警告を行います。 -
この
-Wpessimizing-move
オプションは、-Wall
によって暗示されます。また、std::move
への呼び出しがコピーの省略を防ぐときに警告します。 -
-Winit-list-lifetime
オプションはデフォルトでオンになっています。ダングリングポインターでstd::initializer_list
を使用すると警告が表示されます。
-
この
-
C++ フロントエンドでは、
-std=c++2a
または-std=gnu++2a
フラグが付いた一部の C++2a ドラフト機能に対する実験的なサポートが追加されました。 - 診断のエラー報告が改善されました。
アーキテクチャーおよびプロセッサーのサポート
アーキテクチャーおよびプロセッサーサポートの変更点は次のとおりです。
64 ビット ARM アーキテクチャー
以下のプロセッサーがサポートされるようになりました (GCC 識別子は括弧で提供されます)。
- ARM Cortex-A76 (cortex-a76)
- ARM Cortex-A55/Cortex-A76 DynamIQ big.LITTLE (cortex-a76.cortex-a55)
- ARM Neoverse N1 (neoverse-n1)
- ARM Neoverse E1 プロセッサー (mcpu=neoverse-e1)
AMD64 および Intel 64
- Intel MPX (Memory Protection Extensions) はサポートされなくなりました。
- Intel PTWRITE の新しい ISA 拡張サポートが追加されました。
- Cascade Lake という名前の Intel CPU と AVX512 拡張機能がサポートされるようになりました。
IBM Z
- ARCH(13) アーキテクチャーに対応するようになりました。
-
新しいベクトル命令用の組み込み機能が追加されました。
-mzvector
オプションを使用して有効にします。 - ESA アーキテクチャーマシン G5 および G6 のサポートが非推奨になりました。