ááŒá±á¬ááºáááŒá¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááŒá®ážááœáẠLLVM 22.1.0 ááᯠáá¯ááºááŒááºáá²á·áááºá áááºážááẠáááá¯ááááºáá»á¬ážááᯠRISC áá²á·ááá¯á·áá±á¬ virtual instructions (multi-level optimization system áá«ááŸááá±á¬ low-level virtual machine) á intermediate bitcode á¡ááŒá Ạcompile áá¯ááºááá·áº tools (compilers, optimizers ááŸáá·áº code generators) ááᯠáá®ááœááºáááºá áá¯ááºáá¯ááºáá¬ážáá±á¬ pseudocode ááᯠáá±ážáá¬ážáá±á¬ target platform á¡ááœáẠmachine code á¡ááŒá ẠááŒá±á¬ááºážáá²ááá¯ááºááẠááá¯á·ááá¯áẠjust-in-time (JIT) compiler á០program execution á¡ááœááºáž machine instructions áá»á¬ážááᯠááá¯ááºááá¯ááºáá¯ááºáá±ážááẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá LLVM áááºážááá¬áá»á¬ážááᯠá¡ááŒá±áá¶á á€ááá±á¬áá»ááºááẠC, C++ ááŸáá·áº Objective-C programming language áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááá·áº Clang compiler ááᯠáá®ááœááºáá±áááºá 18.x branch ááŸá áááºá ááá±á¬áá»ááºááẠrelease 0 ("N.0") ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœááºáž á¡áá¯á¶ážááŒá¯ááá·áº version numbering scheme á¡áá áºááá¯á· ááŒá±á¬ááºážáá²áá²á·ááŒá®áž ááááá¯á¶áž stable version ááᯠ"N.1" áᯠáá¶áá«ááºáááºáá¬ážáááºá
Clang 22 ááœáẠááá¯ážáááºááŸá¯áá»á¬áž áá«áááºáááºá
- malloc áá²á·ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá°ážááŒá¬ážáá±á¬ á¡ááŸááºá¡áá¬ážááŒáá·áº á¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáá±á¬ ááŸááºáá¬ááºááœá²áá±ááŸá¯áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸááºáá¬ážáááºá¡ááœáẠááŸááºáá¬ááºááœá²áá±ááŸá¯ááá¯áááºáá»á¬áž (Allocation Tokens) á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠááá·áºááœááºážáá¬ážáááºá Allocation tokens áá»á¬ážááẠheap á¡áá»ááºá¡áááºáá»á¬ážááᯠááœá²á·á ááºážááŒááºážá ááŸááºáá¬ááºááá¯á ááá·áºááŸá¯ áá±á¬ááºááŸááºážááŒááºážááᯠááá¯ážááŸááºážá á±ááŒá®áž áááºážááá¯á·á áááºááœááºáá»áẠááá¯á·ááá¯áẠááŒá¯ááŒááºááœááºážáá¶ááŸá¯áá¯á¶á á¶áá»á¬áž (á¥ááᬠ"hot" á០"cold" data) ááᯠá¡ááŒá±áá¶á á¡á¯ááºá á¯ááœá²á·ááŒááºážááᯠááœáá·áºááá¯ááºá á±áá«áááºá ááœáá·áºáááºá¡ááœáẠ"-fsanitize=alloc-token" flag ááᯠá¡áá¯á¶ážááŒá¯áá«á
- C áá¬áá¬á
áá¬ážááŸáá·áº áááºá
ááºáá±á¬ á¡ááºá¹áá«áááºáá»á¬áž-
- "defer" ááœáŸá±á·ááá¯ááºážáá¬ážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááá¹ááá¬ážááᯠáááºááŸááºááá·áº áá°ááŒááºážáááºááŸááºáá»ááºáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážááŒá áºááŒá®áž áááºááŸá scope á០ááœááºááœá¬ááœá¬ážááá·áºá¡áá« áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá "defer" áá¶á·ááá¯ážááŸá¯ááᯠááœáá·áºááẠ"-fdefer-ts" á¡áá¶ááᯠááá·áºááœááºážáá¬ážáááºá
- GCC ááŸá¬ á¡áá¬ážáá° function ááᯠáááºáááºá á±áá²á· built-in function __builtin_stack_address() ááᯠááá·áºááœááºážáá¬ážáá«áááºá áá® function á __builtin_stack_address() ááá¯á·áá±á«áºáá²á· áááºááŸá function áá²á· áá°áá±á«áºáá²á· áá±á¬ááºáááºááœá² function ááœá±áá²á· stack area ááᯠááá¯ááºážááŒá¬ážáá¬ážáá²á· stack address ááᯠááŒááºáá±ážáá«áááºá
- á¡áá¬ááẠC2y á
á¶ááŸá¯ááºážá¡ááœáẠá
áœááºážáááºáá»á¬ážááᯠáá®ááœááºáá±áááº-
- á¡áááºáá±ážáá¬ážáá±á¬ loop áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ ááá·áºááœááºážáá¬ážááŒá®áž loop áá»á¬ážááŸáá·áº switch statements áá»á¬ážááᯠá¡áááºáá»á¬áž áááºááŸááºááá¯ááºá á±áá«áááºá áááºážááá¯á·ááᯠbreak ááŸáá·áº continue statements áá»á¬ážááœáẠáááºááŸááºááŒá®áž ááœááºáááá·áº loop ááᯠááŸááºážáááºážá áœá¬ áááºááŸááºááá¯ááºáááºá outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
- áá°ážááŒá¬ážáá±á¬ á¡ááŸááºá¡áá¬ážá¡áááºáá»á¬ážááᯠáá¯ááºáá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáá±á¬ "__COUNTER__" áááºáááá¯á á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠááá¯ážáá»á²á·ááŒá®áž á á¶ááŸá¯ááºážááœáẠááá·áºááœááºážáá¬ážáááºá á€áááºáááá¯ááá¯á· áá±á«áºááá¯ááŸá¯ áááááááááá ááŒáááºá¡áá ááá·áºáááºáá»áẠáááºááŸááºáá¬ážáááºá á€ááá·áºáááºáá»ááºááᯠáá»á±á¬áºááœááºáá«á á¡ááŸá¬ážáá áºáᯠááŒá áºáá±á«áºá á±áááá·áºáááºá
- "extern inline" á¡ááŒá áºááŒá±ááŒá¬áá¬ážáá±á¬ function áá»á¬ážá¡ááœááºážááŸá static function áá»á¬áž ááá¯á·ááá¯áẠvariable áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« ááááá±ážáá»áẠ(-Wstatic-in-inline) ááᯠáááºááŸá¬ážááá¯ááºáá«áááºá
- C23 C á
á¶ááŸá¯ááºážááœáẠáááºááŸááºáá¬ážáá±á¬ á
áœááºážáá±á¬ááºáááºáá»á¬áž-
- float.h header ááá¯ááºááẠááá¯á¡áá« FLT_SNANá DBL_SNAN ááŸáá·áº LDBL_SNAN macros áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá áááºážááá¯á·ááẠfloatá double ááŸáá·áº long double á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠsignaled (ááááºážáááºá¹áá»á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá« exception áá áºáá¯ááŒá áºá á±ááá·áº) NaN áááºááá¯ážáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«áááºá
- áá°áá®áá±á¬ áá¬áá¬ááŒááºáá°áá áºá¡ááœááºážááœáẠá¡áááºááá±á¬áºááŒáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠáá°áá®áá±á¬ á¡ááœááºáá»á¬ážááŸááá«á ááœá²áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáááºáᯠáá°áááá·áº áá»áá¯á·ááœááºážáá»ááºááᯠááŒááºáááºááŒá®ážáá«ááŒá®á
- dependency scanning áá¯ááºáá±á ááºá¡ááœááºáž áá»á±á¬ááºáá¯á¶ážáá±áá±á¬ header ááá¯ááºáá»á¬ážááᯠáá»á áºáá»á°ááŸá¯áááºá¡áá¯á¶ážááŒá¯ááá·áº "-MG" flag ááᯠ"#embed" ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡áá ááá¯ážáá»á²á·áá¬ážááŒá®áž "#embed" ááœáŸááºááŒá¬ážáá»ááºááœáẠáááºááŸááºáá¬ážáá±á¬ ááá¯ááºáá áºáᯠáá»á±á¬ááºáá¯á¶ážáá±ááá·áºá¡áá« "file not found" error ááᯠááᯠááŸáááºáááºážáá±ážáá«áááºá
- C++ ááŸáá·áºáááºááá¯ááºáá±á¬á¡ááºá¹áá«áááºáá»á¬áž-
- C++2c (C++26) áááºááŸááºáá»ááºááœáẠááœá¶á·ááŒáá¯ážáá¬ááá·áºá¡ááá¯ááºáž "constexpr" context ááœáẠstructured bindings áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºá áœááºážáááºááᯠááá·áºááœááºážáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ constant expression áá»á¬ážááá¯á· áááºááœáŸááºážáá»ááºáá»á¬ážááẠááá¯á¡áá« constant expression áá»á¬ážááŒá áºááá¯ááºáááºá array áá»á¬ážááŸáá·áº ááá¯ážááŸááºážáá±á¬ááœá²á·á ááºážáá¯á¶áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ážááẠ(tuples áá»á¬ážááᯠááá±á¬ááºáá¶á·ááá±ážáá«)á constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- C++20 á á¶ááŸá¯ááºážá¡á ááá¯á¡ááºááá·áºá¡ááá¯ááºážá á á áºáá±ážááŒááºážáááŒá¯áá® ááá·áºáááºáá»ááºáá»á¬ážááᯠááá¯á¡áá« á á¶áá¯á¶á á¶ááá¯á· ááŒá±á¬ááºážáá²áá¬ážáá±á¬ááŒá±á¬áá·áºá ááá¯ááá¯áááá»áá±á¬ áá±á¬áá«ááŸá¬ááœá±áá±áž áááºáá±á·áá»áºáá»á¬ážááŸáá·áº concept-id áá»á¬ážááœááºáᬠá¡áá¯á¶ážááŒá¯ááá·áº template arguments áá»á¬ážááœáẠá¡á á¬ážááá¯ážá¡ááŸá¬ážáá»á¬ážááᯠááá·áºáá»á±á¬áºá áœá¬ ááá¯ááºááœááºááá¯ááºá á±áá«áááºá
- ááŸáá¯ááºážááŸáẠá¡á±á¬áºááá±áá¬áá»á¬áž "<", ">", "<=", ááŸáá·áº ">=" ááá¯á·ááᯠ"<=>" á¡á±á¬áºááá±áá¬á០áá±á«ááºážá ááºáá¬ážááŒááºáž ááŸáá áááŸá ááŸá¬ááœá±ááẠ"__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" á built-in function áááá¬ážá á¯ááᯠááá·áºááœááºážáá¬ážáááºá
- "-Wincompatible-pointer-types" parameter ááᯠááááá±ážáá»ááºá¡á á¬áž á¡ááŸá¬ážá¡ááœááºážáá áºáᯠááœááºááŸáá á±ááẠááŒá±á¬ááºážáá²áá¬ážáá«áááºá ááááºá¡ááŒá¯á¡áá°ááá¯á· ááŒááºááœá¬ážááẠ"-Wno-error=incompatible-pointer-types" option ááᯠá¡áá¯á¶ážááŒá¯áá«á
- built-in function áá»á¬ážááŒá áºááá·áº __builtin_bswapg, __builtin_elementwise_ldex, __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 ááŸáá·áº __builtin_dedup_pack ááá¯á·ááᯠááá·áºááœááºážáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá builtin_dedup_pack ááẠMyTypeList = TypeList<__builtin_dedup_pack ááá¯á¡áá¯á¶ážááŒá¯á á¡áá»áá¯ážá¡á á¬ážá á¬áááºážá០áááºáá±áááºáá»á¬ážááᯠáááºááŸá¬ážááœáá·áºááŒá¯áááºá âŠ>; // ááá¬áá²á· type á TypeList ááŒá áºáááá·áºáááº
- UBSan (-fsanitize=undefined -fsanitize-trap=undefined) ááŒáá·áº undefined behavior ááᯠdebug áá¯ááºááá·áºá¡áá«á error cause information ááᯠgenerated debug information ááœáẠááá·áºááœááºážáá¬ážáá«áááºá error information ááœáẠá¡áá±ážá áááºá¡ááá·áºááᯠáááºááŸááºááẠ"-fsanitize-debug-trap-reasons" flag ááᯠááá·áºááœááºážáá¬ážáá«áááºá á¡ááœá±ááœá±áá±á¬áºááŒáá»ááºáá»á¬ážá¡ááœáẠ"basic" (á¥ááᬠ"Integer addition overflowed") ááŸáá·áº á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážáá«áááºááẠ"detailed" (á¥ááᬠ"signed integer addition overflow in 'a + b'") áᯠáááºááŸááºááá¯ááºáá«áááºá
- á¡áá
áºááá·áºááœááºážáá¬ážáá±á¬ compiler á¡áá¶áá»á¬áž-
- "-fsanitize-trap" áá¯ááºááŒáá·áº á á¯á ááºážááá·áºá¡áá« exception trap á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááᯠdebug á¡áá»ááºá¡áááºááœáẠááá·áºááœááºážáá¬ážááŒááºáž ááŸáá áááŸáááᯠááááºážáá»á¯ááºááẠ"-f[no-]sanitize-debug-trap-reasons"á
- ááŸááºáá¬ááºááœá²áá±ááŸá¯ááá¯áááºáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááẠ"-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi" ááŸáá·áº "-fsanitize-alloc-token-extended"á
- áááºááá áºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá ááŸááºáá¬ááºá¡ááŒááºá¡áááºááᯠááááºážáá»á¯ááºááẠ"-fmatrix-memory-layout" (á¥ááá¬- column-major á¡ááœáẠcolumn-majorá row-major á¡ááœáẠrow-major)á
- áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠááá¯á¡áá« "malloc_span" attribute ááŸáááŒá®áž áááºážááẠmalloc attribute ááŸáá·áºáááºáá°áá±á¬áºáááºáž pointer áá«áááºááá·áº span áá²á·ááá¯á·áá±á¬ááœá²á·á ááºážáá¯á¶áá»á¬ážááŸáá·áº block áá¡áá¯á¶ážááá¯á· á¡ááœááºá¡á á¬áž ááá¯á·ááá¯áẠpointer áá«ááŸááá±á¬ field áá áºáá¯ááᯠááŒááºáá±ážááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááœáẠáááºááá¯ááºáá«áááºá
- ááá·áºááºáá»áááºáá»áááºááœáẠprintf function á ááá¯á¡ááºáá±á¬ statically linked implementation ááᯠdynamically ááœá±ážáá»ááºáááºá¡ááœáẠ"modular_format" attribute ááᯠááá·áºááœááºážáá¬ážáááºá
- áá±á¬áá«ááŸá¬ááœá±áá±ážááŸáá·áº static analysis tools áá»á¬ážááᯠááá¯ážáá»á²á·áá¬ážááŒá®ážá á á áºáá±ážááŸá¯á¡áá áºáá»á¬ážááᯠááá·áºááœááºážáá¬ážááẠ(áá±á¬áá«ááŸá¬ááœá±áá±ážááŸáá·áº áááºá ááºáá±á¬ ááá¯ážáááºááŸá¯ áááºááááºážáá»á¬ážá áœá¬)á
- X86 backend ááŸá¬ SSEá AVX áá²á· AVX512 extension ááœá±á¡ááœáẠintrinsics ááœá±ááᯠáááºááá·áºáá¬ážááŒá®ážáá«ááŒá®á Wildcat Lake (-march=wildcatlake) áá²á· Nova Lake (-march=novalake) microarchitectures ááœá±ááᯠá¡ááŒá±áá¶áá¬ážáá²á· Intel CPU ááœá±á¡ááœáẠBuild mode ááœá±ááᯠáááºááá·áºáá¬ážáá«ááŒá®á
- AArch64 backend ááẠAmpere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) ááŸáá·áº Arm C1-Ultra (c1-ultra) áááá¯áááºáá¬áá»á¬ážááᯠááá¯á¡áá« áá¶á·ááá¯ážáá±ážáá«áááºá FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] ááŸáá·áº FCVTA[US] ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááœáẠá¡ááá¯áá±á¬ááºáž built-in áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááá·áºááœááºážáá¬ážáá«áááºá Function Multi-Versioning (FMV) áá¶á·ááá¯ážááŸá¯ááᯠáááºááŒáááºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáá«áááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠááá¯á¡áá« ááá°áá®áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá¬ážááŸááºážáá»á¬ážá áŠážá á¬ážáá±ážááŸá¯ááᯠoverride áá¯ááºááá¯ááºáá«áááºá
- LoongArch32 (LA32Rá LA32S) áááá¯áá¬á¡ááœáẠáá¶á·ááá¯ážááŸá¯ ááá·áºááœááºážáá¬ážáááºá
- ARMá AMDGPUá RISC-Vá LoongArch64á MIPSá WebAssembly ááŸáá·áº PowerPC áááá¯áá¬áá»á¬ážá¡ááœáẠbackend áá»á¬áž ááá¯ážáááºáá±á¬ááºážááœááºáá¬áá«áááºá
source: opennet.ru
