เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต LLVM 22

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบปเบเป€เบ”เบทเบญเบ™, LLVM 22.1.0 เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ. เบกเบฑเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบท (เบ•เบปเบงเบฅเบงเบšเบฅเบงเบก, เบ•เบปเบงเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เปเบฅเบฐเบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”) เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเป‚เบ›เบฃเปเบเบฃเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบดเบ”เป‚เบ„เบ”เบฅเบฐเบ”เบฑเบšเบเบฒเบ‡เบ‚เบญเบ‡เบ„เบณเบชเบฑเปˆเบ‡เป€เบชเบกเบทเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบš RISC (เป€เบ„เบทเปˆเบญเบ‡เป€เบชเบกเบทเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเบณเบ—เบตเปˆเบกเบตเบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบฅเบฐเบ”เบฑเบš). เบฅเบฐเบซเบฑเบ”เบ›เบญเบกเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบชเบณเบฅเบฑเบšเปเบžเบฅเบ”เบŸเบญเบกเป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰ เบซเบผเบท เบ™เบณเปƒเบŠเป‰เป‚เบ”เบเบ•เบปเบงเบฅเบงเบšเบฅเบงเบก just-in-time (JIT) เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เบณเบชเบฑเปˆเบ‡เป€เบ„เบทเปˆเบญเบ‡เป‚เบ”เบเบเบปเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ›เบฃเปเบเบฃเบก. เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป€เบ—เบฑเบเป‚เบ™เป‚เบฅเบขเบต LLVM, เป‚เบ„เบ‡เบเบฒเบ™เบเบณเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบปเบงเบฅเบงเบšเบฅเบงเบก Clang, เบฎเบญเบ‡เบฎเบฑเบšเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฃเปเบเบฃเบก C, C++, เปเบฅเบฐ Objective-C. เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบชเบฒเบ‚เบฒ 18.x, เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰เปเบœเบ™เบเบฒเบ™เปเบฒเบเป€เบฅเบเบฅเบธเป‰เบ™เปƒเปเปˆ, เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบ›เปˆเบญเบ 0 ("N.0") เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบฅเบฐเบฅเบธเป‰เบ™เบ—เบตเปˆเปเบฑเป‰เบ™เบ„เบปเบ‡เบ—เบณเบญเบดเบ”เบกเบตเปเบฒเบเป€เบฅเบ "N.1."

เปƒเบ™เบšเบฑเบ™เบ”เบฒเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบ™ Clang 22:

  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเปœเบฑเบšเบชเบฐเปœเบนเบ™เบชเบณเบฅเบฑเบšเป‚เบ—เป€เบ„เบฑเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ (เป‚เบ—เป€เบ„เบฑเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™) เบชเบณเบฅเบฑเบšเบเบฒเบ™เปเบฒเบเบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™ malloc เบ”เป‰เบงเบเบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ. เป‚เบ—เป€เบ„เบฑเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™ heap, เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบเบงเบ”เบซเบฒเบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบผเบ‚เบญเบ‡เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™, เปเบฅเบฐ เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบˆเบฑเบ”เบเบธเปˆเบกเบงเบฑเบ”เบ–เบธเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡ เบซเบผเบท เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™ (เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เปเบเบเบ‚เปเป‰เบกเบนเบ™ "เบฎเป‰เบญเบ™" เบˆเบฒเบ "เป€เบขเบฑเบ™"). เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™, เปƒเบซเป‰เปƒเบŠเป‰เบ—เบธเบ‡ "-fsanitize=alloc-token".
  • เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบžเบฒเบชเบฒ C:
    • เบฎเปˆเบฒเบ‡เบ‚เปเป‰เบเบณเบ™เบปเบ”เบ—เบตเปˆเบเบณเบ™เบปเบ”เบเบปเบ™เป„เบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒ "เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒ" เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเป‰เบง, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบเบฒเบ™เบเบฐเบ—เบณเบ•เปˆเบฒเบ‡เป†เป€เบกเบทเปˆเบญเบ‚เบญเบšเป€เบ‚เบ”เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบญเบญเบเบˆเบฒเบเบฅเบฐเบšเบปเบš. เบ—เบธเบ‡ "-fdefer-ts" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเบกเบฒเป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš "เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒ".
    • เบŸเบฑเบ‡เบŠเบฑเบ™ __builtin_stack_address() เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฒเบžเป‰เบญเบกเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเบกเบฒเปเบฅเป‰เบง, เป€เบŠเบดเปˆเบ‡เบชเบฐเบ—เป‰เบญเบ™เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เปƒเบ™ GCC. เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เบตเปˆเบขเบนเปˆ stack เบ—เบตเปˆเปเบเบเบžเบทเป‰เบ™เบ—เบตเปˆ stack เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ __builtin_stack_address() เปเบฅเบฐเบŸเบฑเบ‡เบŠเบฑเบ™เบ•เปเปˆเป†เบกเบฒเบ—เบตเปˆเบกเบฑเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰.
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเปเบฒเบฅเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C2y เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”:
    • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเปœเบฑเบšเบชเบฐเปœเบนเบ™เบชเบณเบฅเบฑเบš loops เบ—เบตเปˆเบกเบตเบŠเบทเปˆ, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบณเบ™เบปเบ”เบŠเบทเปˆเปƒเบซเป‰เบเบฑเบš loops เปเบฅเบฐ switch statements, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเป„เบ”เป‰เปƒเบ™ break เปเบฅเบฐ continue statements เป€เบžเบทเปˆเบญเบเบณเบ™เบปเบ” loop เบ—เบตเปˆเบˆเบฐเบญเบญเบเบˆเบฒเบ loop เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // เป„เบ›เบ—เบตเปˆ CONT1 continue outer; // เป„เบ›เบ—เบตเปˆ CONT2 // CONT1 } // CONT2 }
    • เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฒเป‚เบ„เบฃ "__COUNTER__" เปƒเบ™เบ•เบปเบง, เบ—เบตเปˆเบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบŠเบทเปˆเบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบ เปเบฅเบฐ เบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เบ‚เบตเบ”เบˆเบณเบเบฑเบ”เบเบฒเบ™เป‚เบ—เบซเบฒเบกเบฒเป‚เบ„เบฃเบ™เบตเป‰ 2147483647 เบ„เบฑเป‰เบ‡เป„เบ”เป‰เบ–เบทเบเบเบณเบ™เบปเบ”เป„เบงเป‰; เบเบฒเบ™เป€เบเบตเบ™เบ‚เบตเบ”เบˆเบณเบเบฑเบ”เบ™เบตเป‰เบˆเบฐเบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”.
    • เบฅเบถเบšเบ„เบณเป€เบ•เบทเบญเบ™ (-Wstatic-in-in-line) เป€เบกเบทเปˆเบญเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบ„เบปเบ‡เบ—เบตเปˆ เบซเบผเบท เบ•เบปเบงเปเบ›เบžเบฒเบเปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ›เบฐเบเบฒเบ”เป€เบ›เบฑเบ™ "external inline".
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C23 C:
    • เป„เบŸเบฅเปŒเบซเบปเบงเบ‚เปเป‰ float.h เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบฎเบญเบ‡เบฎเบฑเบšเบกเบฒเป‚เบ„เบฃ FLT_SNAN, DBL_SNAN, เปเบฅเบฐ LDBL_SNAN, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปˆเบฒ NaN เบ—เบตเปˆเบกเบตเบชเบฑเบ™เบเบฒเบ™ (เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เป€เบกเบทเปˆเบญเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”) เบชเบณเบฅเบฑเบšเบ›เบฐเป€เบžเบ” float, double, เปเบฅเบฐ long double.
    • เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบŠเบทเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเปˆเบฒเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบžเบฒเบเปƒเบ™เบซเบปเบงเปœเปˆเบงเบเบเบฒเบ™เปเบ›เบžเบฒเบชเบฒเบ”เบฝเบงเบเบฑเบ™ เบ–เป‰เบฒเบžเบงเบเบกเบฑเบ™เบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™.
    • เบ—เบธเบ‡ "-MG" เบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบšเปเปˆเบชเบปเบ™เปƒเบˆเป„เบŸเบฅเปŒเบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเบฐเปเบเบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเป„เบ›เบชเบนเปˆเบ„เบณเบชเบฑเปˆเบ‡ "#embed" เปเบฅเบฐเบ”เบฝเบงเบ™เบตเป‰เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” "เบšเปเปˆเบžเบปเบšเป„เบŸเบฅเปŒ" เป€เบกเบทเปˆเบญเป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ„เบณเบชเบฑเปˆเบ‡ "#embed" เบซเบฒเบเป„เบ›.
  • เบ„เบธเบ™โ€‹เบ™เบฐโ€‹เบชเบปเบกโ€‹เบšเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบเปˆเบฝเบงโ€‹เบ‚เป‰เบญเบ‡ C++โ€‹:
    • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปƒเบ™เบšเปเบฅเบดเบšเบปเบ” "constexpr", เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบ‚เปเป‰เบเบณเบ™เบปเบ” C++2c (C++26), เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเบกเบฒ. เบ™เบตเป‰เปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ™เบดเบžเบปเบ”เบ„เบปเบ‡เบ—เบตเปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ™เบดเบžเบปเบ”เบ„เบปเบ‡เบ—เบตเปˆเป„เบ”เป‰. เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเปเบกเปˆเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบณเบฅเบฑเบšเบญเบฒเป€เบฃ เปเบฅเบฐ เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‡เปˆเบฒเบเป† (tuples เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • เบ•เบฒเบกเบ—เบตเปˆเป„เบ”เป‰เบเบณเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C++20, เบ‚เปเป‰เบˆเบณเบเบฑเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบเบงเบ”เบชเบญเบš, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ‚เปเป‰เบ„เบงเบฒเบกเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเบ–เบทเบเบ•เป‰เบญเบ‡เบซเบผเบฒเบเบ‚เบถเป‰เบ™ เปเบฅเบฐ เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ—เบตเปˆเป€เปเบฒเบฐเบชเบปเบกเปƒเบ™เบญเบฒเบเบดเบงเป€เบกเบฑเบ™เปเบกเปˆเปเบšเบšเบ—เบตเปˆเปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™ concept-ids.
    • เป„เบ”เป‰เป€เบžเบตเปˆเบกเบเบธเปˆเบกเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฒเบžเป‰เบญเบกเปเบฅเป‰เบง "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบงเปˆเบฒเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš "<", ">", "<=", เปเบฅเบฐ ">=" เป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบ„เบฒเบฐเบกเบฒเบˆเบฒเบเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ "<=>" เบซเบผเบทเบšเปเปˆ.
    • เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต "-Wincompatible-pointer-types" เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เบณเป€เบ•เบทเบญเบ™. เป€เบžเบทเปˆเบญเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบžเบถเบ”เบ•เบดเบเบณเบเปˆเบญเบ™เปœเป‰เบฒเบ™เบตเป‰, เปƒเบซเป‰เปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบ "-Wno-error=incompatible-pointer-types".
  • เป€เบžเบตเปˆเบกเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฒเบžเป‰เบญเบกเปเบฅเป‰เบงเบ„เบท __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 โ€ฆ>; // เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเป€เบ›เบฑเบ™ TypeList
  • เป€เบกเบทเปˆเบญเปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เบžเบถเบ”เบ•เบดเบเบณเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเบณเบ™เบปเบ”เบ”เป‰เบงเบ UBSan (-fsanitize=undefined -fsanitize-trap=undefined), เบ‚เปเป‰เบกเบนเบ™เบชเบฒเป€เบซเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบ—เบธเบ‡ "-fsanitize-debug-trap-reasons" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเบกเบฒเป€เบžเบทเปˆเบญเบฅเบฐเบšเบธเบฅเบฐเบ”เบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปƒเบ™เบ‚เปเป‰เบกเบนเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ›เบฑเบ™ "เบžเบทเป‰เบ™เบ–เบฒเบ™" เบชเบณเบฅเบฑเบšเบ„เบณเบญเบฐเบ—เบดเบšเบฒเบเบ—เบปเปˆเบงเป„เบ› (เป€เบŠเบฑเปˆเบ™: "เบเบฒเบ™เบšเบงเบเบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบกเบฅเบปเป‰เบ™") เปเบฅเบฐ "เบฅเบฒเบเบฅเบฐเบญเบฝเบ”" เป€เบžเบทเปˆเบญเบฅเบงเบกเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบญเบฝเบ” (เป€เบŠเบฑเปˆเบ™: "เบเบฒเบ™เบšเบงเบเบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบตเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบฅเบปเป‰เบ™เปƒเบ™ 'a + b'").
  • เป€เบžเบตเปˆเบกเบ—เบธเบ‡ compiler เปƒเบซเบกเปˆ:
    • "-f[no-]sanitize-debug-trap-reasons" เป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบงเปˆเบฒเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡ exception trap เบˆเบฐเบ–เบทเบเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบ‚เปเป‰เบกเบนเบ™ debug เบซเบผเบทเบšเปเปˆ เป€เบกเบทเปˆเบญเบ„เบญเบกเป„เบžเบฅเปŒเบ”เป‰เบงเบเป‚เปเบ” "-fsanitize-trap".
    • "-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", เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ malloc เปเบ•เปˆเปƒเบŠเป‰เป„เบ”เป‰เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ„เป‰เบฒเบเบ„เบท span เบ—เบตเปˆเบกเบตเบ•เบปเบงเบŠเบตเป‰ เปเบฅเบฐ เบžเบฒเบเบชเบฐเปœเบฒเบกเบ—เบตเปˆเบกเบตเบ‚เบฐเปœเบฒเบ” เบซเบผเบท เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ—เป‰เบฒเบเบšเบฅเบฑเบญเบ.
  • เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "modular_format" เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ printf เปƒเบ™เป€เบงเบฅเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบ.
  • เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบช เปเบฅเบฐ เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ, เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเบกเบฒ (เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเบซเบผเบฒเบเบชเบดเบšเบขเปˆเบฒเบ‡).
  • เบชเปˆเบงเบ™เบ›เบฐเบเบญเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเบณเบฅเบฑเบšเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ SSE, AVX, เปเบฅเบฐ AVX512 เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ backend X86. เป‚เปเบ” Build เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบชเบณเบฅเบฑเบš CPU Intel เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณเบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบ Wildcat Lake (-march=wildcatlake) เปเบฅเบฐ Nova Lake (-march=novalake).
  • เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ backend เบ‚เบญเบ‡ AArch64 เบฎเบญเบ‡เบฎเบฑเบšเป‚เบ›เป€เบŠเบ”เป€เบŠเบต 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]. เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš Function Multi-Versioning (FMV) เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเปเบฑเป‰เบ™เบ„เบปเบ‡. เบ›เบฐเบˆเบธเบšเบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ—เบ™เบ„เบงเบฒเบกเบชเบณเบ„เบฑเบ™เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบงเบตเบŠเบฑเบ™เบ•เปˆเบฒเบ‡เป†เป„เบ”เป‰.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบชเบณเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณ LoongArch32 (LA32R, LA32S).
  • เบ›เบฑเบšเบ›เบธเบ‡เปเบšเบฑเบเป€เบญเบฑเบ™เปƒเบซเป‰เบ”เบตเบ‚เบถเป‰เบ™เบชเบณเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณ ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly เปเบฅเบฐ PowerPC.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster