付録A バージョン 12.0 での変更点
以下のセクションでは、Red Hat Developer Toolset 12.1 で導入された機能および互換性の変更点を説明しています。リストは完全ではなく、更新されます。
A.1. GCC の変更点
Red Hat Developer Toolset 12.1 には GCC 12.2.1 が同梱されています。
以下の機能は、Red Hat Developer Toolset の以前のリリース以降に追加または変更されています。
一般的な改善
-
ベクトル化は
-O2
で有効化され、元の-O2 -ftree-vectorize -fvect-cost-model=very-cheap
と同等になりました。
言語固有の改善
OpenMP
-
OpenMP 5.0 のサポートが拡張されました。
close map
修飾子とaffinity
句がサポートされるようになりました。 -
新規実装された OpenMP 5.1 機能が追加されました。たとえば、OpenMP ディレクティブを C++ 11 属性として表現するためのサポート、
masked
およびscope
コンストラクト、nothing
およびerror
ディレクティブ、proc_bind
句およびOMP_PROC_BIND
環境変数でのprimary
の使用、order
句に対するreproducible
およびunconstrained
修飾子、および C と C++ のみの場合は、allocate
句のalign
とallocator
修飾子、およびアトミック拡張。
C ファミリー
新しい機能と属性:
-
clang 言語拡張と互換性のある
__builtin_shufflevector
ビルトインのサポート。 -
unavailable
属性のサポート。 -
新しい組み込み関数
__builtin_assoc_barrier
は、浮動小数点式の再関連付けを禁止するために使用されます。 -
clang 言語拡張と互換性のある
__builtin_dynamic_object_size
ビルトインのサポート。
-
clang 言語拡張と互換性のある
新しい警告:
-
-Wbidi-chars
は、誤解を招く可能性のある UTF-8 双方向制御文字について警告します。デフォルトは-Wbidi-chars=unpaired
です。 -
-Warray-compare
は、配列型の 2 つのオペランド間の比較について警告します。
-
警告の強化:
-
-Wattributes
が拡張されたため、-Wno-attributes=ns::attr
または-Wno-attributes=ns::
を使用して、C++11 および C2X で不明なスコープ属性に関する警告を抑制することができるようになりました。同様に、#pragma
GCC diagnosticignored_attributes "vendor::attr"
を使用して同じことを行うことができます。
-
C
- C2X では、C++ のような桁区切り記号がサポートされています。
-
#elifdef
および#elifndef
前処理ディレクティブがサポートされるようになりました。 -
-Wformat
でチェックするprintf
およびscanf
フォーマットは、2 進整数に対して C2X によって指定された%b
フォーマット、およびprintf
に対して C2X によって推奨される%B
フォーマットをサポートするようになりました。
C++
以下の C++23 機能が実装されました。
-
P1938R3:
if consteval
の実装 -
P0849R8:
auto(x)
: 言語のdecay-copy
-
P2242R3:
constexpr
関数の非リテラル変数 (およびラベルと goto) -
P2334R1: 前処理ディレクティブ
elifdef
およびelifndef
のサポート -
P2360R0:
init-statement
を拡張してalias-declaration
を許可する - P2128R6: マルチディメンション添字演算子
- DR 2397: 配列へのポインターと参照の自動指定子
-
P1938R3:
-
新しいコマンドラインオプション
-fimplicit-constexpr
は、インライン関数を暗黙的にconstexpr
にするために使用されます。 -
新しいコマンドラインオプション
-ffold-simple-inlines
は、std::move
、std::forward
、std::addressof
、およびstd::as_const
などの特定の単純なインライン関数への呼び出しを折りたたむために使用されます。 - 演繹ガイドはクラススコープで宣言できます
-
-Wuninitialized
は、メンバー初期化子リストで初期化されていない変数を使用することについて警告するようになりました。 新しい警告:
-
次の C++ 言語の不一致に対する新しい警告オプション:
-Wc11-extensions`, `-Wc14-extensions
、-Wc17-extensions`, `-Wc20-extensions
、および-Wc++23-extensions
。これらはデフォルトで有効になっており、古い C++ 標準方言を使用するコードでの新しい C++ 構造の発生に関する既存の警告を制御するために使用されます。 -
新しい警告
-Wmissing-requires
は、欠落しているrequires
について警告します。 -
既存の
std::is_constant_evaluated
警告は、より多くの場合に警告するように拡張されています。
-
次の C++ 言語の不一致に対する新しい警告オプション:
Red Hat Developer Toolset 12.1 の新しい C++ 機能の詳細は、Red Hat Developers の記事 を参照してください。
ランタイムライブラリー libstdC++
以下の実験的な C++20 サポート機能が改善されました。
-
std::vector
、std::basic_string
、std::optional
、およびstd::variant
をconstexpr
関数で使用できるようになりました。 -
デフォルトの初期化を伴う配列の
std::make_shared
、およびstd::atomic<std::shared_ptr<T>>
。 - レイアウトの互換性とポインターの相互転換可能性の特性。
-
以下の実験的な C++23 サポート機能が改善されました。
-
std::optional
のモナド操作。 -
std::move_only_function
-
<spanstream>
-
std::basic_string::resize_and_overwrite
-
std::unique_ptr
をconstexpr
関数で使用できるようになりました。 -
<stacktrace>
(デフォルトではビルドされません。追加のライブラリーへのリンクが必要です)。 -
<stdatomic.h>
-
std::invoke_r
-
constexpr
std::type_info::operator==
-
アーキテクチャー固有の改善
64 ビット ARM アーキテクチャー
-
-mcpu
および-mtune
オプションにより、多数の新しい CPU がサポートされます。 -
2020 Arm アーキテクチャー拡張からのアクセラレーターメモリーの 64 バイトアトミックロード/ストア組み込み関数は、
+ls64
オプション拡張によってサポートされます。 -
初期コード生成サポートは、
memcpy
、memmove
、およびmemset
標準関数を高速化するハードウェア命令でサポートされています。+mopsoption
拡張機能を使用してコンパイルするときに、これらの命令を生成します。 -
arm_neon.h
ヘッダーからアクセスできる Arm C Language Extensions (ACLE) Advanced Single Instruction Multiple Data (SIMD) 組み込み関数が大幅に再実装され、以前の GCC バージョンよりもパフォーマンスの高いコードが生成されます。
AMD アーキテクチャーおよび Intel 64 ビットアーキテクチャー
-
Intel AVX512-FP16 の新しい ISA 拡張サポートが追加されました。AVX512FP16 組み込み関数は、
-mavx512fp16
コンパイラースイッチを介して利用できます。 -
C と C++ の両方で、
SSE2
が有効になっているシステムで_Float16 type
がサポートされます。 -
-mharden-sls=[none|all|return|indirect-jmp]
を介して、関数リターンと間接ジャンプの Straight Line Speculation (SLS) に対する緩和がサポートされます。