LLVM 10.0 рдХрдВрдкрд╛рдпрд▓рд░ рд╕реВрдЯрдЪреЗ рдкреНрд░рдХрд╛рд╢рди

рд╕рд╣рд╛ рдорд╣рд┐рдиреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рдирдВрддрд░ рд╕рд╛рджрд░ рдкреНрд░рдХрд▓реНрдк рдкреНрд░рдХрд╛рд╢рди рдПрд▓рдПрд▓рд╡реНрд╣реАрдПрдо 10.0 тАФ GCC-рд╕реБрд╕рдВрдЧрдд рд╕рд╛рдзрдиреЗ (рдХрдВрдкрд╛рдпрд▓рд░, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░реНрд╕ рдЖрдгрд┐ рдХреЛрдб рдЬрдирд░реЗрдЯрд░), RISC-рд╕рд╛рд░рдЦреНрдпрд╛ рдЖрднрд╛рд╕реА рд╕реВрдЪрдирд╛рдВрдЪреНрдпрд╛ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдмрд┐рдЯрдХреЛрдбрдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреЗ (рдорд▓реНрдЯреА-рд▓реЗрд╡реНрд╣рд▓ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рд▓реЛ-рд▓реЗрд╡реНрд╣рд▓ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди). рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓рд╛ рд╕реНрдпреВрдбреЛрдХреЛрдб JIT рдХрдВрдкрд╛рдпрд▓рд░ рд╡рд╛рдкрд░реВрди рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рд╡реЗрд│реА рдереЗрдЯ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

LLVM 10.0 рдордзреАрд▓ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдордзреНрдпреЗ C++ рд╕рдВрдХрд▓реНрдкрдирд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди, рдпрд╛рдкреБрдвреЗ Clang рд╣реА рд╡реЗрдЧрд│реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореНрд╣рдгреВрди рдЪрд╛рд▓рдгрд╛рд░ рдирд╛рд╣реА, Windows рд╕рд╛рдареА CFG (рдХрдВрдЯреНрд░реЛрд▓ рдлреНрд▓реЛ рдЧрд╛рд░реНрдб) рддрдкрд╛рд╕рдгреНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЖрдгрд┐ рдирд╡реАрди CPU рдХреНрд╖рдорддрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.

рд╕реБрдзрд╛рд░рдгрд╛ рдХреНрд▓реЕрдВрдЧ 10.0 рдордзреНрдпреЗ:

  • рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ "рд╕рдВрдХрд▓реНрдкрдирд╛", рдПрдХ C++ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╕реНрддрд╛рд░ рдЬреЛ рдкреБрдвреАрд▓ рдорд╛рдирдХрд╛рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, C++2a (-std=c++2a рдзреНрд╡рдЬрд╛рджреНрд╡рд╛рд░реЗ рд╕рдХреНрд╖рдо)
    рд╕рдВрдХрд▓реНрдкрдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд рдЬреЗ рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА, рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдореНрд╣рдгреВрди рд╕реНрд╡реАрдХрд╛рд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрдгрд╛рд▒реНрдпрд╛ рд╡рд┐рддрд░реНрдХрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рддрд╛рдд. рдЯреЗрдореНрдкреНрд▓реЗрдЯрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЧреБрдгрдзрд░реНрдорд╛рдВрдордзреАрд▓ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╕рдВрдЧрддреА рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

    рдЯреЗрдореНрдкрд▓реЗрдЯ
    рд╕рдорддрд╛рддреБрд▓рдиреАрдп рд╕рдВрдХрд▓реНрдкрдирд╛ = рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдПрдХ рд╡реЗрдЧрд│реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (тАЬclang -cc1тАЭ) рд▓рд╛рдБрдЪ рдХрд░рдгреЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рдВрдХрд▓рди рдХреЗрд▓реЗ рдЬрд╛рддреЗ рддреЗ рдерд╛рдВрдмрд╡рд▓реЗ рдЬрд╛рддреЗ. рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреЗ рдЖрддрд╛ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ "-fno-integrated-cc1" рдкрд░реНрдпрд╛рдп рдЬреБрдиреЗ рд╡рд░реНрддрди рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.
  • рдирд╡реАрди рдирд┐рджрд╛рди рдкрджреНрдзрддреА:
    • "-Wc99-рдбрд┐рдЭрд╛рдЗрдиреЗрдЯрд░" рдЖрдгрд┐ "-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" - рдШрд╛рддрд╛рдВрдХ (2^16) рд╕рд╣ рдЧреЛрдВрдзрд│реВрди рдЬрд╛рдК рд╢рдХрдгрд╛рд▒реНрдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕рдордзреНрдпреЗ "^" (xor) рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рд░рдЪрдирд╛рдВрдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╡рд┐рд░реВрджреНрдз рдЪреЗрддрд╛рд╡рдгреА рджреЗрддреЗ.
    • "-Wfinal-dtor-non-final-class" - "рдЕрдВрддрд┐рдо" рд╕реНрдкреЗрд╕рд┐рдлрд╛рдпрд░рдиреЗ рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдирд╕рд▓реЗрд▓реНрдпрд╛, рдкрд░рдВрддреБ "рдЕрдВрддрд┐рдо" рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрд╕рд▓реЗрд▓реЗ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрдЧрд╛рдВрдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА рджреЗрддреЗ.
    • "-Wtautological-bitwise-compare" рд╣рд╛ bitwise рдСрдкрд░реЗрд╢рди рдЖрдгрд┐ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдЯреЙрдЯреЛрд▓реЙрдЬрд┐рдХрд▓ рддреБрд▓рдирд╛рдВрдЪреЗ рдирд┐рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдиреЗрд╣рдореА-рд╕рддреНрдп рддреБрд▓рдирд╛ рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЪреЗрддрд╛рд╡рдгреАрдВрдЪрд╛ рдПрдХ рдЧрдЯ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ bitwise OR рдСрдкрд░реЗрд╢рди рдЧреИрд░-рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпреЗрд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ.
    • "-Wbitwise-conditional-constheses" рд▓реЙрдЬрд┐рдХрд▓ рдСрдкрд░реЗрдЯрд░ AND (&) рдЖрдгрд┐ OR (|) рдпрд╛рдВрдирд╛ рдХрдВрдбрд┐рд╢рдирд▓ рдСрдкрд░реЗрдЯрд░ (?:) рд╕рд╣ рдорд┐рд╕рд│рддрд╛рдирд╛ рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА рджреЗрддреЗ.
    • тАЬ-Wmisleading-IndentationтАЭ рд╣реЗ GCC рдХрдбреАрд▓ рддреНрдпрд╛рдЪ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдЪреЗрдХрдЪреЗ ре▓рдирд╛рд▓реЙрдЧ рдЖрд╣реЗ, рдЬреЗ рдЗрдВрдбреЗрдВрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА рджреЗрддреЗ рдЬрд╕реЗ рдХреА рддреЗ if/else/for/while рдмреНрд▓реЙрдХрдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рддреЗ рдпрд╛ рдмреНрд▓реЙрдХрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд. .
    • "-Wextra" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛рдирд╛, "-Wdeprecated-copy" рдЪреЗрдХ рд╕рдХреНрд╖рдо рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА
      рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдирд╛рд╢рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрдЧрд╛рдВрдордзреНрдпреЗ "рд╣рд▓рд╡рд╛" рдЖрдгрд┐ "рдХреЙрдкреА" рдХрд░рд╛.

    • "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-рддреБрд▓рдирд╛", "-Wrange-loop-analysis" рддрдкрд╛рд╕рдгреНрдпрд╛рдВрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ.
    • "-Wbitwise-op-constheses" рдЖрдгрд┐ "-Wlogical-op-constheses" рдЪреЗрдХ рдбрд┐рдлреЙрд▓реНрдЯ рджреНрд╡рд╛рд░реЗ рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.
  • C рдЖрдгрд┐ C++ рдХреЛрдбрдордзреНрдпреЗ, рдкреЙрдЗрдВрдЯрд░ рдЕрдВрдХрдЧрдгрд┐рдд рдСрдкрд░реЗрд╢рдиреНрд╕ рдлрдХреНрдд ре▓рд░реЗрдордзреНрдпреЗрдЪ рдЕрдиреБрдордд рдЖрд╣реЗрдд. "-fsanitize=pointer-overflow" рдореЛрдбрдордзреАрд▓ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрддрдгреВрдХ рд╕реЕрдирд┐рдЯрд╛рдпрдЭрд░ рдЖрддрд╛ рд╢реВрдиреНрдп рдкреЙрдЗрдВрдЯрд░рдордзреНрдпреЗ рдиреЙрди-рдЭрд┐рд░реЛ рдСрдлрд╕реЗрдЯ рдЬреЛрдбрдгреЗ рдХрд┐рдВрд╡рд╛ рдиреЙрди-рдирд▓ рдкреЙрдЗрдВрдЯрд░рдордзреВрди рдкреВрд░реНрдгрд╛рдВрдХ рд╡рдЬрд╛ рдХрд░рддрд╛рдирд╛ рд╢реВрдиреНрдп рдкреЙрдЗрдВрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреЗ рдпрд╛рд╕рд╛рд░рдЦреА рдкреНрд░рдХрд░рдгреЗ рдкрдХрдбрддреЗ.
  • "-fsanitize=implicit-conversion" (Inmplicit Conversion Sanitizer) рдореЛрдб "int" рдкреНрд░рдХрд╛рд░рд╛рдкреЗрдХреНрд╖рд╛ рдереЛрдбрд╛ рд▓рд╣рд╛рди рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рд╡рд╛рдвреАрд╡ рдЖрдгрд┐ рдХрдореА рдСрдкрд░реЗрд╢рдиреНрд╕рдордзреАрд▓ рд╕рдорд╕реНрдпрд╛ рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХреВрд▓ рдЖрд╣реЗ.
  • x86 рд▓рдХреНрд╖реНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░реНрд╕ рдирд┐рд╡рдбрддрд╛рдирд╛ "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" рдЖрдгрд┐ "-march=cooperlake" рдореБрд▓рднреВрддрд░рд┐рддреНрдпрд╛ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреНрдб рдж рдордзреНрдпреЗ рдХреЛрдбрдиреЗ 512-рдмрд┐рдЯ zmm рд░рдЬрд┐рд╕реНрдЯрд░реНрд╕ рд╡рд╛рдкрд░рдгреЗ рдерд╛рдВрдмрд╡рд▓реЗ рдЖрд╣реЗ, рд╕реНрддреНрд░реЛрдд рдХреЛрдбрдордзреНрдпреЗ рддреНрдпрд╛рдВрдЪреЗ рдереЗрдЯ рд╕рдВрдХреЗрдд рд╡рдЧрд│рддрд╛. рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдЕрд╕реЗ рдЖрд╣реЗ рдХреА 512-рдмрд┐рдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рддрд╛рдирд╛ CPU рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдХрдореА рд╣реЛрддреЗ, рдЬреЗ рдПрдХреВрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╡рд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдХрд░реВ рд╢рдХрддреЗ. рдирд╡реАрди рд╡рд░реНрддрди рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА, "-mprefer-vector-width=512" рдкрд░реНрдпрд╛рдп рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЖрд╣реЗ.
  • "-flax-vector-conversions" рдзреНрд╡рдЬрд╛рдЪреЗ рд╡рд░реНрддрди GCC рдкреНрд░рдорд╛рдгреЗрдЪ рдЖрд╣реЗ: рдкреВрд░реНрдгрд╛рдВрдХ рдЖрдгрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╡реЗрдХреНрдЯрд░рдордзреАрд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реЗрдХреНрдЯрд░ рдмрд┐рдЯ рд░реВрдкрд╛рдВрддрд░рдгреЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдЖрд╣реЗрдд. рд╣реА рдорд░реНрдпрд╛рджрд╛ рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдзреНрд╡рдЬрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрд╣реЗ
    "-flax-vector-conversions=all" рдЬреЗ рдбреАрдлреЙрд▓реНрдЯ рдЖрд╣реЗ.

  • Octeon рдХреБрдЯреБрдВрдмрд╛рддреАрд▓ MIPS CPU рд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рд╕рдорд░реНрдерди. рд╡реИрдз CPU рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреНрдпрд╛ рд╕реВрдЪреАрдордзреНрдпреЗ "octeon+" рдЬреЛрдбрд▓реЗ.
  • WebAssembly рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдХреЛрдбрдордзреНрдпреЗ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рддрд╛рдирд╛, рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реНрдпрд╛рд╕, wasm-opt рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░ рдЖрдкреЛрдЖрдк рдХреЙрд▓ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.
  • RISC-V рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА, рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╡реНрд╣реЕрд▓реНрдпреВрдЬ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгрд╛рд▒реНрдпрд╛ рд░рдЬрд┐рд╕реНрдЯрд░реНрд╕рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕ рдЕрд╕реЗрдВрдмрд▓рд░ рдЗрдирд▓рд╛рдЗрди рдЗрдиреНрд╕рд░реНрдЯрдЪреНрдпрд╛ рд╕рд╢рд░реНрдд рдмреНрд▓реЙрдХреНрд╕рдордзреНрдпреЗ рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ.
  • рдирд╡реАрди рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реЕрдЧ рдЬреЛрдбрд▓реЗ: "__GNUC__" рдЖрдгрд┐ рддрддреНрд╕рдо рдореЕрдХреНрд░реЛрд╕рд╛рдареА рдЖрд╡реГрддреНрддреА рдореВрд▓реНрдп рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА "-fgnuc-version"; "__FILE__" рд╕рд╛рд░рдЦреНрдпрд╛ рдореЕрдХреНрд░реЛрдордзреНрдпреЗ NEW рд╕рд╣ рдбрд┐рд░реЗрдХреНрдЯреНрд░реА рдЙрдкрд╕рд░реНрдЧ OLD рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА "-fmacro-prefix-map=OLD=NEW"; "-fpatchable-function-entry=N[,M]" рдлрдВрдХреНрд╢рди рдПрдВрдЯреНрд░реА рдкреЙрдИрдВрдЯрдЪреНрдпрд╛ рдЖрдзреА рдЖрдгрд┐ рдирдВрддрд░ рдард░рд╛рд╡рд┐рдХ NOP рд╕реВрдЪрдирд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. RISC-V рд╕рд╛рдареА
    "-ffixed-xX", "-mcmodel=medany" рдЖрдгрд┐ "-mcmodel=medlow" рдзреНрд╡рдЬрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.

  • '__рд╡рд┐рд╢реЗрд╖рддрд╛__((рд▓рдХреНрд╖реНрдп("рд╢рд╛рдЦрд╛-рд╕рдВрд░рдХреНрд╖рдг=..."))) рд╡рд┐рд╢реЗрд╖рддрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ, рдЬреНрдпрд╛рдЪрд╛ рдкреНрд░рднрд╛рд╡ рдкрд░реНрдпрд╛рдпрд╛рд╕рд╛рд░рдЦрд╛рдЪ рдЖрд╣реЗ рд╢рд╛рдЦрд╛-рд╕рдВрд░рдХреНрд╖рдг.
  • Windows рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░, тАЬ-cfguardтАЭ рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛рдирд╛, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдлрдВрдХреНрд╢рди рдХреЙрд▓рд╕рд╛рдареА рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди рдлреНрд▓реЛ рдЗрдВрдЯрд┐рдЧреНрд░рд┐рдЯреА рдЪреЗрдХ (рдХрдВрдЯреНрд░реЛрд▓ рдлреНрд▓реЛ рдЧрд╛рд░реНрдб) рдЪреНрдпрд╛ рдмрджрд▓реАрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХреЗрд▓реА рдЬрд╛рддреЗ. рдЪреЗрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЕрдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА тАЬ-cfguard-nochecksтАЭ рдзреНрд╡рдЬ рдХрд┐рдВрд╡рд╛ тАЬ__declspec(guard(nocf))тАЭ рд╕реБрдзрд╛рд░рдХ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
  • gnu_inline рд╡рд┐рд╢реЗрд╖рддрд╛рдЪреЗ рд╡рд░реНрддрди GCC рд╕рд╛рд░рдЦреЗрдЪ рдЕрд╕рддреЗ рдЬреЗрдереЗ рддреЗ "рдмрд╛рд╣реНрдп" рдХреАрд╡рд░реНрдбрд╢рд┐рд╡рд╛рдп рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ.
  • OpenCL рдЖрдгрд┐ CUDA рд╕рдорд░реНрдердирд╛рд╢реА рдирд┐рдЧрдбреАрдд рдХреНрд╖рдорддрд╛рдВрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдирд╡реАрди OpenMP 5.0 рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.
  • рдХреНрд▓рдБрдЧ-рдлреЙрд░реНрдореЗрдЯ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдордзреНрдпреЗ рдПрдХ рдорд╛рдирдХ рдкрд░реНрдпрд╛рдп рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЖрдгрд┐ рдлреЙрд░рдореЕрдЯ рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ C++ рд╕реНрдЯрдБрдбрд░реНрдбрдЪреА рдЖрд╡реГрддреНрддреА рдард░рд╡реВ рджреЗрддреЛ (рдирд╡реАрдирддрдо, рдСрдЯреЛ, c++03, c++11, c++14, c++17, c++20 ).
  • рд╕реНрдЯреЕрдЯрд┐рдХ ре▓рдирд╛рд▓рд╛рдпрдЭрд░рдордзреНрдпреЗ рдирд╡реАрди рддрдкрд╛рд╕рдгреНрдпрд╛ рдЬреЛрдбрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд: alpha.cplusplus.PlacementNew, рдкреБрд░реЗрд╢реА рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдкреЗрд╕ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, fuchsia.HandleChecker Fuchsia рд╣рдБрдбрд▓рд░реНрд╕рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд▓реАрдХ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, security.insecureAPI.decodeValueOfObjCType рд╕рдВрднрд╛рд╡реНрдп рдмрдлрд░ рдУрд╡реНрд╣рд░рдлреНрд▓реЛ рдбреАрд╡реНрд╣реАрдУрд╕реАрдЯреАрдУрдкреАрдУрдУрд╕реАрдЯреАрдУрд╡реНрд╣реАрдУрд╕реАрдЯреАрдУрд╡реНрд╣реАрдУрд╕реАрдЯреАрдУрд╡реНрд╣реАрдУрдкреАрдУрдкреАрдУрдкреАрдУ рд╡рд╛рдкрд░рддрд╛рдирд╛. :at:] .
  • рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдмрд┐рд╣реЗрд╡рд┐рдпрд░ рд╕реЕрдирд┐рдЯрд╛рдпрдЭрд░ (UBSan) рдиреЗ NULL рдкреЙрдЗрдВрдЯрд░рд╡рд░ рд╢реВрдиреНрдп рдирд╕рд▓реЗрд▓реНрдпрд╛ рдСрдлрд╕реЗрдЯрдЪрд╛ рдХрд┐рдВрд╡рд╛ NULL рдкреЙрдЗрдВрдЯрд░ рдСрдлрд╕реЗрдЯрдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪреНрдпрд╛ рдкреЙрдЗрдВрдЯрд░ рдУрд╡реНрд╣рд░рдлреНрд▓реЛ рдЪреЗрдХрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ.
  • рдордзреНрдпреЗ linter clang-рдиреАрдЯрдиреЗрдЯрдХрд╛ рдЬреЛрдбрд▓реЗ рдирд╡реАрди рдзрдирд╛рджреЗрд╢рд╛рдВрдЪрд╛ рдореЛрдард╛ рднрд╛рдЧ.

рдореБрдЦреНрдп рдирд╡рдХрд▓реНрдкрдирд╛ LLVM 10.0:

  • рдЪреМрдХрдЯреАрд▓рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╡реАрди рдЖрдВрддрд░рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. 19 рд╡рд┐рд╢реЗрд╖рддрд╛ 12 LLVM IR рдЖрдгрд┐ рдЬрд┐рд╡рдВрддрдкрдгрд╛ рд╕рд╛рд░рдЦреНрдпрд╛ 12 рдЕрдореВрд░реНрдд рдЧреБрдгрдзрд░реНрдорд╛рдВрд╕рд╣ 7 рднрд┐рдиреНрди рдЧреБрдгрдзрд░реНрдорд╛рдВрдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдЪрд╛ рдЕрдВрджрд╛рдЬ рдЖрд╣реЗ.
  • рдХрдВрдкрд╛рдЗрд▓рд░рдордзреНрдпреЗ рдирд╡реАрди рдореЕрдЯреНрд░рд┐рдХреНрд╕ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЗ рдЬреЛрдбрд▓реА (рдЕрдВрддрд░реНрдорди), рдЬреЗ рд╕рдВрдХрд▓рдирд╛рджрд░рдореНрдпрд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдо рд╡реЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрджреНрд╡рд╛рд░реЗ рдмрджрд▓рд▓реЗ рдЬрд╛рддрд╛рдд.
  • 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 (рдереНрд░реЗрдб-рд▓реЛрдХрд▓ рд╕реНрдЯреЛрд░реЗрдЬ) рдЖрдгрд┐ atomic.fence рд╕реВрдЪрдирд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ. SIMD рд╕рдорд░реНрдерди рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. WebAssembly рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рдЖрддрд╛ рдорд▓реНрдЯреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдлрдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЖрд╣реЗ.
  • рд▓реВрдкрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛рдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ рдореЗрдорд░реАрдПрд╕рдПрд╕рдП, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдореЗрдорд░реА рдСрдкрд░реЗрд╢рдиреНрд╕рдордзреАрд▓ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. MemorySSA рд╕рдВрдХрд▓рди рдЖрдгрд┐ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ рдХрдореА рдХрд░реВ рд╢рдХрддреЗ рдХрд┐рдВрд╡рд╛ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рди рдЧрдорд╛рд╡рддрд╛ AliasSetTracker рдРрд╡рдЬреА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
  • LLDB рдбреАрдмрдЧрд░рдиреЗ DWARF v5 рдлреЙрд░рдореЕрдЯрд╕рд╛рдареА рд╕рдорд░реНрдерди рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╕реБрдзрд╛рд░рд▓реЗ рдЖрд╣реЗ. MinGW рд╕рд╣ рдмрд┐рд▓реНрдбрд┐рдВрдЧрд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рд╕рдорд░реНрдерди
    рдЖрдгрд┐ ARM рдЖрдгрд┐ ARM64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░реНрд╕рд╕рд╛рдареА Windows рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд▓реА. рдЯреЕрдм рджрд╛рдмреВрди рдЗрдирдкреБрдЯ рд╕реНрд╡рдпрдВрдкреВрд░реНрдг рдХрд░рддрд╛рдирд╛ рдСрдлрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдЬреЛрдбрд▓реЗ.

  • рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрд▓рдПрд▓рдбреА рд▓рд┐рдВрдХрд░ рдХреНрд╖рдорддрд╛. GNU рд▓рд┐рдВрдХрд░рд╕рд╣ рдЧреНрд▓реЛрдм рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕рдЪреА рд╕рдВрдкреВрд░реНрдг рд╕реБрд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ, рд╕рдВрдХреБрдЪрд┐рдд рдбреАрдмрдЧ рд╡рд┐рднрд╛рдЧ ".zdebug" рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрдгреЗ, .note.gnu.property рд╡рд┐рднрд╛рдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА PT_GNU_PROPERTY рдЧреБрдгрдзрд░реНрдо рдЬреЛрдбрдгреЗ (рднрд╡рд┐рд╖реНрдпрд╛рдд рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ) ELF рдлреЙрд░рдореЕрдЯрд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рд╕рдорд░реНрдерди рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓),
    тАЬ-z noseparate-codeтАЭ, тАЬ-z рд╡рд┐рднрдХреНрдд-рдХреЛрдбтАЭ рдЖрдгрд┐ тАЬ-z рд╡рд┐рднрдХреНрдд-рд▓реЛрдб рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп-рд╡рд┐рднрд╛рдЧтАЭ рдореЛрдб рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. MinGW рдЖрдгрд┐ WebAssembly рд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рд╕рдорд░реНрдерди.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛