Selepas setahun pembangunan, suite pengkompil percuma GCC 14.1 telah dikeluarkan, keluaran penting pertama dalam cawangan GCC 14.x baharu. Selaras dengan skim penomboran keluaran baharu, versi 14.0 telah digunakan dalam proses pembangunan, dan sejurus sebelum keluaran GCC 14.1, cawangan GCC 15.0 telah pun bercabang, dari mana keluaran utama seterusnya, GCC 15.1, akan dibentuk.
Perubahan utama:
- Kemungkinan untuk analisis statik kod dalam bahasa C, tersedia melalui pilihan "-fanalyzer", telah diperluaskan dengan ketara (analisis statik untuk bahasa C++ masih belum dibawa ke bentuk yang sepatutnya). Analisis operasi dengan rentetan dan pemeriksaan untuk kehadiran rentetan yang menamatkan aksara nol telah diperkukuh. Menambahkan amaran baharu "-Wanalyzer-infinite-loop" untuk mengesan gelung tak terhingga. Menambahkan satu siri amaran "-Wanalyzer-tainted-*" untuk mengenal pasti masalah dengan pengesahan input. Amaran "-Wanalyzer-out-of-bounds" telah dipertingkatkan untuk mengesan limpahan penimbal, contohnya, keupayaan untuk memaparkan carta yang menggambarkan keadaan yang membawa kepada limpahan telah ditambahkan.

- Menambahkan pilihan binaan baharu “—enable-host-pie” untuk membina fail boleh laku pengkompil dalam mod PIE (Position Independent Executable), serta pilihan “—enable-host-bind-now” untuk mengikat dengan pilihan “-Wl , -z, sekarang."
- Menambahkan pilihan baharu "-fhardened" yang termasuk bendera untuk meningkatkan keselamatan (-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,kini -fstack-protector -kuat -fstack-clash-protection -fcf-protection=penuh).
- Menambahkan pilihan "-fharden-control-flow-redundancy" untuk menambah pada penghujung fungsi kod untuk mengesan beberapa bentuk tingkah laku yang tidak ditentukan yang berpotensi membawa kepada aliran kawalan yang disebabkan oleh eksploitasi yang mengubah suai penunjuk fungsi yang disimpan dalam memori dan memindahkan kawalan ke tengah daripada fungsi.
- Menambahkan atribut jenis "hardbool" baharu yang membolehkan anda mengatasi nilai yang dikaitkan dengan atribut benar dan palsu untuk menjadikan jenis serangan tertentu lebih sukar.
- Menambahkan atribut jenis tunas baharu untuk mengawal pembersihan bingkai tindanan dengan fungsi dan data berubah selepas fungsi keluar atau pengecualian dilemparkan.
- Menambah pilihan -finline-stringops untuk membolehkan pengembangan sebaris fungsi memcmp, memcpy, memmove dan memset, walaupun tidak diperlukan untuk pengoptimuman.
- Menambahkan atribut fungsi baharu null_terminated_string_arg(PARAM_IDX) untuk menandakan parameter yang harus dianggap sebagai rentetan yang ditamatkan nol.
- Vektorizer menyokong vektorisasi gelung yang mengandungi ungkapan "break".
- Menambahkan sokongan awal untuk versi awal spesifikasi OpenMP 6.0 (Open Multi-Processing) dan pelaksanaan berterusan standard OpenMP 5.0, 5.1 dan 5.2, yang mentakrifkan API dan kaedah untuk menggunakan kaedah pengaturcaraan selari pada berbilang teras dan hibrid (CPU+ Sistem GPU/DSP) dengan memori kongsi dan penvektoran blok (SIMD).
- Penambahbaikan pelaksanaan spesifikasi pengaturcaraan selari OpenACC 2.7 dan 3.2, yang mentakrifkan alatan untuk memunggah operasi pada GPU dan pemproses khusus seperti NVIDIA PTX.
- Untuk C, C++ dan Objektif-C, sokongan untuk sambungan "__has_feature" dan "__has_extension" yang digunakan dalam Clang telah dilaksanakan.
- Ciri yang ditakrifkan dalam C23 standard C akan datang dilaksanakan, seperti jenis "_BitInt (N)" dan "unsigned _BitInt (N))". Struktur, kesatuan dan penghitungan dibenarkan untuk ditakrifkan lebih daripada sekali dalam skop yang sama, boleh dilihat dengan kandungan yang sama dan teg berulang. Menambah sokongan untuk fail pengepala stdckdint.h. Bendera "-std=c23", "-std=gnu23" dan "-Wc23-c11-compat" dicadangkan untuk mendayakan sokongan untuk elemen C23.
- Untuk bahasa C, ungkapan "#pragma GCC novector" telah ditambahkan, melumpuhkan vektorisasi gelung beranotasi.
- Menambahkan ciri yang berkaitan dengan standard C++23. Sokongan tambahan untuk mekanisme "Menyimpulkan ini", yang membolehkan anda menggunakan parameter dengan atribut "ini" dalam templat dan memungkinkan untuk mengetahui dari fungsi kelas kategori ungkapan (contohnya, sama ada ia adalah pemalar ) yang mana fungsi ini dipanggil. Keperluan telah dilaksanakan, mengikut mana semua fungsi memanggil fungsi dengan atribut consteval juga menjadi consteval, i.e. dilaksanakan semasa penyusunan. Melonggarkan beberapa keperluan untuk "constexpr".
- Menambahkan ciri yang berkaitan dengan piawaian C++2c (C++26) masa hadapan. Sebagai contoh, adalah mungkin untuk menggunakan literal rentetan dalam konteks di mana ia tidak digunakan untuk memulakan tatasusunan aksara dan tidak berakhir dalam kod yang terhasil, tetapi hanya digunakan pada masa penyusunan untuk mesej diagnostik dan prapemprosesan. Menambahkan keupayaan untuk menggunakan berbilang pembolehubah pemegang tempat dengan nama "_" dalam satu skop. Penukaran tersirat bagi nilai terhitung dalam pengiraan aritmetik telah ditamatkan.
- libstdc++ telah meningkatkan sokongan untuk piawaian C++20, C++23 dan C++26.
- Dalam pengkompil Fortran, kerja telah bermula untuk menyokong standard Fortran 2023 (-std=f2023).
- Sokongan untuk sambungan GCC yang membolehkan anda menentukan elemen tatasusunan fleksibel (tatasusunan saiz tidak tentu, seperti "int b[]") bukan pada penghujung struktur (Ahli Tatasusunan Fleksibel) telah ditamatkan. Tatasusunan saiz tidak tentu hanya boleh digunakan pada penghujung struktur.
- Bahagian belakang untuk seni bina AArch64 menyokong CPU Ampere-1B (ampere1b), Arm Cortex-A520 (cortex-a520), Arm Cortex-A720 (cortex-a720), Arm Cortex-X4 (cortex-x4) dan Microsoft Cobalt-100 ( kobalt-100). Pengecam CPU generik baharu, generik-armv8-a dan generik-armv9-a, telah ditambahkan untuk digunakan dalam pilihan "-mcpu=" dan "-mtune=". Menambah sokongan untuk Arm SME dan SME2 (Sambungan Matriks Penstriman). Melaksanakan pengoptimuman khusus seni bina AArch64.
- Di bahagian belakang untuk seni bina ARM, sokongan untuk CPU Cortex-M52 telah ditambah (cortex-m52 dalam pilihan "-mcpu=" dan "-mtune=").
- Bahagian belakang penjanaan kod untuk GPU AMD Radeon (GCN) menyokong GPU AMD Radeon gfx90c (GCN5), gfx1030, gfx1036 (RDNA2), gfx1100 dan gfx1103 (RDNA3). Prestasi yang dipertingkatkan untuk peranti siri AMD MI100 dan MI200. Secara lalai, seni bina peranti gfx900 (Vega) diaktifkan.
- Sokongan untuk sambungan seni bina set arahan Intel AVX86, Intel APX (separa), Intel AVX-VNNI-INT10.1, Intel SHA16, Intel SM512, Intel SM3, Intel USER_MSR telah ditambahkan pada bahagian belakang seni bina x4.
Menambah sokongan untuk CPU AMD berdasarkan teras Zen 5 (-march=znver5), serta Intel Clearwater Forest (-march=clearwaterforest), Arrow Lake (-march=arrowlake), Arrow Lake S (-march=arrowlake-s ) pemproses, Tasik Lunar (-march=lunarlake) dan Tasik Panther (-march=pantherlake). Menambahkan pilihan "-m[no-]evex512" untuk mengawal penggunaan vektor 512-bit (didayakan secara lalai apabila menyokong AVX512F. Sokongan CPU Intel Xeon Phi telah ditamatkan.
- Keupayaan bahagian belakang untuk platform LoongArch, AVR dan RISC-V telah diperluaskan.
- Keupayaan output diagnostik dalam format SARIF, berdasarkan JSON, telah diperluaskan. Format SARIF boleh digunakan untuk mendapatkan keputusan analisis statik (GCC -fanalyzer), serta mendapatkan maklumat amaran dan ralat.
- Sokongan untuk seni bina sasaran ia64 dan nios2 yang digunakan dalam pemproses Intel Itanium dan Nios II telah ditamatkan dan akan dialih keluar dalam keluaran GCC seterusnya.
Sumber: opennet.ru

