「GCC 7.1」リリース、長らく使われていたReloadがLRAに置き換えられる
GNU Compiler Collection(GCC)開発チームは5月2日、最新版となる「GNU Compiler Collection(GCC) 7.1」を公開した。CやC++を始めとした各種フロントエンド、オプティマイザなどが強化されている。
GNU Compiler Collection(GCC)はGNU Projectが開発するコンパイラ集。GNU Operating Systemのコンパイラとして開発がスタートしたプロジェクトで、初の正式版(1.0)がリリースされてから今年で30年を迎えるという。C/C++/Objective-C、Fortran、Java、Ada、Goなどさまざまな言語に対応する。
GCC 7.1は2016年5月に公開されたGCC 6系に続く新しいメジャーリリースで、既存の機能の修正や強化だけでなく新たな機能も加わっている。
本バージョンでは、GCCで長らく使われていた「Reload」がデフォルトでLRA(Local Register Allocator)に置き換えられた。Reloadはコードの生成や命令およびレジスタの管理などを行うものだが、肥大化によりメンテナンスや改善が難しい状況になっていたという。LRAではReloadで行っていた処理を分割し、より改善しやすいような実装になっているという。
C++フロントエンドで、実験的にC++17の現行のドラフト仕様を全てサポートした。-std=c++1zと-std=gnu++1zオプション、libstdc++ライブラリも利用できるようになった。C++17ドラフトライブラリの機能も実装した。一方でC/C++言語向けのCilk+拡張は非推奨となっている。また、一部セミコロンの抜けを指摘するfit-itヒントが導入された。IDEと組み合わせることで、問題の自動修正が可能となる。
C/C++コンパイラ向けに新しいコマンドラインオプションを導入した。バッファオーバーフローや無効なメモリアクセスの検出支援機能が加わった。このほか、Objective-C、Go、Frontranなどでも強化が加わっている。
オプティマイザも強化し、ストアマージパス、コードホスティング最適化などを導入した。ループ分割、リンク時間の最適化や、プロシージャ間の定数畳み込み関連でも新しい最適化が加わった。AddressSanitizerでも、スコープを離れたのちの変数の利用を報告する新しいサニタイズオプションが加わっている。
デバッグ情報フォーマットのDWARFのバージョン5をサポートした。デフォルトはバージョン4だが、「-gdwarf-5」オプションを指定することで有効化できる。