Ngaleupaskeun suite kompiler LLVM 16.0

Sanggeus genep bulan pangwangunan, sékrési proyék LLVM 16.0 dibere - a toolkit GCC-cocog (compilers, optimizers sarta generator kode) nu compiles program kana bitcode panengah instruksi maya RISC-kawas (mesin virtual tingkat low kalawan a sistem optimasi multi-tingkat). Pseudocode nu dihasilkeun bisa dirobah maké JIT compiler kana parentah mesin langsung dina waktu palaksanaan program.

Perbaikan utama dina Clang 16.0:

  • Standar C ++ / ObjC ++ nyaéta gnu ++ 17 (saméméhna gnu ++ 14), nu hartina fitur C ++ 17 kalawan ekstensi GNU dirojong sacara standar. Pikeun mulangkeun kabiasaan saméméhna, anjeun tiasa nganggo pilihan "-std = gnu ++ 14".
  • Dilaksanakeun fitur canggih patali jeung standar C++ 20:
    • Fungsi anggota husus anu teu penting,
    • nangkep beungkeutan terstruktur dina fungsi lambda,
    • Operator sarua jero ekspresi,
    • Pilihan pikeun ngaleungitkeun kecap konci typename dina sababaraha konteks,
    • Initialization agrégat valid dina kurung ("Aggr(val1, val2)").
  • Fitur anu ditetepkeun dina standar C++ 2b ka hareup parantos dilaksanakeun:
    • Diidinan nempatkeun labél dina tungtung éksprési majemuk,
    • operator statik (),
    • operator statik [],
    • Kasaluyuan sareng jinis char8_t dipastikeun,
    • Rentang karakter anu diidinan dianggo dina "\N{...}" parantos dilegaan
    • Ditambahkeun kamampuan ngagunakeun variabel anu dinyatakeun salaku "constexpr statik" dina fungsi anu dinyatakeun salaku constexpr.
  • Fitur anu ditetepkeun dina C2x standar C-standar ka hareup parantos dilaksanakeun:
    • Pikeun nganonaktipkeun peringatan "-Wunused-label", atribut "[[meureun_unused]]" diidinan diterapkeun kana labél
    • Diidinan nempatkeun labél di mana waé dina éksprési majemuk,
    • Nambahkeun typeof sareng typeof_unqual operator,
    • Nullptr_t tipe anyar jeung konstanta nullptr pikeun nangtukeun null pointers nu bisa ngarobah kana sagala jenis pointer tur ngagambarkeun varian null nu teu kabeungkeut integer jeung void * tipe.
    • Dina modeu C2x, nelepon va_start makro kalayan jumlah variabel argumen (variadic) diwenangkeun.
  • Dina modeu patuh C99, C11, sareng C17, pilihan standar "-Wimplicit-function-declaration" sareng "-Wimplicit-int" ayeuna ngahasilkeun kasalahan tinimbang peringatan.
  • Pamakéan teu langsung "void *" (misalna "void func(void *p) {*p;}") dina modeu C++ ayeuna ngahasilkeun kasalahan, sarupa jeung ISO C++, GCC, ICC jeung MSVC.
  • Nangtukeun bitfields salaku operands instruksi (misalna "__asm ​​​​{mov eax, s.bf}") dina blok assembly inline gaya Microsoft ayeuna ngahasilkeun kasalahan.
  • Ditambahkeun diagnostik pikeun ayana struktur sareng union anu béda-béda kalayan nami anu sami dina modul anu béda.
  • Kamampuhan anu aya hubunganana sareng dukungan OpenCL sareng OpenMP parantos dilegakeun. Diagnostik ningkat pikeun témplat C ++ anu dianggo dina argumen kernel OpenCL. Ningkatkeun rojongan blok antrian pikeun AMDGPU. Atribut nounwind sacara implisit ditambahkeun kana sadaya fungsi. Ningkatkeun dukungan pikeun fungsi anu diwangun.
  • Ditambahkeun kamampuan ngagunakeun variabel lingkungan CLANG_CRASH_DIAGNOSTICS_DIR pikeun nangtukeun diréktori dimana data diagnostik kacilakaan disimpen.
  • Pangrojong Unicode parantos diropéa kana spésifikasi Unicode 15.0. Sababaraha simbol matematik diidinan dina idéntifikasi, sapertos "₊" (contona "xₖ₊₁ ganda").
  • Ditambahkeun dukungan pikeun ngamuat sababaraha file konfigurasi (file konfigurasi standar dimuat heula, teras anu ditunjuk ku bendera "--config=", anu ayeuna tiasa ditetepkeun sababaraha kali). Ngarobah urutan loading standar file konfigurasi: clang nyoba muka file munggaran - .cfg, sarta lamun teu kapanggih eta nyoba muka dua file .cfg jeung .cfg. Pikeun nganonaktipkeun loading file konfigurasi sacara standar, bendera "--no-default-config" geus ditambahkeun.
  • Pikeun mastikeun ngawangun anu tiasa diulang, anjeun tiasa ngagentos nilai tanggal sareng waktos ayeuna dina makro __DATE__, __TIME__ sareng __TIMESTAMP__ sareng waktos anu ditangtukeun dina variabel lingkungan SOURCE_DATE_EPOCH.
  • Pikeun pariksa ayana fungsi diwangun-di (builtin) nu bisa dipaké dina konteks konstanta, makro "__has_constexpr_builtin" geus ditambahkeun.
  • Ditambahkeun bandéra kompilasi anyar "-fcoro-aligned-allocation" pikeun alokasi pigura coroutine anu dijajarkeun.
  • Bandéra "-fstrict-flex-arrays =" implements rojongan pikeun tingkat katilu verifikasi elemen Asép Sunandar Sunarya fléksibel dina struktur (Anggota Fléksibel Array, hiji Asép Sunandar Sunarya ti ukuran teu katangtu dina tungtung struktur). Dina tingkat katilu, ngan ukuran "[]" (contona, "int b[]") dianggap salaku array fléksibel, tapi ukuran "[0]" (contona, "int b[0]") anu teu.
  • Ditambahkeun bendera "-fmodule-output" pikeun ngaktipkeun modél kompilasi fase tunggal pikeun modul C ++ standar.
  • Ditambahkeun "-Rpass-analysis = stack-frame-layout" mode pikeun mantuan ngadiagnosa masalah sareng perenah pigura tumpukan.
  • Nambahkeun atribut anyar __attribute__((target_version( "cpu_features"))) jeung ngalegaan pungsionalitas atribut __attribute__((target_clones("cpu_features1", "cpu_features2",...))) pikeun milih versi husus tina fitur disadiakeun ku AArch64 CPUs.
  • Alat diagnostik dimekarkeun:
    • Ditambahkeun warning "-Wsingle-bit-bitfield-constant-konversi" pikeun ngadeteksi truncation implisit nalika assigning hiji ka bitfield ditandatanganan single-bit.
    • Diagnostik variabel constexpr uninitialized geus dimekarkeun.
    • Ditambahkeun "-Wcast-fungsi-tipe-ketat" jeung "-Wincompatible-fungsi-pointer-tipe-ketat" warnings pikeun ngaidentipikasi masalah poténsi kalayan jenis fungsi casting.
    • Diagnostik tambahan pikeun ngagunakeun nami modul anu salah atanapi ditangtayungan dina blok ékspor.
    • Ningkatkeun deteksi kecap konci "otomatis" anu leungit dina definisi.
    • Palaksanaan peringatan "-Winteger-overflow" parantos nambihan cek pikeun kaayaan tambahan anu nyababkeun overflows.
  • Rojongan pikeun LoongArch instruksi arsitéktur set (-march = loongarch64 atanapi -march = la464), dipaké dina Loongson 3 5000 prosesor sarta ngalaksanakeun RISC Isa anyar, sarupa jeung MIPS na RISC-V, geus dilaksanakeun.

Inovasi konci dina LLVM 16.0:

  • Kode LLVM diwenangkeun ngagunakeun elemen didefinisikeun dina standar C ++ 17.
  • Sarat lingkungan pikeun ngawangun LLVM parantos ningkat. Alat ngawangun ayeuna kedah ngadukung standar C ++ 17, nyaéta. Pikeun ngawangun, anjeun peryogi sahenteuna GCC 7.1, Clang 5.0, Apple Clang 10.0 atanapi Visual Studio 2019 16.7.
  • Backend pikeun arsitéktur AArch64 nambihan rojongan pikeun Cortex-A715, Cortex-X3 na Neoverse V2 CPUs, assembler pikeun RME MEC (Memori Énkripsi Konteks), ekstensi Armv8.3 (Jumlah kompléks) jeung Fungsi Multi Versioning.
  • Dina backend pikeun arsitéktur ARM, dukungan pikeun platform target Armv2, Armv2A, Armv3 sareng Armv3M parantos dileungitkeun, dimana generasi kodeu anu leres henteu dijamin. Ditambahkeun kamampuhan pikeun ngahasilkeun kode pikeun parentah pikeun gawé bareng wilangan kompléks.
  • Backend pikeun arsitéktur X86 geus ditambahkeun rojongan pikeun instruksi set arsitektur (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Ditambahkeun dukungan pikeun RDMSRLIST, RMSRLIST sareng petunjuk WRMSRNS. Pilihan dilaksanakeun "-mcpu = raptorlake", "-mcpu = meteorlake", "-mcpu = emeraldrapids", "-mcpu = sierraforest", "-mcpu = graniterapids" jeung "-mcpu = grandridge".
  • Ditambahkeun dukungan resmi pikeun platform LoongArch.
  • Ningkatkeun backends pikeun arsitéktur MIPS, PowerPC sareng RISC-V
  • Ditambahkeun dukungan pikeun debugging executable 64-bit pikeun arsitektur LoongArch ka debugger LLDB. Ningkatkeun penanganan lambang debug COFF. Disayogikeun nyaring duplikat DLL dina daptar modul Windows anu dimuat.
  • Dina perpustakaan Libc ++, karya utama fokus kana palaksanaan rojongan pikeun fitur anyar tina standar C ++ 20 jeung C ++ 23.
  • Linker LDD nyata ngurangan waktu linking ku parallelizing scanning relokasi alamat jeung operasi initialization bagian. Ditambahkeun dukungan pikeun komprési bagian nganggo algoritma ZSTD.

sumber: opennet.ru

Tambahkeun komentar