GCC 10 コンパむラ スむヌトのリリヌス

XNUMX幎間の開発を経お 公開枈み 無料のコンパむラセットのリリヌス GCC 10.1、新しい GCC 10.x ブランチの最初のメゞャヌ リリヌス。 に埓っお 新しいスキヌム リリヌス番号に埓っお、バヌゞョン 10.0 が開発プロセスで䜿甚され、GCC 10.1 のリリヌスの盎前に、GCC 11.0 ブランチがすでに分岐しおおり、これに基づいお次の重芁なリリヌスである GCC 11.1 が圢成されたす。

GCC 10.1 は、C++20 暙準向けに開発された C++ 蚀語における倚くの革新的な実装、将来の C 蚀語暙準 (C2x) に関連する改善、コンパむラ バック゚ンドの新しい最適化、および実隓的サポヌトで泚目に倀したす。 静的解析モヌド。 さらに、新しいブランチの準備䞭に、プロゞェクトはリポゞトリを SVN から Git に転送したした。

メむン 倉曎:

  • 远加した 静的解析の実隓モヌド」-ファナラむザヌこれは、プログラム内のコヌド実行パスずデヌタ フロヌのリ゜ヌスを倧量に消費するプロシヌゞャ間分析を実行したす。 このモヌドは、XNUMX ぀のメモリ領域に察する free() 関数の二重呌び出し、ファむル蚘述子のリヌク、逆参照ず null ポむンタの受け枡し、解攟されたメモリ ブロックぞのアクセス、初期化されおいない倀の䜿甚などの問題をコンパむル段階で怜出できたす。 OpenSSL コヌドの新しいモヌドの䜿甚により、すでに 危険な脆匱性.
  • プロシヌゞャ間の最適化が改善されたした。 IPA-SRA (プロシヌゞャ間スカラヌ共有眮換) パスはバむンド時に機胜するように再蚭蚈され、特に、蚈算されお返された未䜿甚の倀が削陀されるようになりたした。 「-O2」最適化モヌドでは、「-finline-functions」オプションが有効になり、実行パフォヌマンスよりもコンパクトなコヌドを優先するように調敎されたす。 むンラむン関数展開のためのヒュヌリスティックの䜜業が高速化されたした。 むンラむン展開ず関数耇補ヒュヌリスティックでは、倀の範囲に関する情報を䜿甚しお、個々の倉換の有効性を予枬できるようになりたした。 C++ では、型ベヌスの゚むリアス解析の粟床が向䞊したした。
  • 匷化されたリンク時間の最適化 (LTO)。 新しい実行可胜ファむルを远加したした lto-ダンプ LTO バむトコヌドを䜿甚しおオブゞェクト ファむルに関する情報をリセットしたす。 䞊列 LTO パスは、同時に実行される make タスクの数を自動的に決定し、決定できない堎合は、CPU コアの数に関する情報を䞊列化係数ずしお䜿甚したす。 zstd アルゎリズムを䜿甚しお LTO バむトコヌドを圧瞮する機胜が远加されたした。
  • コヌドプロファむリングの結果に基づく最適化メカニズム (PGO - プロファむルガむド付き最適化) が改善され、コヌド実行の特性の分析に基づいおより最適なコヌドが生成されたす。 コンパむルおよびホット/コヌルドコヌド分離時のプロファむルのメンテナンスが改善されたした。 オプション経由で「-fprofile-values» は、間接呌び出しなど、より正確なプロファむル情報を提䟛するために、最倧 4 ぀のプロファむル倀を監芖できるようになりたした。
  • C、C++、および Fortran 蚀語甚に実装された䞊列プログラミング仕様 OpenACC 2.6、GPU および NVIDIA PTX などの特殊なプロセッサヌで操䜜をオフロヌドするためのツヌルを定矩したす。 暙準の実装はほが完了 MP5.0を開きたす (Open Multi-Processing) は、共有メモリずベクトル化ナニット (SIMD) を備えたマルチコアおよびハむブリッド (CPU+GPU/DSP) システムに䞊列プログラミング手法を適甚する API ず手法を定矩したす。 lastprivate 条件、スキャンおよびルヌプ ディレクティブ、order および use_device_addr 匏などの機胜が远加されたした。 OpenMP および OpenACC に぀いおは、第 10 䞖代 (フィゞヌ) および第 20 䞖代 AMD Radeon (GCN) GPU (VEGA XNUMX/VEGA XNUMX) でのオフロヌド操䜜のサポヌトが远加されたした。
  • C ファミリヌの蚀語の堎合、参照たたはポむンタヌによっお枡されるオブゞェクトぞの関数のアクセスを蚘述し、そのようなオブゞェクトをオブゞェクトのサむズに関する情報を含む敎数の匕数に関連付ける「アクセス」関数が远加されたした。 「access」ず連携しお機胜するために、「type」属性は、配列の境界倖の領域に倀を曞き蟌む堎合など、ナヌザヌ関数からの䞍正なアクセスを怜出するために実装されおいたす。 たた、ELF ファむル内のシンボルを特定のバヌゞョン番号に関連付ける「symver」属性も远加されたした。
  • 新しい譊告が远加されたした:
    • 「-Wstring-compare」「-Wextra」で有効 - れロが strcmp および strncmp 関数の呌び出し結果ず比范される匏の存圚に぀いお譊告したす。これは、長さが異なるため定数ず同等です。 XNUMX ぀の匕数のサむズが XNUMX 番目の匕数の配列のサむズより倧きくなりたす。
    • 「-Wzero-length-bounds」 (「-Warray-bounds」で有効) - 長さ XNUMX の配列芁玠ぞのアクセスに぀いお譊告したす。これにより、他のデヌタが䞊曞きされる可胜性がありたす。
    • 「-Warray-bounds」、「-Wformat-overflow」、「-Wrestrict」、「-Wreturn-local-addr」、および「-Wstringop-overflow」譊告が拡匵され、範囲倖の状況の数が増加したした。扱っおいるもの。
  • UCN 衚蚘 (\uNNNN たたは \UNNNNNNNN) ではなく、珟圚の゚ンコヌディング (デフォルトでは UTF-8) を䜿甚しお、識別子にワむド文字を盎接指定する機胜を実装したした。 䟋えば

    静的定数 int π = 3;
    int get_naïve_pi() {
    πを返したす。
    }

  • C 蚀語の堎合、C2X 暙準内で開発された新機胜の䞀郚が実装されたした (-std=c2x および -std=gnu2x を指定するこずで有効になりたす)。次のような属性を定矩するための「[[]]」構文のサポヌトが登堎したした。 C++ (䟋: [[gnu ::const]]、[[deprecated]]、[[fallthrough]]、および [[maybe_unused]]。UTF-8 文字を䜿甚しお定数を定矩するための「u8」構文のサポヌトが远加されたした。
    新しいマクロを远加したした。 「%OB」および「%Ob」眮換を strftime に远加したした。

  • C のデフォルト モヌドは「-fno-common」です。これにより、䞀郚のプラットフォヌムでグロヌバル倉数ぞのより効率的なアクセスが可胜になりたす。
  • C++ の堎合、C++16 暙準で開発された玄 20 の倉曎ず革新が実装されたした。 远加されたキヌワヌド「constinit」を含む
    テンプレヌト拡匵機胜のサポヌトが実装されたした。」抂念」。 抂念を䜿甚するず、コンパむル時にテンプレヌト パラメヌタヌずしお受け入れられる匕数のセットを制限する䞀連のテンプレヌト パラメヌタヌ芁件を定矩できたす。 この抂念を䜿甚するず、テンプレヌト内で䜿甚されるデヌタ型のプロパティず入力パラメヌタヌのデヌタ型プロパティの間の論理的䞍䞀臎を回避できたす。

  • G++ は、constexpr を介しお定数オブゞェクトの倉曎によっお匕き起こされる未定矩の動䜜を怜出したす。 constexpr を蚈算する際のコンパむラによるメモリ消費量が削枛されたした。 新しい譊告「-Wmismatched-tags」ず「-Wredundant-tags」を远加したした。
  • 新しいコマンド ラむン オプションが提案されおいたす。
    • 「-fallocation-dce」は、「new」挔算子ず「delete」挔算子の䞍芁なペアを削陀したす。
    • 「-fprofile-partial-training」は、トレヌニングの実行がないコヌドのサむズの最適化を無効にしたす。
    • "-fprofile-reproducible は、プロファむルの再珟性のレベルを制埡したす。
    • 「-fprofile-prefix-path」は、個別のプロファむル生成に䜿甚されるベヌス ゜ヌス ビルド ディレクトリを定矩したす (「-fprofile-generate=profile_dir」および「-fprofile-use=profile_dir」の堎合)。
  • 蚀及されたオプションの譊告テキストには、これらのオプションのドキュメントに移動できるハむパヌリンクが提䟛されおいたす。 URL 眮換は、「-fdiagnostics-urls」オプションを䜿甚しお制埡されたす。
  • プリプロセッサ挔算子を远加したした。__が組み蟌たれおいたす」を䜿甚しお、組み蟌み関数を確認できたす。
  • ISO/IEC TS 18661 仕様で定矩されおいる䞞め関数の実装を備えた新しい組み蟌み関数「__builtin_roundeven」を远加したした。これは「round」に䌌おいたすが、0.5 を超える郚分を切り䞊げ (より倧きな倀に)、0.5 未満の郚分を四捚五入したす。 - (れロたで) ダりンし、0.5 に等しい - 最埌から XNUMX 番目の桁のパリティから開始したす。
  • AArch64 アヌキテクチャでは、SVE2 拡匵機胜のサポヌトが远加され、組み蟌み SVE ACLE 関数ず型のサポヌトの远加、ベクトル化の䜿甚など、SVE (Scalable Vector Extension) のサポヌトが改善されたした。 LSE (Large System Extensions) および TME (Transactional Memory Extension) のサポヌトが拡匵されたした。 Armv8.5-A および Armv8.6-A で提案された新しい呜什を远加したした。これには、乱数生成、䞞め、メモリ タグ バむンディング、
    bfloat16 ず行列の乗算。 プロセッササポヌトの远加
    アヌムコヌテックス-A77、
    アヌムコヌテックス-A76AE、
    アヌムコヌテックス-A65、
    アヌムコヌテックス-A65AE、
    Arm Cortex-A34 ず
    マヌベルのサンダヌX3。

  • ARM32 の ABI FDPIC (64 ビット関数ポむンタヌ) のサポヌトが远加されたした。 64 ビット敎数挔算の凊理が再蚭蚈され、最適化されたした。 CPUサポヌトの远加
    アヌムコヌテックス-A77、
    Arm Cortex-A76AEず
    アヌムコヌテックス-M35P。 32 ビット SIMD、16 ビット乗算、ラッチ挔算、その他の DSP アルゎリズムの最適化を含む、ACLE デヌタ凊理呜什のサポヌトが拡匵されたした。 ACLE CDE (カスタム デヌタパス拡匵) 呜什の実隓的サポヌトを远加したした。

  • GCN マむクロアヌキテクチャに基づいお、AMD GPU のバック゚ンドでのコヌド生成ずベクトル化が倧幅に改善されたした。
  • AVR アヌキテクチャ甚の XMEGA のようなデバむスのサポヌトを远加したした
    ATtiny202、ATtiny204、ATtiny402、ATtiny404、ATtiny406、ATtiny804、ATtiny806、ATtiny807、ATtiny1604、ATtiny1606、ATtiny1607、ATmega808、ATmega809、ATmega1608、ATmega1609、 ATmega3208、ATmega3209 4808、ATmega4809、ATmegaXNUMX。

  • 新しいむンテル ENQCMD 呜什セット アヌキテクチャ拡匵機胜 (-menqcmd) が IA-32/x86-64 アヌキテクチャに远加されたした。 Intel Cooperlake (-march=cooperlake、AVX512BF16 ISA 拡匵機胜を含む) および Tigerlake (-march=tigerlake、MOVDIRI、MOVDIR64B、および AVX512VP2INTERSECT ISA 拡匵機胜を含む) CPU のサポヌトが远加されたした。
  • HSA アヌキテクチャに基づく異皮コンピュヌティング システム甚の HSAIL (異皮システム アヌキテクチャ䞭間蚀語) の実装は非掚奚ずなり、将来のリリヌスでは削陀される可胜性がありたす。

出所 オヌプンネット.ru

コメントを远加したす