Setelah satu tahun pengembangan, rangkaian kompiler gratis GCC 14.1 telah dirilis, rilis signifikan pertama di cabang GCC 14.x yang baru. Sesuai dengan skema penomoran rilis baru, versi 14.0 digunakan dalam proses pengembangan, dan sesaat sebelum rilis GCC 14.1, cabang GCC 15.0 telah bercabang, dari mana rilis besar berikutnya, GCC 15.1, akan dibentuk.
Perubahan besar:
- Kemungkinan untuk analisis statis kode dalam bahasa C, tersedia melalui opsi “-fanalyzer”, telah diperluas secara signifikan (analisis statis untuk bahasa C++ belum dibawa ke bentuk yang tepat). Analisis operasi dengan string dan pemeriksaan keberadaan karakter nol yang mengakhiri string telah diperkuat. Menambahkan peringatan baru "-Wanalyzer-infinite-loop" untuk mendeteksi loop tak terbatas. Menambahkan serangkaian peringatan "-Wanalyzer-tainted-*" untuk mengidentifikasi masalah dengan validasi input. Peringatan "-Wanalyzer-out-of-bounds" telah ditingkatkan untuk mendeteksi buffer overflow, misalnya, kemampuan untuk menampilkan grafik yang memvisualisasikan keadaan yang menyebabkan overflow telah ditambahkan.

- Menambahkan opsi build baru “—enable-host-pie” untuk membuat file compiler yang dapat dieksekusi dalam mode PIE (Position Independent Executable), serta opsi “—enable-host-bind-now” untuk mengikat dengan opsi “-Wl , -z, sekarang."
- Menambahkan opsi baru "-fhardened" yang menyertakan tanda untuk meningkatkan keamanan (-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector -kuat -fstack-clash-protection -fcf-protection=penuh).
- Menambahkan opsi "-fharden-control-flow-redundancy" untuk ditambahkan ke akhir fungsi kode guna mendeteksi beberapa bentuk perilaku tidak terdefinisi yang berpotensi menyebabkan aliran kontrol yang disebabkan oleh eksploitasi yang mengubah penunjuk fungsi yang tersimpan di memori dan mentransfer kontrol ke tengah dari fungsi-fungsi tersebut.
- Menambahkan atribut tipe "hardbool" baru yang memungkinkan Anda mengganti nilai yang terkait dengan atribut benar dan salah untuk mempersulit jenis serangan tertentu.
- Menambahkan atribut tipe strub baru untuk mengontrol pembersihan bingkai tumpukan dengan fungsi dan data variabel setelah fungsi keluar atau pengecualian dilemparkan.
- Menambahkan opsi -finline-stringops untuk mengaktifkan perluasan inline fungsi memcmp, memcpy, memmove, dan memset, bahkan saat tidak diperlukan untuk pengoptimalan.
- Menambahkan atribut fungsi baru null_terminated_string_arg(PARAM_IDX) untuk menandai parameter yang harus diperlakukan sebagai string yang diakhiri dengan null.
- Vectorizer mendukung vektorisasi loop yang berisi ekspresi “break”.
- Menambahkan dukungan awal untuk versi awal spesifikasi OpenMP 6.0 (Open Multi-Processing) dan implementasi lanjutan dari standar OpenMP 5.0, 5.1 dan 5.2, yang mendefinisikan API dan metode untuk menerapkan metode pemrograman paralel pada multi-core dan hybrid (CPU+ Sistem GPU/DSP) dengan memori bersama dan vektorisasi blok (SIMD).
- Peningkatan implementasi spesifikasi pemrograman paralel OpenACC 2.7 dan 3.2, yang menentukan alat untuk operasi pembongkaran pada GPU dan prosesor khusus seperti NVIDIA PTX.
- Untuk C, C++ dan Objective-C, dukungan untuk ekstensi “__has_feature” dan “__has_extension” yang digunakan di Clang telah diterapkan.
- Fitur yang ditentukan di masa depan C-standar C23 diimplementasikan, seperti tipe “_BitInt (N)” dan “unsigned _BitInt (N))”. Struktur, gabungan, dan enumerasi diperbolehkan untuk didefinisikan lebih dari satu kali dalam cakupan yang sama, terlihat dengan konten yang sama dan tag berulang. Menambahkan dukungan untuk file header stdckdint.h. Bendera "-std=c23", "-std=gnu23" dan "-Wc23-c11-compat" disarankan untuk mengaktifkan dukungan untuk elemen C23.
- Untuk bahasa C, ekspresi “#pragma GCC novector” telah ditambahkan, menonaktifkan vektorisasi loop beranotasi.
- Menambahkan fitur yang terkait dengan standar C++23. Menambahkan dukungan untuk mekanisme "Menyimpulkan ini", yang memungkinkan Anda menggunakan parameter dengan atribut "ini" di templat dan memungkinkan untuk mengetahui kategori ekspresi dari fungsi kelas (misalnya, apakah itu konstanta ) untuk mana fungsi ini dipanggil. Persyaratan telah diterapkan, yang menurutnya semua fungsi yang memanggil fungsi dengan atribut consteval juga menjadi consteval, yaitu. dieksekusi selama kompilasi. Melonggarkan beberapa persyaratan untuk "constexpr".
- Menambahkan fitur yang terkait dengan standar C++2c (C++26) masa depan. Misalnya, dimungkinkan untuk menggunakan literal string dalam konteks di mana literal tersebut tidak digunakan untuk menginisialisasi array karakter dan tidak dimasukkan ke dalam kode yang dihasilkan, tetapi hanya digunakan pada waktu kompilasi untuk pesan diagnostik dan prapemrosesan. Menambahkan kemampuan untuk menggunakan beberapa variabel placeholder dengan nama “_” dalam satu cakupan. Konversi implisit dari nilai yang disebutkan dalam perhitungan aritmatika sudah tidak digunakan lagi.
- libstdc++ telah meningkatkan dukungan untuk standar C++20, C++23 dan C++26.
- Di kompiler Fortran, pekerjaan telah dimulai untuk mendukung standar Fortran 2023 (-std=f2023).
- Dukungan untuk ekstensi GCC yang memungkinkan Anda menentukan elemen array fleksibel (array dengan ukuran tak tentu, seperti "int b[]") bukan di akhir struktur (Anggota Array Fleksibel) sudah tidak digunakan lagi. Array dengan ukuran tidak terbatas hanya dapat digunakan di akhir struktur.
- Backend untuk arsitektur AArch64 mendukung 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). Pengidentifikasi CPU generik baru, generic-armv8-a dan generic-armv9-a, telah ditambahkan untuk digunakan dalam opsi “-mcpu=” dan “-mtune=”. Menambahkan dukungan untuk Arm SME dan SME2 (Streaming Matrix Extensions). Mengimplementasikan pengoptimalan khusus arsitektur AArch64.
- Di backend untuk arsitektur ARM, dukungan untuk CPU Cortex-M52 telah ditambahkan (cortex-m52 dalam opsi “-mcpu=” dan “-mtune=”).
- Backend pembuatan kode untuk GPU AMD Radeon (GCN) mendukung GPU AMD Radeon gfx90c (GCN5), gfx1030, gfx1036 (RDNA2), gfx1100 dan gfx1103 (RDNA3). Peningkatan kinerja untuk perangkat seri AMD MI100 dan MI200. Secara default, arsitektur perangkat gfx900 (Vega) diaktifkan.
- Dukungan untuk Intel AVX86, Intel APX (parsial), Intel AVX-VNNI-INT10.1, Intel SHA16, Intel SM512, Intel SM3, ekstensi arsitektur set instruksi Intel USER_MSR telah ditambahkan ke backend arsitektur x4.
Menambahkan dukungan untuk CPU AMD berdasarkan inti Zen 5 (-march=znver5), serta Intel Clearwater Forest (-march=clearwaterforest), Arrow Lake (-march=arrowlake), Arrow Lake S (-march=arrowlake-s ) pengolah, Lunar Lake (-march=lunarlake) dan Panther Lake (-march=pantherlake). Menambahkan opsi "-m[no-]evex512" untuk mengontrol penggunaan vektor 512-bit (diaktifkan secara default saat mendukung AVX512F. Dukungan CPU Intel Xeon Phi sudah tidak digunakan lagi.
- Kemampuan backend untuk platform LoongArch, AVR dan RISC-V telah diperluas.
- Kemampuan keluaran diagnostik dalam format SARIF, berdasarkan JSON, telah diperluas. Format SARIF dapat digunakan untuk memperoleh hasil analisis statis (GCC -fanalyzer), serta memperoleh informasi peringatan dan kesalahan.
- Dukungan untuk arsitektur target ia64 dan nios2 yang digunakan pada prosesor Intel Itanium dan Nios II sudah tidak digunakan lagi dan akan dihapus pada rilis GCC berikutnya.
Sumber: opennet.ru

