付録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 のサポートが非推奨になりました。