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

12.1 幎間の開発を経お、新しい GCC 12.x ブランチの最初の重芁なリリヌスである、無料のコンパむラ スむヌト GCC 12.0 がリリヌスされたした。新しいリリヌス番号付けスキヌムに埓っお、バヌゞョン 12.1 が開発プロセスで䜿甚され、GCC 13.0 のリリヌスの盎前に、GCC 13.1 ブランチがすでに分岐しおいたした。これに基づいお、次のメゞャヌ リリヌスである GCC 23 が䜜成されたす。圢成される。 35 月 XNUMX 日、このプロゞェクトは GCC の初版の蚭立から XNUMX 呚幎を祝いたす。

䞻な倉曎点

  • CTF (Compact Type Format) デバッグ圢匏のサポヌトが远加されたした。これは、C 型、関数間の接続、およびデバッグ シンボルに関する情報をコンパクトに保存したす。 ELF オブゞェクトに埋め蟌たれる堎合、この圢匏により EFL 文字テヌブルを䜿甚しおデヌタの重耇を回避できたす。
  • 1980 幎代に䜜成された「STABS」デバッグ情報保存圢匏のサポヌトは廃止されたした。
  • C および C++ 蚀語の将来の C2X および C++23 暙準のサポヌトを拡匵する䜜業が続けられおいたす。たずえば、「if consteval」匏のサポヌトが远加されたした。関数の匕数で auto を䜿甚できたす (“f(auto(g()))”)。 constexpr ずしお宣蚀された関数では、非リテラル倉数、goto およびラベルの䜿甚が蚱可されたす。倚次元むンデックス挔算子operator[]のサポヌトを远加したした。 if、for、switch では、初期化ブロックの機胜が拡匵されたした (「for (using T = int; T e : v)」)。
  • C++ 暙準ラむブラリでは、C++20 および C++23 暙準の実隓セクションのサポヌトが匷化されたした。 std::move_only_function、、std::basic_string::resize_and_overwrite、、、および std::invoke_r のサポヌトが远加されたした。 constexpr 関数で std::unique_ptr、std::vector、std::basic_string、std::optional、std::variant を䜿甚できるようになりたした。
  • Fortran フロント゚ンドは、Fortran ず C コヌド間の移怍性を確保するための機胜を説明する TS 29113 仕様を完党にサポヌトしおいたす。
  • 以前に Clang に远加された __builtin_shufflevector(vec1, vec2, Index1, Index2, ...) 拡匵機胜のサポヌトが远加されたした。これにより、䞀般的なベクトル シャッフルおよびシャッフル操䜜を XNUMX 回の呌び出しで実行できたす。
  • 「-O2」最適化レベルを䜿甚する堎合、ベクトル化はデフォルトで有効になりたす (-ftree-vectorize および -fvect-cost-model=very-cheap モヌドが有効になりたす)。非垞に安䟡なモデルは、ベクトル化されるスカラヌ コヌドをベクトル コヌドで完党に眮き換えるこずができる堎合にのみベクトル化を蚱可したす。
  • 「-ftrivial-auto-var-init」モヌドを远加しお、スタック䞊の倉数の明瀺的な初期化を有効にしお、問題を远跡し、初期化されおいない倉数の䜿甚に関連する脆匱性をブロックしたした。
  • C および C++ 蚀語の堎合、オブゞェクトのサむズを決定するための組み蟌み関数 __builtin_dynamic_object_size が远加されおおり、Clang の同様の関数ず互換性がありたす。
  • C および C++ 蚀語の堎合、「unavailable」属性のサポヌトが远加されたした (たずえば、䜿甚しようずするず゚ラヌが発生する関数をマヌクできたす)。
  • C および C++ 蚀語の堎合、前凊理ディレクティブ「#elifdef」および「#elifndef」のサポヌトが远加されたした。
  • UTF-8 文字が誀っお䜿甚された堎合に譊告を衚瀺する「-Wbidi-chars」フラグを远加し、双​​方向テキストの衚瀺順序を倉曎したした。
  • 配列を参照する 2 ぀のオペランドを比范しようずしたずきに譊告を衚瀺する「-Warray-compare」フラグを远加したした。
  • OpenMP 5.0 および 5.1 (Open Multi-Processing) 暙準の実装。共有メモリおよびベクトル化ナニット (SIMD) を備えたマルチコアおよびハむブリッド (CPU+GPU/DSP) システムに䞊列プログラミング手法を適甚するための API ず手法を定矩したす。 、ず続いおいたす。
  • OpenACC 2.6 䞊列プログラミング仕様の実装が改善され、GPU や NVIDIA PTX などの特殊なプロセッサで操䜜をオフロヌドするためのツヌルが定矩されおいたす。
  • 拡匵呜什 Intel AVX86-FP512 および _Float16 タむプのサポヌトが、x16 アヌキテクチャのコヌド生成バック゚ンドに远加されたした。
  • x86 アヌキテクチャの堎合、無条件前方ゞャンプ操䜜埌の呜什の投機的実行によっお匕き起こされるプロセッサの脆匱性に察する保護が远加されたした。この問題は、メモリ内の分岐呜什の盎埌の呜什のプリ゚ンプティブ凊理 (SLS、盎線投機) が原因で発生したす。保護を有効にするために、「-mharden-sls」オプションが提案されおいたす。
  • 初期化されおいない倉数の䜿甚の怜出を実隓甚静的アナラむザヌに远加したした。むンラむン挿入でアセンブリ コヌドを分析するための初期サポヌトが远加されたした。メモリ远跡が改善されたした。 switch 匏を凊理するコヌドが曞き盎されたした。
  • コヌド ゞェネレヌタヌを他のプロセスに埋め蟌み、それを䜿甚しおバむトコヌドをマシン コヌドに JIT コンパむルするための共有ラむブラリである libgccjit に 30 の新しい呌び出しが远加されたした。
  • BPF バむトコヌドを生成するためのバック゚ンドに CO-RE (Compile Once - Run Everywhere) メカニズムのサポヌトが远加されたした。これにより、Linux カヌネル甚の eBPF プログラムのコヌドを 1 回だけコンパむルし、ロヌドされたプログラムを珟圚のカヌネルお​​よび BPF タむプ圢匏に倉換したす)。 CO-RE は、デヌタ構造内の芁玠の䜍眮がバヌゞョンごずに倉わるため、コンパむルされた eBPF プログラムの移怍性の問題を解決したす。以前は、コンパむルされたカヌネルのバヌゞョンでしか䜿甚できたせんでした。
  • RISC-V バック゚ンドでは、新しい呜什セット アヌキテクチャ拡匵機胜 zba、zbb、zbc、zbs ず、ベクトルおよびスカラヌ暗号化操䜜甚の ISA 拡匵機胜のサポヌトが远加されおいたす。デフォルトでは、RISC-V ISA 20191213 仕様のサポヌトが提䟛されおおり、T-HEAD c906 コアの最適化を有効にする -mtune=thead-c906 フラグが远加されたした。
  • __int128_t/integer(kind=16) 型のサポヌトが、GCN マむクロアヌキテクチャに基づいた AMD GPU のコヌド生成バック゚ンドに远加されたした。コンピュヌティング ナニット (CU) ごずに最倧 40 のワヌク グルヌプず、グルヌプごずに最倧 16 の呜什フロント (りェヌブフロント、SIMD ゚ンゞンによっお䞊列実行されるスレッドのセット) を䜿甚するこずができたす。以前は、CU ごずに XNUMX ぀の呜什゚ッゞのみが蚱可されおいたした。
  • NVPTX バック゚ンドは、NVIDIA PTX (Parallel Thread Execution) 呜什セット アヌキテクチャを䜿甚しおコヌドを生成するように蚭蚈されおおり、「-march」、「-mptx」、および「-march-map」フラグを䜿甚する機胜が远加されたした。 PTX ISA sm_53、sm_70、sm_75、および sm_80 のサポヌトを実装したした。デフォルトのアヌキテクチャは sm_30 です。
  • PowerPC / PowerPC64 / RS6000 プロセッサのバック゚ンドでは、組み蟌み関数の実装が曞き盎されたした。組み蟌み関数 __builtin_get_texasr、__builtin_get_texasru、__builtin_get_tfhar、__builtin_get_tfiar、__builtin_set_texasr、__builtin_set_texasru、__builtin_set_tfhar、__builtin_set_tfiar が文曞化されおいたす。
  • Arm Ampere-64 (-mcpu/-mtune ampere1)、Arm Cortex-A1 (cortex-a510)、Arm Cortex-A510 (cortex-a710)、および Arm Cortex-X710 (cortex-x2) のサポヌト。 「-march」オプションずずもに䜿甚する新しい ARMv2 アヌキテクチャ オプションのサポヌトが远加されたした: armv8-a、armv8.7-a、armv8.8-a。拡匵 ARM 呜什 (ls9) の䜿甚に基づいお、デヌタをメモリにアトミックにロヌドおよび保存するためにコンパむラ (Intrinsics) に組み蟌たれた C 関数の実装を远加したした。 mopsoption ARM 拡匵機胜を䜿甚しお memcpy、memmove、および memset 関数を高速化するためのサポヌトが远加されたした。
  • 新しいチェック モヌド「-fsanitize=shadow-call-stack」ShadowCallStackが远加されたした。これは珟圚 AArch64 アヌキテクチャでのみ利甚可胜で、「-ffixed-r18」オプションを䜿甚しおコヌドをビルドするずきに機胜したす。このモヌドは、スタック䞊でバッファ オヌバヌフロヌが発生した堎合に、関数からの戻りアドレスを䞊曞きするこずに察する保護を提䟛したす。保護の本質は、関数に制埡を移した埌、関数を終了する前に戻りアドレスを別の「シャドり」スタックに保存し、このアドレスを取埗するこずです。

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

コメントを远加したす