概要
- GCC 16 の主な新機能や変更点のまとめ
- Solaris 向けの非互換変更点への注意喚起
- 最適化・ベクトル化 の強化やドキュメントの改良
- C++20 がデフォルト標準、C++23/26の一部機能も実装
- OpenMP/OpenACC/Ada/Fortran など各言語の拡張と改善
GCC 16の主な変更点・新機能
- int8_t などの型がSolarisで signed char に変更、C99準拠のための非互換対応
- -pthread オプションがSolarisで _REENTRANT を自動定義しなくなった
- -fdiagnostics-format=json 形式が削除、機械可読な診断は SARIF 利用推奨
最適化・ベクトル化の改善
- Link-Time Optimization が toplevel asm 文をより適切に処理
- Speculative devirtualization が一般的な間接関数呼び出しに対応、複数ターゲットの推測も可能
- ベクトル化 がループ内の並列性やカウント不能ループにも対応
- アラインメントの剥離(peeling) やマスキングによる柔軟なループ最適化
- 早期breakを含むループ で効率的なコード生成
ドキュメントの刷新
- コマンドオプション や 属性 のドキュメントが整理・近代化
- パラメータ・オプション仕様ファイル の説明をGCC内部マニュアルへ移動
- 属性インデックス の新設
言語ごとの拡張・改善
OpenMP
- CUDA API によるメモリアロケータ強化、Nvidia GPUでの性能向上
- ompx_gnu_managed_mem_alloc など新アロケータ追加、ホスト側でデバイスアクセス可能なメモリ確保
- OpenMP 5.0/5.1/5.2/6.0/TR14 の機能追加やAPI拡張
- 非推奨構文 利用時の警告表示(-Wno-deprecated-openmpで抑制可能)
OpenACC
- acc_memcpy_device や acc_memcpy_device_async APIの追加
- OpenACC 3.0/3.3/3.4 対応の拡張、Fortranでの定数利用も許可
Ada
- Constructor/Destructor拡張 による新しい構築・終了メカニズム
- Implicit with や Structural Generic instantiation などの新機能
- Extended_Access で他言語連携や配列スライス対応
- VAST によるセマンティックツリーチェック機能
- Ada 2022 の機能強化やAndroidサポート向上
C++
- C++20 がデフォルト標準(-std=gnu++20)、古い標準利用時は明示指定が必要
- C++26/C++23 の一部機能実装(Reflection, Contracts, Structured bindings等)
- エラーメッセージ の階層・インデント表示、従来形式への切り替えも可能
- C++20モジュール の実験的サポート強化(--compile-std-moduleなど)
- 標準ライブラリ(libstdc++) でのABI変更や新機能追加
- std::variant ABI のC++20準拠化
- std::regex がヒープベーススタック利用で大規模文字列対応
- C++20/23/26 の新コンポーネント対応(std::simd, std::inplace_vector等)
Fortran
- Coarray による共有メモリマルチスレッド対応
- Fortran 2003 のパラメータ化派生型サポート強化
非互換・注意点
- Solaris での型やオプションの変更による移植性への注意
- C++20 のサポートはGCC 16以前と互換性がない場合あり
- std::variant など一部ABI変更により、既存コードの動作・バイナリ互換性への影響
参考情報
- Porting to GCC 16 ページや GCC公式ドキュメント で詳細確認推奨
- 各言語・機能ごとの詳細は 該当Wikiやリリースノート 参照