Sawise nem sasi pembangunan, release saka project LLVM 13.0 diwenehi - toolkit GCC-kompatibel (kompiler, optimizers lan generator kode) sing compiles program menyang bitcode penengah instruksi virtual kaya RISC (mesin virtual tingkat rendah karo a sistem optimasi multi-level). Pseudocode sing digawe bisa diowahi nggunakake compiler JIT menyang instruksi mesin langsung nalika eksekusi program.
Dandan ing Clang 13.0:
- Telpon buntut sing dijamin (nelpon subrutin ing pungkasan fungsi, nggawe rekursi buntut yen subrutin kasebut nelpon dhewe) didhukung. Telpon buntut sing dijamin didhukung nggunakake atribut "[[clang:: musttail]]" ing C++ lan "__attribute__((musttail))" ing C, digunakake ing ekspresi "bali". Fitur iki ngidini optimasi liwat kode mbukak menyang iterasi sing rata kanggo ngirit ruang tumpukan.
- Définisi atribut gaya C++ 11 saiki didhukung ing deklarasi lan ekstensi clang "nggunakake", nggunakake format "[[]]".
- Nambahake gendera "-Wreserved-identifier" kanggo menehi peringatan nalika nemtokake pengenal sing dilindhungi ing kode pangguna.
- Nambahake bendera "-Wunused-but-set-parameter" lan "-Wunused-but-set-variable" kanggo nyithak bebaya yen parameter utawa variabel disetel nanging ora digunakake.
- Ditambahake "-Wnull-pointer-subtraction" flag kanggo output bebaya yen kode bisa mimpin kanggo prilaku undefined amarga nggunakake null pointer ing operasi subtraction.
- Added "-fstack-usage" flag kanggo generate kanggo saben file kode tambahan ".su" file ngemot informasi bab ukuran pigura tumpukan kanggo saben fungsi ditetepake ing file diproses.
- Jinis output anyar wis ditambahake menyang analisa statis - "sarif-html", sing ngasilake laporan ing format HTML lan Sarif. Priksa anyar wis ditambahake allocClassWithName. Nalika nemtokake pilihan "-analyzer-display-progress", wektu analisis saben fungsi output. Analisa pointer pinter (alpha.cplusplus.SmartPtr) meh siap.
- Kapabilitas sing ditambahi sing ana gandhengane karo dhukungan OpenCL. Dhukungan ditambahake kanggo ekstensi anyar cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields lan __cl_clang_non_portable_kernel_param_types. Implementasine terus saka spesifikasi OpenCL 3.0. Kanggo C, spesifikasi OpenCL 1.2 digunakake minangka standar, kajaba versi liyane dipilih kanthi jelas. Kanggo C ++, ditambahaké support kanggo file karo extension ".clcpp".
- Dhukungan kanggo arahan transformasi daur ulang ("#pragma omp unrol" lan "#pragma omp tile") sing ditetepake ing spesifikasi OpenMP 5.1 wis ditindakake.
- Utilitas format clang wis dianyari kanthi pilihan ing ngisor iki: SpacesInLineCommentPrefix kanggo nemtokake jumlah spasi sadurunge komentar, IndentAccessModifiers, LambdaBodyIndentation, lan PPIndentWidth kanggo ngontrol keselarasan rekaman, ekspresi lambda, lan arahan preprocessor. Kemampuan kanggo ngurutake dhaptar file header (SortIncludes) wis ditambahi. Dhukungan kanggo format file JSON wis ditambahake.
- A kumpulan gedhe saka mriksa anyar wis ditambahake menyang linter clang-rapi.
Inovasi utama ing LLVM 13.0:
- Nambahake pilihan "-ehcontguard" kanggo nggunakake teknologi CET (Windows Teknologi Penegakan Aliran Kontrol) kanggo nglindhungi saka eksekusi eksploitasi sing digawe nggunakake teknik pemrograman berorientasi balik (ROP) ing tahap penanganan pengecualian.
- Proyèk debuginfo-test wis diganti jeneng dadi cross-project-tests lan dirancang kanggo nguji komponen saka macem-macem proyek, ora diwatesi kanggo informasi debug.
- Sistem mbangun nyedhiyakake dhukungan kanggo mbangun macem-macem distribusi, contone, siji karo keperluan lan liyane karo perpustakaan kanggo pangembang.
- Backend kanggo arsitektur AArch64 ngetrapake dhukungan kanggo ekstensi Armv9-A RME (Ekstensi Manajemen Realm) lan SME (Ekstensi Matriks Scalable) ing assembler.
- Dhukungan kanggo ISA V68 / HVX wis ditambahake menyang backend arsitektur Hexagon.
- Backend x86 wis nambah dhukungan kanggo prosesor AMD Zen 3.
- Dhukungan ditambahake kanggo GFX1013 RDNA2 APU menyang backend AMDGPU.
- Libc++ terus ngetrapake fitur-fitur anyar saka standar C++20 lan C++2b, kalebu ngrampungake perpustakaan "konsep". Kanggo platform kasebut Windows Dhukungan kanggo sistem berkas std::adhedhasar MinGW wis ditambahake. Berkas header wis dipisahake. , Lan Nambahake opsi build LIBCXX_ENABLE_INCOMPLETE_FEATURES kanggo mateni file header kanthi fungsi sing ora lengkap.
- Linker LLD wis ditambahi kanggo ndhukung prosesor Big-endian Aarch64, lan backend Mach-O wis apik kanggo ngidini ngubungake program biasa. Dandan sing dibutuhake kanggo ngubungake Glibc nggunakake LLD kalebu.
- Utilitas llvm-mca (Machine Code Analyzer) wis dianyari kanggo ndhukung pemroses pipa superscalar kanthi urutan kayata ARM Cortex-A55.
- Debugger LLDB kanggo platform AArch64 saiki ndhukung lengkap Pointer Authentication, mekanisme MTE (MemTag, Memory Tagging Extension), lan registrasi SVE. Printah wis ditambahaké kanggo ikatan tag kanggo saben operasi alokasi memori lan kanggo mriksa pitunjuk nalika ngakses memori, kang kudu kaiket ing tag bener.
- Debugger LLDB lan Flang frontend Fortran wis ditambahake menyang rakitan binar sing digawe proyek kasebut.
Source: opennet.ru
