Vrystelling van die LLVM 10.0-samestellersuite

Na ses maande van ontwikkeling aangebied projek vrystelling LLVM 10.0 β€” GCC-versoenbare gereedskap (samestellers, optimaliseerders en kode-opwekkers), wat programme saamstel in intermediΓͺre bitkode van RISC-agtige virtuele instruksies (laevlak virtuele masjien met 'n multi-vlak optimeringstelsel). Die gegenereerde pseudokode kan direk met behulp van 'n JIT-samesteller in masjieninstruksies omgeskakel word ten tyde van die uitvoering van die program.

Из Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй LLVM 10.0 отмСчаСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ C++ (C++ Concepts), ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ запуска Clang Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ CFG (control flow guard) для Windows ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй CPU.

Verbeterings in Clang 10.0:

  • Bygevoeg ondersteuning vir "konsepteΒ«, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ шаблонов C++, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² состав ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ стандарта, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ C++2a (Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„Π»Π°Π³ΠΎΠΌ -std=c++2a).
    ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎ врСмя компиляции ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π½Π°Π±ΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² шаблона. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ логичСских нСсоотвСтствий ΠΌΠ΅ΠΆΠ΄Ρƒ свойствами Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ шаблона, ΠΈ свойствами Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

    sjabloon
    konsep GelykheidVergelykbaar = vereis(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Ρ‘Π½ запуск ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса (Β«clang -cc1Β»), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся компиляция. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выполняСтся Π² основном процСссС, Π° для восстановлСния старого повСдСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Β«-fno-integrated-cc1Β».
  • НовыС Ρ€Π΅ΠΆΠΈΠΌΡ‹ диагностики:
    • Β«-Wc99-designatorΒ» ΠΈ Β«-Wreorder-init-listΒ» β€” ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‚ ΠΎΠ± использовании ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² C99 Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ C++ Π² случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ Π² C99, Π½ΠΎ Π½Π΅ подходят для C++20.
    • Β«-Wsizeof-array-divΒ» β€” ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ситуации, ΠΊΠ°ΠΊ Β«int arr[10]; …sizeof(arr) / sizeof(short)…» (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Β«sizeof(arr) / sizeof(int)Β»).
    • Β«-Wxor-used-as-poΒ» β€” ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ± использовании Ρ‚Π°ΠΊΠΈΡ… конструкций, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«^Β» (xor) Π² опСрациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ (2 ^ 16).
    • Β«-Wfinal-dtor-non-final-classΒ» β€” ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎ классах, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… спСцификатором Β«finalΒ», Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… дСструктор c ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Β«finalΒ».
    • Β«-Wtautological-bitwise-compareΒ» β€” Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ для диагностики тавтологичСского сравнСния Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ константы, Π° Ρ‚Π°ΠΊΠΆΠ΅ для выявлСния всСгда истинных сравнСний, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… битовая опСрация OR примСняСтся ΠΊ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу.
    • Β«-Wbitwise-conditional-parenthesesΒ» ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΡ€ΠΈ смСшивании логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² AND (Β«&Β») ΠΈ OR (Β«|Β») c условным ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ (Β«?:Β»).
    • Β«-Wmisleading-indentationΒ» β€” Π°Π½Π°Π»ΠΎΠ³ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ· GCC, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ ΠΎ выраТСниях, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… отступом, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ входят Π² Π±Π»ΠΎΠΊ if/else/for/while, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π½Π΅ входящих.
    • ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Β«-WextraΒ» обСспСчСно Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Β«-Wdeprecated-copyΒ», ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ ΠΎΠ± использовании конструкторов
      Β«moveΒ» ΠΈ Β«copyΒ» Π² классах с явным ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ дСструктора.

    • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Β«-Wtautological-overlap-compareΒ», Β«-Wsizeof-pointer-divΒ», Β«-Wtautological-compareΒ», Β«-Wrange-loop-analysisΒ».
    • ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Β«-Wbitwise-op-parenthesesΒ» ΠΈ Β«-Wlogical-op-parenthesesΒ».
  • Π’ ΠΊΠΎΠ΄Π΅ Π½Π° Π‘ ΠΈ Π‘++ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с указатСлями Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² массивах. Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ повСдСния (Undefined Behavior Sanitizer) Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«-fsanitize=pointer-overflowΒ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ случаи, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ смСщСния ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля ΠΏΡ€ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа ΠΈΠ· Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля.
  • Π Π΅ΠΆΠΈΠΌ Β«-fsanitize=implicit-conversionΒ» (Implicit Conversion Sanitizer) Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ для выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с опСрациями ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° для Ρ‚ΠΈΠΏΠΎΠ² с Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ мСньшим, Ρ‡Π΅ΠΌ Ρƒ Ρ‚ΠΈΠΏΠ° Β«intΒ».
  • ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… x86-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ Β«-march=skylake-avx512Β», Β«-march=icelake-clientΒ», Β«-march=icelake-serverΒ», Β«-march=cascadelakeΒ» ΠΈ Β«-march=cooperlakeΒ» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ использованиС 512-разрядных рСгистров zmm, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ… прямого указания Π² исходных тСкстах. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ являСтся сниТСниС частоты CPU ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ 512-разрядных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Для измСнСния Π½ΠΎΠ²ΠΎΠ³ΠΎ повСдСния прСдусмотрСна опция Β«-mprefer-vector-width=512Β».
  • ПовСдСниС Ρ„Π»Π°Π³Π° Β«-flax-vector-conversionsΒ» ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΎ ΠΊ GCC: Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ нСявныС Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ цСлочислСнными Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ограничСния прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³
    Β«-flax-vector-conversions=allΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CPU MIPS сСмСйства Octeon. Π’ список допустимых Ρ‚ΠΈΠΏΠΎΠ² CPU Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Β«octeon+Β».
  • ΠŸΡ€ΠΈ сборкС Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ WebAssembly обСспСчСн автоматичСский Π²Ρ‹Π·ΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° wasm-opt, ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² систСмС.
  • Для систСм Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ RISC-V Π² условных Π±Π»ΠΎΠΊΠ°Ρ… ассСмблСрных inline-вставок Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС рСгистров, хранящих значСния с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ компилятора: Β«-fgnuc-versionΒ» для задания значСния вСрсии для Β«__GNUC__Β» ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… макросов; Β«-fmacro-prefix-map=OLD=NEWΒ» для Π·Π°ΠΌΠ΅Π½Ρ‹ прСфикса ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² OLD Π½Π° NEW Π² Ρ‚Π°ΠΊΠΈΡ… макросах, ΠΊΠ°ΠΊ Β«__FILE__Β»; Β«-fpatchable-function-entry=N[,M]Β» для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ числа инструкций NOP ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ послС Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Для RISC-V
    Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„Π»Π°Π³ΠΎΠ² Β«-ffixed-xXΒ», Β«-mcmodel=medanyΒ» ΠΈ Β«-mcmodel=medlowΒ».

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° β€˜__attribute__((target(Β«branch-protection=…»)))’, дСйствиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠΏΡ†ΠΈΠΈ -mbranch-protection.
  • На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Ρ„Π»Π°Π³Π° Β«-cfguardΒ» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° подстановка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ цСлостности ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния (Control Flow Guard) ΠΏΡ€ΠΈ нСпрямых Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ подстановки ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ Β«-cfguard-nochecksΒ» ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Β«__declspec(guard(nocf))Β».
  • ПовСдСниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° gnu_inline ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΎ ΠΊ GCC, Π² случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«externΒ».
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ возмоТности, связанныС с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ OpenCL ΠΈ CUDA. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй OpenMP 5.0.
  • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ clang-format Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Standard, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ стандарта C++, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° (Latest, Auto, c++03, c++11, c++14, c++17, c++20).
  • Π’ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: alpha.cplusplus.PlacementNew для опрСдСлСния достаточного мСста Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, fuchsia.HandleChecker для выявлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ, связанных с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Fuchsia, security.insecureAPI.decodeValueOfObjCType для опрСдСлСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€Π° ΠΏΡ€ΠΈ использовании [NSCoder decodeValueOfObjCType:at:].
  • Π’ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ повСдСния (UBSan, Undefined Behavior Sanitizer) Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ пСрСполнСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… смСщСний ΠΊ указатСлям NULL ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ добавлСния смСщСния указатСля со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ NULL.
  • In linter klang-netjies bygevoeg 'n groot gedeelte van nuwe tjeks.

Die belangrikste innovasies LLVM 10.0:

  • Na die raamwerk Attributor Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅ΠΆΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ состояния 19 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 12 Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² 12 LLVM IR ΠΈ 7 абстрактных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΆΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ (liveness).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ встроСнныС Π² компилятор ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Intrinsieke), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ компиляции Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° эффСктивныС Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ инструкции.
  • ВнСсСны многочислСнныС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² бэкСнды для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ΠΈ PowerPC. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CPU
    Cortex-A65, Cortex-A65AE, Neoverse E1 ΠΈ Neoverse N1. Для ARMv8.1-M ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ процСсс Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ†ΠΈΠΊΠ»ΠΎΠ² с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами) ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π²Ρ‚ΠΎΠ²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ с использованиСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ MVE. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CPU MIPS Octeon. Для PowerPC Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° вСкторизация матСматичСских ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MASSV (Mathematical Acceleration SubSystem), ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° гСнСрация ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ доступ ΠΊ памяти ΠΈΠ· Ρ†ΠΈΠΊΠ»ΠΎΠ². Для x86 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² v2i32, v4i16, v2i16, v8i8, v4i8 ΠΈ v2i8.

  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° для WebAssembly. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TLS (Thread-Local Storage) ΠΈ инструкции atomic.fence. Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° SIMD. Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… WebAssembly Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования сигнатур Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с нСсколькими значСниями.
  • ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² задСйствован Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ MemorySSA, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ опСрациями с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. MemorySSA позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ сокращСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСсто AliasSetTracker Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • Π’ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ LLDB Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° DWARF v5. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборки с MinGW
    ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Windows для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ARM ΠΈ ARM64. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ описания ΠΎΠΏΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Π²ΠΎΠ΄Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ табуляции.

  • Uitgebreid возмоТности ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° LLD. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ELF, Π² Ρ‚ΠΎΠΌ числС обСспСчСна полная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ glob-шаблонов с ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ GNU, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сТатых ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сСкций Β«.zdebugΒ», Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ свойство PT_GNU_PROPERTY для опрСдСлСния сСкции .note.gnu.property (ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ядрах Linux),
    Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π΅ΠΆΠΈΠΌΡ‹ Β«-z noseparate-codeΒ», Β«-z separate-codeΒ» ΠΈ Β«-z separate-loadable-segmentsΒ». Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° MinGW ΠΈ WebAssembly.

Bron: opennet.ru

Voeg 'n opmerking