「GCC 8.1」リリース

 GCC(GNU Compiler Collection)開発チームは5月2日、最新のコンパイラコレクション「GCC 8.1」を公開した。次期C++規格である「C++2a」の初期サポートなど多数の機能が加わっている。

 GCCはC/C++/Objective-C、Fortran、Ada、Goなどさまざまな言語向けに対応するコンパイラおよびライブラリ、フロントエンドなどから構成されるコンパイラ集。元々はGNU Operating System向けのコンパイラとして作成されたが、現在ではさまざまなOS/アーキテクチャで利用できる。

 GCC 8.1は、1年前に公開されたGCC 7.1に続く最新のメジャーリリース。プロシージャ間の最適化やプロフィール主導の最適化、リンク時間最適化といった機能が改善された。また、間接的な関数呼び出しや関数からのリターン、間接的なジャンプといったターゲットアドレスを指定してコントロールフローを変えるような操作に対し、アドレスが有効なものであるかどうかをチェックすることでセキュリティを強化する「-fcf-protection=[full|branch|return|none]」オプションが導入された。

 「-gcolumn-info」がデフォルトで有効となり、ループネスト最適化関連でもいくつかの強化が加わった。C言語ファミリ、Fortran、Adaで新しいプラグマGCC unrollを導入した。ループ展開最適化をより細かに管理できるという。gcovツールも強化され、AddressSanitizerでサニタイズのオプションが加わった。

 言語別でも多数の強化が加わった。たとえば、C++では、2020年に完成が予想されている次期規格「C++2a(C++20)」のドラフト段階の仕様を一部サポートした。警告を管理できるコマンドラインオプションが新たに加わり、C++11のalignof演算子がGNU __alignof__ではなくC _Alignofに適合するように修正されている。

 Go言語サポートでは、バージョン1.10.1ユーザーパッケージの実装、ガベージコレクタの並行化などが加わっている。

 サポートするアーキテクチャの拡充も行われ、IA-32/x86-64ではIntelの「Cannonlake」「Icelake」CPUをサポートしたほか、Intel Control-flow Enforcement Technology(CET)のサポートなども加わっている。AArch64では、Armv8.2-Aアーキテクチャ以上でScalable Vector Extension(SVE)をサポートした。自動ベクトル化は利用できるが、SVE Arm C Language Extensions(ALCE)は未対応となっている。

 このほかにも多数の強化が加わっている。

GNU Compiler Collection
https://gcc.gnu.org/