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

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

LLVM 9.0 рдЪреНрдпрд╛ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рдХреНрд╖реНрдп RISC-V рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░реВрди рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдбрд┐рдЭрд╛рдЗрди рдЯреЕрдЧ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреЗ, OpenCL рд╕рд╛рдареА C++ рд╕рдорд░реНрдерди, LLD рдордзреАрд▓ рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЖрдгрд┐ тАЬрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.asm goto", Linux рдХрд░реНрдирд▓ рдХреЛрдбрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. libc++ рдиреЗ WASI (WebAssembly System Interface) рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ, рдЖрдгрд┐ LLD рдиреЗ WebAssembly рдбрд╛рдпрдиреЕрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧрд╕рд╛рдареА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.

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

  • рдЬреЛрдбрд▓реЗ GCC-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА "asm gotoтАЬ, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╕реЗрдВрдмрд▓рд░ рдЗрдирд▓рд╛рдЗрди рдмреНрд▓реЙрдХрдордзреВрди C рдХреЛрдбрдордзреАрд▓ рд▓реЗрдмрд▓рд╡рд░ рдЬрд╛рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. x86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╣ рд╕рд┐рд╕реНрдЯрдореНрд╕рд╡рд░ рдХреНрд▓реЕрдВрдЧ рд╡рд╛рдкрд░реВрди рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ тАЬCONFIG_JUMP_LABEL=yтАЭ рдореЛрдбрдордзреНрдпреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдорд╛рдЧреАрд▓ рдкреНрд░рдХрд╛рд╢рдирд╛рдВрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗрд▓реЗ рдмрджрд▓ рд▓рдХреНрд╖рд╛рдд рдШреЗрдКрди, рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдЖрддрд╛ x86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рдХреНрд▓реЕрдВрдЧрдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ (рдкреВрд░реНрд╡реА рдХреЗрд╡рд│ рдЖрд░реНрдо, aarch64, ppc32, ppc64le рдЖрдгрд┐ mips рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рдмрд╛рдВрдзрд▓реЗ рдЬрд╛рдд рд╣реЛрддреЗ). рд╢рд┐рд╡рд╛рдп, Android рдЖрдгрд┐ ChromeOS рдкреНрд░рдХрд▓реНрдк рдЖрдзреАрдЪ рдХрд░реНрдирд▓ рдмрд┐рд▓реНрдбрд┐рдВрдЧрд╕рд╛рдареА рдХреНрд▓реЕрдВрдЧ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ Google рддреНрдпрд╛рдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрди рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рдХрд░реНрдирд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореБрдЦреНрдп рд╡реНрдпрд╛рд╕рдкреАрда рдореНрд╣рдгреВрди рдХреНрд▓реЕрдВрдЧрдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдд рдЖрд╣реЗ. рднрд╡рд┐рд╖реНрдпрд╛рдд, рдЗрддрд░ LLVM рдШрдЯрдХ рдХрд░реНрдирд▓ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЬреНрдпрд╛рдд LLD, llvm-objcopy, llvm-ar, llvm-nm, рдЖрдгрд┐ llvm-objdump;
  • OpenCL рдордзреНрдпреЗ C++17 рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ. рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдордзреНрдпреЗ рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди, рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░рджреНрд╡рд╛рд░реЗ рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреЗ, C рд╕рд╛рдареА OpenCL рдкреНрд░рдорд╛рдгреЗ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреА рддрд░рддреВрдж, рдкреНрд░рддрд┐рдорд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЪреЕрдиреЗрд▓ рдЗрддреНрдпрд╛рджреАрдВрд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ OpenCL рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреА рдЙрдкрд╕реНрдерд┐рддреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.
  • рдлреНрд░рдВрдЯрдПрдВрдб (рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдЖрд░рдВрднреАрдХрд░рдг) рдЖрдгрд┐ рдмреЕрдХрдПрдВрдб (рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЯрдкреНрдкреЗ) рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдЯрдкреНрдкреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рд╡реЗрд│реЗрд╡рд░ рдЕрд╣рд╡рд╛рд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд╡реАрди рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реЕрдЧ "-ftime-trace" рдЖрдгрд┐ "-ftime-trace-granularity=N" рдЬреЛрдбрд▓реЗ рдЖрд╣реЗрдд. рдЕрд╣рд╡рд╛рд▓ json рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХреЗрд▓рд╛ рдЖрд╣реЗ, chrome://tracing рдЖрдгрд┐ speedscope.app рд╕рд╣ рд╕реБрд╕рдВрдЧрдд рдЖрд╣реЗ;
  • тАЬ__declspec(рдЕрд▓реЛрдХреЗрдЯрд░)тАЭ рд╕реНрдкреЗрд╕рд┐рдлрд╛рдпрд░рдЪреА рдЬреЛрдбрд▓реЗрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рд╕реЛрдмрддрдЪреНрдпрд╛ рдбреАрдмрдЧрд┐рдВрдЧ рдорд╛рд╣рд┐рддреАрдЪреА рдирд┐рд░реНрдорд┐рддреА рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рд╕реНрдЯреБрдбрд┐рдУ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдореЗрдорд░реА рд╡рд╛рдкрд░рд╛рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ;
  • C рднрд╛рд╖реЗрд╕рд╛рдареА, тАЬ__FILE_NAME__тАЭ рдореЕрдХреНрд░реЛрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗ тАЬ__FILE__тАЭ рдореЕрдХреНрд░реЛрд╕рд╛рд░рдЦреЗ рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рдкреВрд░реНрдг рдорд╛рд░реНрдЧрд╛рд╢рд┐рд╡рд╛рдп рдлрдХреНрдд рдлрд╛рдЗрд▓ рдирд╛рд╡ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддреЗ;
  • C++ рдиреЗ рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрдгрд┐ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдкреЕрдЯрд░реНрди, рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░, рд░рд┐рдЯрд░реНрди рдЯрд╛рдИрдк рдЗрдиреНрдлрд░рдиреНрд╕, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рдлрдВрдХреНрд╢рдиреНрд╕, рдмрд┐рд▓реНрдЯ-рдЗрди рдСрдкрд░реЗрдЯрд░ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдпрд╛рд╕рд╣ рд╡рд┐рд╡рд┐рдз C++ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдВрд╕рд╛рдареА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдорд░реНрдерди рдХреЗрд▓реЗ рдЖрд╣реЗ.
  • OpenCL, OpenMP рдЖрдгрд┐ CUDA рдЪреНрдпрд╛ рд╕рдорд░реНрдердирд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖рдорддрд╛рдВрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдпрд╛рдордзреНрдпреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд OpenCL рдлрдВрдХреНрд╢рдиреНрд╕рдЪреНрдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╛рд╡реЗрд╢рд╛рд╕рд╛рдареА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд░реНрдерди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ (тАЬ-fdeclare-opencl-builtinsтАЭ рдзреНрд╡рдЬ рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ), cl_arm_integer_dot_product рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд╛рдЧреВ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рдЖрдгрд┐ рдирд┐рджрд╛рди рд╕рд╛рдзрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗрдд;
  • рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдЪреЗ рдХрд╛рд░реНрдп рд╕реБрдзрд╛рд░рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. рдЙрдкрд▓рдмреНрдз рдЪреЗрдХрд░ рдореЙрдбреНрдпреВрд▓ рдЖрдгрд┐ рд╕рдорд░реНрдерд┐рдд рдкрд░реНрдпрд╛рдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдзреНрд╡рдЬ рдЬреЛрдбрд▓реЗ (тАЬ-рд╡рд┐рд╢реНрд▓реЗрд╖рдХ-рдЪреЗрдХрд░[-option]-рдорджрддтАЭ, тАЬ-рд╡рд┐рд╢реНрд▓реЗрд╖рдХ-рдЪреЗрдХрд░[-option]-help-alphaтАЭ рдЖрдгрд┐ тАЬ-analyzer-checker[-option]-help "-рд╡рд┐рдХрд╛рд╕рдХ"). рдЪреЗрддрд╛рд╡рдгреАрдВрдирд╛ рддреНрд░реБрдЯреА рдорд╛рдирдгреНрдпрд╛рд╕рд╛рдареА "-рд╡рд┐рд╢реНрд▓реЗрд╖рдХ-рд╡рд╛рдИрдЯ" рдзреНрд╡рдЬ рдЬреЛрдбрд▓рд╛.
    рдирд╡реАрди рд╕рддреНрдпрд╛рдкрди рдореЛрдб рдЬреЛрдбрд▓реЗ:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling рдмрдлрд░рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкрджреНрдзрддреА рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА;
    • osx.MIGChecker MIG (Mach рдЗрдВрдЯрд░рдлреЗрд╕ рдЬрдирд░реЗрдЯрд░) рдХреЙрд▓ рдирд┐рдпрдорд╛рдВрдЪреЗ рдЙрд▓реНрд▓рдВрдШрди рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА;
    • рдЪреБрдХреАрдЪреА XNU libkern рдСрдмреНрдЬреЗрдХреНрдЯ рд░реВрдкрд╛рдВрддрд░рдгреЗ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА optin.osx.OSObjectCStyleCast;
    • LLVM рдХреЛрдбрдмреЗрд╕рдордзреАрд▓ рддреНрд░реБрдЯреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдореЙрдбреЗрд▓рд┐рдВрдЧ рддрдкрд╛рд╕рдгреА рдлрдВрдХреНрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╕рдВрдЪрд╛рд╕рд╣ apiModeling.llvm;
    • рд╕реБрд░реБ рди рдХреЗрд▓реЗрд▓реНрдпрд╛ C++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдерд┐рд░ рдХреЛрдб (optin.cplusplus рдкреЕрдХреЗрдЬрдордзреНрдпреЗ UninitializedObject);
  • рдХреНрд▓реЕрдВрдЧ-рдлреЙрд░реНрдореЗрдЯ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдиреЗ C# рднрд╛рд╖реЗрддреАрд▓ рдХреЛрдб рдлреЙрд░рдореЕрдЯрд┐рдВрдЧрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯрджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдХреЛрдб рдлреЙрд░рдореЕрдЯрд┐рдВрдЧ рд╢реИрд▓реАрд╕рд╛рдареА рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддреЗ;
  • clang-cl, рдкрд░реНрдпрд╛рдпреА рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдЬреЛ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рд╕реНрдЯреБрдбрд┐рдУрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ cl.exe рдХрдВрдкрд╛рдЗрд▓рд░рд╕рд╣ рдкрд░реНрдпрд╛рдп-рд╕реНрддрд░реАрдп рд╕реБрд╕рдВрдЧрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЛ, рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реАрдВрдирд╛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд░реНрдпрд╛рдп рдореНрд╣рдгреВрди рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдЪреЗрддрд╛рд╡рдгреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗрд░рд┐рд╕реНрдЯрд┐рдХреНрд╕ рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, "clang-cl /diagnostic :caret /c test.cc" рдЪрд╛рд▓рд╡рддрд╛рдирд╛);
  • рдирд╡реАрди рдЪреЗрдХрдЪрд╛ рдореЛрдард╛ рднрд╛рдЧ рд▓рд┐рдВрдЯрд░ рдХреНрд▓реЕрдВрдЧ-рдЯреАрдбреАрдордзреНрдпреЗ рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рддреНрдпрд╛рдд OpenMP API рд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдЪреЗрдХрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ;
  • рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рд░реНрд╡реНрд╣рд░ рдХреНрд╖рдорддрд╛ clangd (рдХреНрд▓реЕрдВрдЧ рд╕рд░реНрд╡реНрд╣рд░), рдЬреНрдпрд╛рдордзреНрдпреЗ рдкрд╛рд░реНрд╢реНрд╡рднреВрдореА рдЗрдВрдбреЗрдХреНрд╕ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдореЛрдб рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдХреЛрдбрд╕рд╣ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ (рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА, рд╕реНрд╡рдпрдВ рдЖрдгрд┐ рдореЕрдХреНрд░реЛ рд╡реНрдпрд╛рдЦреНрдпрд╛рдВрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░, рдПрд╕реНрдХреЗрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреЗ рдЕрдирд╕реНрдХреЗрдк рдХреЗрд▓реЗрд▓реНрдпрд╛рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░), рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдХреНрд▓реЕрдВрдЧ-рдЯреАрдбреА рдХрдбреВрди рдЪреЗрддрд╛рд╡рдгреА, рд╢реАрд░реНрд╖рд▓реЗрдЦ рдлрд╛рдпрд▓реАрдВрдордзреАрд▓ рддреНрд░реБрдЯреАрдВрдЪреЗ рд╡рд┐рд╕реНрддреГрдд рдирд┐рджрд╛рди рдЖрдгрд┐ рдкреНрд░рдХрд╛рд░ рдкрджрд╛рдиреБрдХреНрд░рдорд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд▓реА;

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

  • рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рднрд╛рдЬрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдп LLD рд▓рд┐рдВрдХрд░рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдЕрдиреЗрдХ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рдЬреНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдЧрд│реНрдпрд╛ ELF рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕реНрдерд┐рдд рдЖрд╣реЗ. рд╣реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд▓реЙрдиреНрдЪ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рдЬреЗ рдСрдкрд░реЗрд╢рди рджрд░рдореНрдпрд╛рди рдЖрд╡рд╢реНрдпрдХрддреЗрдиреБрд╕рд╛рд░ рдЗрддрд░ рдШрдЯрдХ рд▓реЛрдб рдХрд░реЗрд▓ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдЕрдВрдЧрднреВрдд рдкреАрдбреАрдПрдл рд╡реНрд╣реНрдпреВрдЕрд░рд▓рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рд╡рд┐рднрдХреНрдд рдХрд░реВ рд╢рдХрддрд╛, рдЬреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреАрдбреАрдПрдл рдЙрдШрдбреЗрд▓ рддреЗрд╡реНрд╣рд╛рдЪ рд▓реЛрдб рд╣реЛрдИрд▓. рдлрд╛рдЗрд▓).

    рдПрд▓рдПрд▓рдбреА рд▓рд┐рдВрдХрд░ рд╕рдореЛрд░ рдЖрдгрд▓реЗ arm32_7, arm64, ppc64le рдЖрдгрд┐ x86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рд▓рд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рд╕реНрдерд┐рддреАрдд.
    рдирд╡реАрди рдкрд░реНрдпрд╛рдп "-" (рдЖрдКрдЯрдкреБрдЯ рдЯреВ stdout), "-[no-]allow-shlib-undefined", "-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд-glob", "-nmagic", "-omagic", "-рдирд┐рд░реНрднрд░-рд▓рд╛рдпрдмреНрд░рд░реА", " - z ifunc-noplt" рдЖрдгрд┐ "-z рд╕рд╛рдорд╛рдиреНрдп-рдкреГрд╖реНрда-рдЖрдХрд╛рд░". AArch64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА, BTI (рдмреНрд░рд╛рдВрдЪ рдЯрд╛рд░реНрдЧреЗрдЯ рдЗрдВрдбрд┐рдХреЗрдЯрд░) рдЖрдгрд┐ PAC (рдкреЙрдЗрдВрдЯрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЛрдб) рд╕реВрдЪрдирд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. MIPS, RISC-V рдЖрдгрд┐ PowerPC рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рд╕рдорд░реНрдерди рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╕реБрдзрд╛рд░рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. WebAssembly рд╕рд╛рдареА рдбрд╛рдпрдиреЕрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧрд╕рд╛рдареА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ;

  • libc++ рдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдлрдВрдХреНрд╢рдиреНрд╕ рдЖрдХрд╛рд░, std::is_constant_evaluated, std::midpoint рдЖрдгрд┐ std::lerp, рдкрджреНрдзрддреА "рд╕рдореЛрд░" рдЖрдгрд┐ "рдмреЕрдХ" std::span рдордзреНрдпреЗ рдЬреЛрдбрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд, std::is_unbounded_array рдЖрдгрд┐ std::is_bounded_array рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. , std рдХреНрд╖рдорддрд╛рдВрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ: :atomic. GCC 4.9 рд╕рд╛рдареА рд╕рдорд░реНрдерди рдмрдВрдж рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ (GCC 5.1 рдЖрдгрд┐ рдирд╡реАрди рдкреНрд░рдХрд╛рд╢рдирд╛рдВрд╕рд╣ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ). рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдореА рд╣реЛрддреЛ (WebAssembly рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЯрд░рдлреЗрд╕, рдмреНрд░рд╛рдЙрдЭрд░рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ WebAssembly рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЗрдВрдЯрд░рдлреЗрд╕);
  • рдирд╡реАрди рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. рдХрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ bcmp рдордзреНрдпреЗ memcmp рдХреЙрд▓рдЪреЗ рд░реВрдкрд╛рдВрддрд░ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗ. рдЬрдВрдк рдЯреЗрдмрд▓реНрд╕рд╕рд╛рдареА рд░реЗрдВрдЬ рдЪреЗрдХрд┐рдВрдЧрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡рдЧрд│рдгреЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рд▓реЛрдЕрд░ рд╕реНрд╡рд┐рдЪ рдмреНрд▓реЙрдХреНрд╕ рдкреЛрд╣реЛрдЪреВ рд╢рдХрдд рдирд╛рд╣реАрдд рдХрд┐рдВрд╡рд╛ рдЬреЗрд╡реНрд╣рд╛ рд╕реВрдЪрдирд╛ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдд рдирд╛рд╣реАрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡реНрд╣реЙрдЗрдб рдкреНрд░рдХрд╛рд░рд╛рд╕рд╣ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рддрд╛рдирд╛;
  • RISC-V рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рдмреЕрдХрдПрдВрдб рд╕реНрдерд┐рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗ рдпрд╛рдкреБрдвреЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдореНрд╣рдгреВрди рдареЗрд╡рд▓реЗрд▓реЗ рдирд╛рд╣реА рдЖрдгрд┐ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ. MAFDC рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╣ RV32I рдЖрдгрд┐ RV64I рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╕реЗрдЯ рд╡реЗрд░рд┐рдПрдВрдЯрд╕рд╛рдареА рдкреВрд░реНрдг рдХреЛрдб рдЬрдирд░реЗрд╢рди рд╕рдкреЛрд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ;
  • X86, AArch64, ARM, SystemZ, MIPS, AMDGPU рдЖрдгрд┐ PowerPC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рдмреЕрдХрдПрдВрдбрдордзреНрдпреЗ рдЕрдиреЗрдХ рд╕реБрдзрд╛рд░рдгрд╛ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА
    AArch64 рдиреЗ SVE2 (рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╡реЗрдХреНрдЯрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╢рди 2) рдЖрдгрд┐ MTE (рдореЗрдорд░реА рдЯреЕрдЧрд┐рдВрдЧ рд╡рд┐рд╕реНрддрд╛рд░) рд╕реВрдЪрдирд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ; ARM рдмреЕрдХрдПрдВрдбрдордзреНрдпреЗ, Armv8.1-M рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрдгрд┐ MVE (M-рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╡реЗрдХреНрдЯрд░ рд╡рд┐рд╕реНрддрд╛рд░) рд╡рд┐рд╕реНрддрд╛рд░рд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ. GFX10 (Navi) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рд╕рдорд░реНрдерди AMDGPU рдмреЕрдХрдПрдВрдбрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдлрдВрдХреНрд╢рди рдХреЙрд▓рд┐рдВрдЧ рдХреНрд╖рдорддрд╛ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдПрдХрддреНрд░рд┐рдд рдкрд╛рд╕ рд╕рдХреНрд░рд┐рдп рдХреЗрд▓рд╛ рдЖрд╣реЗ. DPP (рдбреЗрдЯрд╛-рд╕рдорд╛рдВрддрд░ рдЖрджрд┐рдо).

  • LLDB рдбреАрдмрдЧрд░рдордзреНрдпреЗ рдЖрддрд╛ рдмреЕрдХрдЯреНрд░реЗрд╕рд╕рд╛рдареА рд░рдВрдЧ рд╣рд╛рдпрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдЖрд╣реЗ рдЖрдгрд┐ DWARF4 debug_types рдЖрдгрд┐ DWARF5 debug_info рдмреНрд▓реЙрдХреНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ;
  • COFF рд╕реНрд╡рд░реВрдкрд╛рддреАрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдгрд┐ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди llvm-objcopy рдЖрдгрд┐ llvm-strip рдпреБрдЯрд┐рд▓рд┐рдЯрд┐рдЬрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ.

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

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