ืฉื—ืจื•ืจ ืžืขืจืš ื”ืžื”ื“ืจ LLVM 13.0

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ืฉืœ ืคื™ืชื•ื—, ื”ื•ืฆื’ื” ื”ืฉื—ืจื•ืจ ืฉืœ ืคืจื•ื™ืงื˜ LLVM 13.0 - ืขืจื›ืช ื›ืœื™ื ืชื•ืืžืช GCC (ืžื”ื“ืจื™ื, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื•ืžื—ื•ืœืœื™ ืงื•ื“) ื”ืžืจื›ื™ื‘ื” ืชื•ื›ื ื™ื•ืช ืœืงื•ื“ ื‘ื™ื ื™ื™ื ืฉืœ ื”ื•ืจืื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื“ืžื•ื™ื•ืช RISC (ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืจืžื” ื ืžื•ื›ื” ืขื ืžืขืจื›ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืจื•ื‘ืช ืจืžื•ืช). ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ื”ืคืกืื•ื“ื•ืงื•ื“ ืฉื ื•ืฆืจ ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ JIT ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื™ืฉื™ืจื•ืช ื‘ื–ืžืŸ ื‘ื™ืฆื•ืข ื”ืชื•ื›ื ื™ืช.

ืฉื™ืคื•ืจื™ื ื‘-Clang 13.0:

  • ื”ื˜ืžื™ืขื” ืชืžื™ื›ื” ื‘ืงืจื™ืื•ืช ื–ื ื‘ ืžื•ื‘ื˜ื—ื•ืช (ืงืจื™ืื” ืœืชืชื™ ืฉื’ืจื” ืžืžืฉ ื‘ืกื•ืฃ ืคื•ื ืงืฆื™ื”, ื™ืฆื™ืจืช ืจืงื•ืจืกื™ื™ืช ื–ื ื‘ ืื ืชืช-ื”ืฉื’ืจื” ืงื•ืจืืช ืœืขืฆืžื”). ืชืžื™ื›ื” ื‘ืฉื™ื—ื•ืช ื–ื ื‘ ืžื•ื‘ื˜ื—ื•ืช ืžืกื•ืคืงืช ืขืœ ื™ื“ื™ ื”ืชื›ื•ื ื” "[[clang::musttail]]" ื‘-C++ ื•-"__attribute__((musttail))" ื‘-C, ื”ืžืฉืžืฉืช ื‘ื”ืฆื”ืจืช "ื”ื—ื–ืจื”". ื”ืชื›ื•ื ื” ืžืืคืฉืจืช ืœืš ืœื™ื™ืฉื ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืขืœ ื™ื“ื™ ืคืจื™ืกืช ืงื•ื“ ื‘ืื™ื˜ืจืฆื™ื” ืฉื˜ื•ื—ื” ื›ื“ื™ ืœื—ืกื•ืš ื‘ืฆืจื™ื›ืช ืžื—ืกื ื™ืช.
  • ื”ืฆื”ืจื•ืช "ืฉื™ืžื•ืฉ" ื•ืชื•ืกืคื•ืช clang ืžืกืคืงื•ืช ืชืžื™ื›ื” ืœื”ื’ื“ืจืช ืชื›ื•ื ื•ืช ื‘ืกื’ื ื•ืŸ C++11 ื‘ืืžืฆืขื•ืช ื”ืคื•ืจืžื˜ "[[]]".
  • ื”ื•ืกื™ืฃ ืืช ื”ื“ื’ืœ "-Wreserved-identifier" ื›ื“ื™ ืœื”ืฆื™ื’ ืื–ื”ืจื” ื›ืืฉืจ ืืชื” ืžืฆื™ื™ืŸ ืžื–ื”ื™ื ืฉืžื•ืจื™ื ื‘ืงื•ื“ ื”ืžืฉืชืžืฉ.
  • ื ื•ืกืคื• ื“ื’ืœื™ื "-Wunused-but-set-parameter" ื•-"-Wunused-but-set-variable" ื›ื“ื™ ืœื”ืฆื™ื’ ืื–ื”ืจื” ืื ืคืจืžื˜ืจ ืื• ืžืฉืชื ื” ืžื•ื’ื“ืจ ืืš ืœื ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ.
  • ื ื•ืกืฃ ื“ื’ืœ "-Wnull-pointer-subtraction" ื›ื“ื™ ืœื”ื ืคื™ืง ืื–ื”ืจื” ืื ื”ืงื•ื“ ืขืฉื•ื™ ืœื”ืฆื™ื’ ื”ืชื ื”ื’ื•ืช ืœื ืžื•ื’ื“ืจืช ืขืงื‘ ื”ืฉื™ืžื•ืฉ ื‘ืžืฆื‘ื™ืข null ื‘ืคืขื•ืœื•ืช ื—ื™ืกื•ืจ.
  • ื”ื•ืกื™ืฃ ืืช ื”ื“ื’ืœ "-fstack-usage" ื›ื“ื™ ืœื™ืฆื•ืจ ืขื‘ื•ืจ ื›ืœ ืงื•ื‘ืฅ ืงื•ื“ ืงื•ื‘ืฅ ".su" ื ื•ืกืฃ ื”ืžื›ื™ืœ ืžื™ื“ืข ืขืœ ื’ื•ื“ืœ ื”-stack frames ืขื‘ื•ืจ ื›ืœ ืคื•ื ืงืฆื™ื” ืฉื”ื•ื’ื“ืจื” ื‘ืงื•ื‘ืฅ ื”ืžืขื•ื‘ื“.
  • ืกื•ื’ ืคืœื˜ ื—ื“ืฉ ื ื•ืกืฃ ืœื ืชื— ื”ืกื˜ื˜ื™ - "sarif-html", ืฉืžื•ื‘ื™ืœ ืœื”ืคืงืช ื“ื•ื—ื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืคื•ืจืžื˜ื™ื HTML ื•- Sarif. ื ื•ืกืฃ ื‘ื“ื™ืงืช allocClassWithName ื—ื“ืฉื”. ื‘ืขืช ืฆื™ื•ืŸ ื”ืืคืฉืจื•ืช "-analyzer-display-progress", ื–ืžืŸ ื”ื ื™ืชื•ื— ืฉืœ ื›ืœ ืคื•ื ืงืฆื™ื” ืžื•ืฆื’. ืžื ืชื— ื”ืžืฆื‘ื™ืขื™ื ื”ื—ื›ื (alpha.cplusplus.SmartPtr) ื›ืžืขื˜ ืžื•ื›ืŸ.
  • ื”ื™ื›ื•ืœื•ืช ื”ืงืฉื•ืจื•ืช ืœืชืžื™ื›ื” ื‘-OpenCL ื”ื•ืจื—ื‘ื•. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื”ืจื—ื‘ื•ืช ื—ื“ืฉื•ืช cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ื•-__cl_clang_non_portable_kernel_param_types. ื”ื™ื™ืฉื•ื ืฉืœ ืžืคืจื˜ OpenCL 3.0 ื ืžืฉืš. ืขื‘ื•ืจ C, ืžืคืจื˜ OpenCL 1.2 ืžืฉืžืฉ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืืœื ืื ื ื‘ื—ืจื” ื’ืจืกื” ืื—ืจืช ื‘ืžืคื•ืจืฉ. ืขื‘ื•ืจ C++, ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืงื‘ืฆื™ื ืขื ื”ืกื™ื•ืžืช ".clcpp".
  • ื”ื•ื˜ืžืขื” ืชืžื™ื›ื” ื‘ื”ื ื—ื™ื•ืช ืœืฉื™ื ื•ื™ ืœื•ืœืื” ("#pragma omp unrol" ื•-"#pragma omp tile") ื”ืžื•ื’ื“ืจื•ืช ื‘ืžืคืจื˜ OpenMP 5.1.
  • ื ื•ืกืคื• ืืคืฉืจื•ื™ื•ืช ืœื›ืœื™ ื”ืฉื™ืจื•ืช ื‘ืคื•ืจืžื˜ clang: SpacesInLineCommentPrefix ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ืžืกืคืจ ื”ืจื•ื•ื—ื™ื ืœืคื ื™ ื”ืขืจื•ืช, IndentAccessModifiers, LambdaBodyIndentation ื•-PPIndentWidth ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื™ื™ืฉื•ืจ ืฉืœ ืขืจื›ื™ื, ื‘ื™ื˜ื•ื™ื™ lambda ื•ื”ื ื—ื™ื•ืช ืงื“ื-ืžืขื‘ื“. ื”ื•ืจื—ื‘ื• ื”ืืคืฉืจื•ื™ื•ืช ืœืžื™ื•ืŸ ืกืคื™ืจืช ืงื•ื‘ืฆื™ ื”ื›ื•ืชืจื•ืช (SortIncludes). ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืขื™ืฆื•ื‘ ืงื‘ืฆื™ JSON.
  • ื—ืœืง ื’ื“ื•ืœ ืฉืœ ืฆ'ืงื™ื ื—ื“ืฉื™ื ื ื•ืกืคื• ืœ-linter clang-klang.

ื—ื™ื“ื•ืฉื™ื ืžืจื›ื–ื™ื™ื ื‘-LLVM 13.0:

  • ื”ื•ืกื™ืคื” ืืช ื”ืืคืฉืจื•ืช "-ehcontguard" ืœืฉื™ืžื•ืฉ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื™ืช CET (ื˜ื›ื ื•ืœื•ื’ื™ื™ืช Windows Control-flow Enforcement) ื›ื“ื™ ืœื”ื’ืŸ ืžืคื ื™ ื‘ื™ืฆื•ืข ืฉืœ ื ื™ืฆื•ืœื™ื ืฉื ื‘ื ื• ื‘ืืžืฆืขื•ืช ื˜ื›ื ื™ืงื•ืช ืชื›ื ื•ืช ืžื•ื ื—ื” ื”ื—ื–ืจื” (ROP) ื‘ืฉืœื‘ ื”ื˜ื™ืคื•ืœ ื‘ื—ืจื™ื’ื™ื.
  • ืคืจื•ื™ืงื˜ debuginfo-test ืฉื•ื ื” ืœ-cross-project-tests ื•ื”ื•ื ื ื•ืขื“ ืœื‘ื—ื•ืŸ ืจื›ื™ื‘ื™ื ืžืคืจื•ื™ืงื˜ื™ื ืฉื•ื ื™ื, ืœื ืžื•ื’ื‘ืœ ืœืžื™ื“ืข ื‘ืื’ื™ื.
  • ืžืขืจื›ืช ื”ื”ืจื›ื‘ื” ืžืกืคืงืช ืชืžื™ื›ื” ืœื‘ื ื™ื™ืช ืžืกืคืจ ื”ืคืฆื•ืช, ืœืžืฉืœ, ืื—ืช ืขื ื›ืœื™ ืขื–ืจ, ื•ื”ืฉื ื™ื™ื” ืขื ืกืคืจื™ื•ืช ืœืžืคืชื—ื™ื.
  • ื‘ืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช AArch64, ืชืžื™ื›ื” ื‘ื”ืจื—ื‘ื•ืช Armv9-A RME (Realm Management Extension) ื•-SME (Scalable Matrix Extension) ืžื™ื•ืฉืžืช ื‘-assembler.
  • ืชืžื™ื›ื” ื‘-ISA V68/HVX ื ื•ืกืคื” ืœืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”-Hexagon.
  • ื”-x86 backend ื™ืฉ ืชืžื™ื›ื” ืžืฉื•ืคืจืช ืขื‘ื•ืจ ืžืขื‘ื“ื™ AMD Zen 3.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ GFX1013 RDNA2 APU ืœืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ AMDGPU.
  • Libc++ ืžืžืฉื™ื›ื” ืœื™ื™ืฉื ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืฉืœ ืชืงื ื™ C++20 ื•-C++2b, ื›ื•ืœืœ ื”ืฉืœืžืช ืกืคืจื™ื™ืช "ื”ืžื•ืฉื’ื™ื". ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ std::filesystem ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช Windows ืžื‘ื•ืกืกืช MinGW. ืงื•ื‘ืฆื™ ื”ื›ื•ืชืจืช , ื•- ืžื•ืคืจื“ื™ื. ื ื•ืกืคื” ืืคืฉืจื•ืช ื‘ื ื™ื™ื” LIBCXX_ENABLE_INCOMPLETE_FEATURES ื›ื“ื™ ืœื”ืฉื‘ื™ืช ืงื‘ืฆื™ ื›ื•ืชืจื•ืช ืขื ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืื™ื ื” ืžื™ื•ืฉืžืช ื‘ืžืœื•ืื”.
  • ื”ื•ืจื—ื‘ื• ื”ื™ื›ื•ืœื•ืช ืฉืœ ืžืงืฉืจ ื”-LLD, ื‘ืžืกื’ืจืชื• ืžื™ื•ืฉืžืช ืชืžื™ื›ื” ื‘ืžืขื‘ื“ื™ Big-endian Aarch64, ื•ื”-backend ืฉืœ Mach-O ื”ื•ื‘ื ืœืžืฆื‘ ื”ืžืืคืฉืจ ืงื™ืฉื•ืจ ื‘ื™ืŸ ืชื•ื›ื ื™ื•ืช ืจื’ื™ืœื•ืช. ื›ืœืœื• ืฉื™ืคื•ืจื™ื ื”ื“ืจื•ืฉื™ื ืœืงื™ืฉื•ืจ Glibc ื‘ืืžืฆืขื•ืช LLD.
  • ื›ืœื™ ื”ืฉื™ืจื•ืช llvm-mca (Machine Code Analyzer) ื”ื•ืกื™ืคื” ืชืžื™ื›ื” ื‘ืžืขื‘ื“ื™ื ื”ืžื‘ืฆืขื™ื ื”ื•ืจืื•ืช ืœืคื™ ื”ืกื“ืจ (ืฆื™ื ื•ืจ ืขืœ-ืกืงืœืืจื™ ืœืคื™ ื”ืกื“ืจ), ื›ื’ื•ืŸ ARM Cortex-A55.
  • ืžืืชืจ ื”ื‘ืื’ื™ื LLDB ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช AArch64 ืžืกืคืง ืชืžื™ื›ื” ืžืœืื” ืขื‘ื•ืจ ืื™ืžื•ืช ืžืฆื‘ื™ืข, MTE (MemTag, ื”ืจื—ื‘ืช ืชื™ื•ื’ ื–ื™ื›ืจื•ืŸ) ื•ืื•ื’ืจื™ SVE. ื ื•ืกืคื• ืคืงื•ื“ื•ืช ื”ืžืืคืฉืจื•ืช ืœืื’ื“ ืชื’ื™ื•ืช ืœื›ืœ ืคืขื•ืœืช ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ ื•ืœืืจื’ืŸ ื‘ื“ื™ืงื” ืฉืœ ื”ืžืฆื‘ื™ืข ื‘ืขืช ื’ื™ืฉื” ืœื–ื™ื›ืจื•ืŸ, ืืฉืจ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืฉื•ื™ืš ืœืชื’ ื”ื ื›ื•ืŸ.
  • ืžืืชืจ ื”ื‘ืื’ื™ื LLDB ื•ื”ื—ื–ื™ืช ืœืฉืคืช Fortran - Flang ื ื•ืกืคื• ืœืžื›ืœื•ืœื™ื ื”ื‘ื™ื ืืจื™ื™ื ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ ื”ืคืจื•ื™ืงื˜.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”