Apre sis mwa devlopman, LLVM 22.1.0 te soti. Li devlope zouti (konpilatè, optimizeur, ak dèlko kòd) ki konpile pwogram an bitcode entèmedyè nan enstriksyon vityèl ki sanble ak RISC (yon machin vityèl nivo ba ak yon sistèm optimize milti-nivo). Psedokòd ki pwodui a ka konvèti an kòd machin pou yon platfòm sib bay oswa itilize pa yon konpilatè jis-a-tan (JIT) pou jenere enstriksyon machin dirèkteman pandan ekzekisyon pwogram nan. Baze sou teknoloji LLVM yo, pwojè a ap devlope konpilatè Clang la, ki sipòte langaj pwogramasyon C, C++, ak Objective-C yo. Apati branch 18.x la, pwojè a te chanje pou yon nouvo konplo nimewotasyon vèsyon, dapre ki vèsyon 0 ("N.0") itilize pandan devlopman, epi premye vèsyon ki estab la nimewote "N.1."
Amelyorasyon nan Clang 22 enkli:
- Te ajoute sipò pou jeton alokasyon memwa (Allocation Tokens) pou make operasyon alokasyon memwa ki fèt lè l sèvi avèk fonksyon tankou malloc ak yon idantifyan inik. Jeton alokasyon yo pèmèt estriktire enfòmasyon heap, senplifye deteksyon flit memwa, epi pèmèt gwoupman objè ki baze sou objektif yo oswa modèl modifikasyon yo (pa egzanp, separe done "cho" ak done "frèt"). Pou aktive, itilize drapo "-fsanitize=alloc-token" lan.
- Karakteristik ki gen rapò ak langaj C a:
- Yo mete an plas yon bouyon spesifikasyon ki defini mekanis ekzekisyon ranvwaye "defer" la, sa ki pèmèt aksyon yo egzekite lè dimansyon aktyèl la fini. Yo ajoute drapo "-fdefer-ts" la pou aktive sipò "defer".
- Yo ajoute fonksyon entegre __builtin_stack_address() la, ki reflete fonksyon menm jan an nan GCC. Fonksyon sa a retounen adrès pil la ki separe zòn pil fonksyon aktyèl ki te rele __builtin_stack_address() la ak fonksyon ki vin apre yo li rele yo.
- Kapasite y ap devlope pou pwochen estanda C2y la:
- Te ajoute sipò pou bouk ki gen non, ki pèmèt ou bay non pou bouk ak deklarasyon switch, ki ka espesifye nan deklarasyon break ak continue pou defini eksplisitman bouk pou sòti a. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // ale nan CONT1 continue outer; // ale nan CONT2 // CONT1 } // CONT2 }
- Yo elaji aplikasyon makro entegre "__COUNTER__" la, ki fèt pou jenere non idantifikatè inik, epi yo mete l nan estanda a. Yo fikse yon limit 2147483647 apèl pou makro sa a; si ou depase limit sa a, sa ap jenere yon erè.
- Retire avètisman an (-Wstatic-in-inline) lè w ap itilize fonksyon estatik oswa varyab andedan fonksyon ki deklare kòm "extern inline".
- Kapasite defini nan estanda C23 C a:
- Fichye header float.h la kounye a sipòte makro FLT_SNAN, DBL_SNAN, ak LDBL_SNAN yo, ki aplike valè NaN ki siyalize (ki lakòz yon eksepsyon lè yo itilize nan operasyon aritmetik) pou kalite float, double, ak long double.
- Yo korije yon pwoblèm kote diferan kalite moun san non te trete kòm konpatib nan menm inite tradiksyon an si yo te gen menm chan yo.
- Drapo "-MG" ki te itilize pou inyore fichye header ki manke pandan eskanè depandans lan te pwolonje pou direktiv "#embed" yo e kounye a li siprime erè "fichye pa jwenn" la lè yon fichye espesifye nan yon direktiv "#embed" manke.
- Karakteristik ki gen rapò ak C++:
- Yo ajoute kapasite pou itilize lyezon estriktire nan kontèks "constexpr" la, jan yo te devlope l nan spesifikasyon C++2c (C++26) la. Sa vle di ke referans a ekspresyon konstan yo kapab kounye a ekspresyon konstan. Yo aplike sipò pou etalaj ak estrikti senp (yo poko sipòte tuple). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Jan estanda C++20 la egzije sa, kounye a yo konvèti kontrent yo an fòm estanda anvan yo verifye yo, sa ki pèmèt mesaj dyagnostik ki pi egzak ak yon bon jesyon erè sibstitisyon nan agiman modèl yo itilize sèlman nan idantifikasyon konsèp yo.
- Te ajoute yon fanmi fonksyon entegre "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" pou chèche konnen si operatè konparezon "<", ">", "<=", ak ">=" yo te sentetize apati operatè "<=>" la.
- Yo chanje paramèt "-Wincompatible-pointer-types" la pou l montre yon erè olye de yon avètisman. Pou retounen nan konpòtman anvan an, sèvi ak opsyon "-Wno-error=incompatible-pointer-types" la.
- Yo ajoute fonksyon entegre __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, ak __builtin_dedup_pack. Pa egzanp, builtin_dedup_pack pèmèt ou retire kopi nan yon lis kalite: lè l sèvi avèk MyTypeList = TypeList<__builtin_dedup_pack. ...>; // kalite ki rezilta a pral TypeList
- Lè w ap debogaj konpòtman ki pa defini ak UBSan (-fsanitize=undefined -fsanitize-trap=undefined), enfòmasyon sou kòz erè a kounye a enkli nan enfòmasyon debogaj ki pwodui a. Yo te ajoute drapo "-fsanitize-debug-trap-reasons" la pou presize nivo detay nan enfòmasyon erè a. Li ka mete sou "debaz" pou deskripsyon jeneral (pa egzanp, "Adisyon antye debòde") epi "detaye" pou enkli enfòmasyon detaye (pa egzanp, "adisyon antye ki gen siy debòde nan 'a + b'").
- Te ajoute nouvo drapo konpilatè:
- "-f[no-]sanitize-debug-trap-reasons" pou kontwole si rezon eksepsyon pyèj yo entegre nan enfòmasyon debogaj lè w ap konpile ak mòd "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", ak "-fsanitize-alloc-token-extended" pou jere jeton alokasyon memwa yo.
- "-fmatrix-memory-layout" pou kontwole layout memwa kalite matris yo (pa egzanp, kolòn-major pou kolòn-major, ranje-major pou ranje-major).
- Fonksyon yo kounye a gen yon atribi "malloc_span", menm jan ak atribi malloc la men ki aplikab a fonksyon ki retounen estrikti ki sanble ak span ki gen yon pwentè ak yon chan ak gwosè a oswa yon pwentè nan fen blòk la.
- Yo te ajoute atribi "modular_format" la pou chwazi dinamikman aplikasyon fonksyon printf ki lye estatikman lè w ap lye l la.
- Yo elaji zouti dyagnostik ak analiz estatik yo, yo ajoute nouvo verifikasyon (plizyè douzèn amelyorasyon ki gen rapò ak dyagnostik).
- Yo te ajoute lòt karakteristik intrinsèk pou ekstansyon SSE, AVX, ak AVX512 yo nan backend X86 la. Yo te ajoute mòd konstriksyon pou CPU Intel ki baze sou mikwoachitekti Wildcat Lake (-march=wildcatlake) ak Nova Lake (-march=novalake).
- Kounye a, backend AArch64 la sipòte processeur Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), ak Arm C1-Ultra (c1-ultra). Yo te ajoute lòt fonksyon entegre pou enstriksyon FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], ak FCVTA[US] yo. Sipò Fonksyon Multi-Vèsyon (FMV) la te estabilize. Kounye a, itilizatè yo ka pase sou priyorite diferan vèsyon fonksyon yo.
- Te ajoute sipò pou achitekti LoongArch32 (LA32R, LA32S).
- Backend amelyore pou achitekti ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, ak PowerPC.
Sous: opennet.ru
