Phát hành bộ biên dịch LLVM 13.0

Sau sáu tháng phát triển, dự án LLVM 13.0 đã được ra mắt - một bộ công cụ tương thích với GCC (trình biên dịch, trình tối ưu hóa và trình tạo mã) giúp biên dịch các chương trình thành mã bit trung gian của các lệnh ảo giống RISC (một máy ảo cấp thấp có hệ thống tối ưu hóa đa cấp). Mã giả được tạo có thể được chuyển đổi bằng trình biên dịch JIT thành các lệnh máy trực tiếp tại thời điểm thực hiện chương trình.

Những cải tiến trong Clang 13.0:

  • Đã triển khai hỗ trợ cho các lệnh gọi đuôi được đảm bảo (gọi một chương trình con ở cuối hàm, tạo thành một đệ quy đuôi nếu chương trình con đó gọi chính nó). Hỗ trợ cho các lệnh gọi tail được đảm bảo được cung cấp bởi thuộc tính "[[clang::musttail]]" trong C++ và "__attribute__((musttail))" trong C, được sử dụng trong câu lệnh "return". Tính năng này cho phép bạn triển khai tối ưu hóa bằng cách triển khai mã thành vòng lặp phẳng để tiết kiệm mức tiêu thụ ngăn xếp.
  • Các khai báo "sử dụng" và phần mở rộng clang cung cấp hỗ trợ cho việc xác định các thuộc tính kiểu C++ 11 bằng định dạng "[[]]".
  • Đã thêm cờ "-Mã định danh dành riêng" để hiển thị cảnh báo khi bạn chỉ định mã định danh dành riêng trong mã người dùng.
  • Đã thêm cờ "-Wunused-but-set-parameter" và "-Wunused-but-set-variable" để hiển thị cảnh báo nếu một tham số hoặc biến được đặt nhưng không được sử dụng.
  • Đã thêm cờ "-Wnull-pointer-trừ" để đưa ra cảnh báo nếu mã có thể đưa ra hành vi không xác định do sử dụng con trỏ null trong các thao tác trừ.
  • Đã thêm cờ "-fstack-usage" để tạo cho mỗi tệp mã một tệp ".su" bổ sung chứa thông tin về kích thước của khung ngăn xếp cho từng chức năng được xác định trong tệp đang được xử lý.
  • Một loại đầu ra mới đã được thêm vào bộ phân tích tĩnh - “sarif-html”, dẫn đến việc tạo báo cáo đồng thời ở định dạng HTML và Sarif. Đã thêm kiểm tra allocClassWithName mới. Khi chỉ định tùy chọn “-analyzer-display-progress”, thời gian phân tích của từng chức năng sẽ được hiển thị. Bộ phân tích con trỏ thông minh (alpha.cplusplus.SmartPtr) gần như đã sẵn sàng.
  • Các khả năng liên quan đến hỗ trợ OpenCL đã được mở rộng. Đã thêm hỗ trợ cho các tiện ích mở rộng mới cl_khr_integer_dot_product, cl_khr_extends_bit_ops, __cl_clang_bitfields và __cl_clang_non_portable_kernel_param_types. Việc triển khai đặc tả OpenCL 3.0 vẫn tiếp tục. Đối với C, đặc tả OpenCL 1.2 được sử dụng theo mặc định trừ khi phiên bản khác được chọn rõ ràng. Đối với C++, hỗ trợ cho các tệp có phần mở rộng “.clcpp” đã được thêm vào.
  • Hỗ trợ các chỉ thị chuyển đổi vòng lặp (“#pragma omp unrol” và “#pragma omp Tile”) được xác định trong đặc tả OpenMP 5.1 đã được triển khai.
  • Đã thêm tùy chọn vào tiện ích định dạng clang: SpacesInLineCommentPrefix để xác định số lượng khoảng trắng trước nhận xét, IndentAccessModifiers, LambdaBodyIndentation và PPIndentWidth để kiểm soát việc căn chỉnh các mục nhập, biểu thức lambda và chỉ thị tiền xử lý. Khả năng sắp xếp liệt kê các tệp tiêu đề (SortIncludes) đã được mở rộng. Đã thêm hỗ trợ để định dạng tệp JSON.
  • Một phần lớn các séc mới đã được thêm vào linter clang-tidy.

Những cải tiến chính trong LLVM 13.0:

  • Добавлена опция «-ehcontguard» для использования технологии CET (Windows Control-flow Enforcement Technology) для защиты на этапе обработки исключений от выполнения эксплоитов, построенных с использованием приёмов возвратно-ориентированного программирования (ROP, Return-Oriented Programming).
  • Dự án debuginfo-test đã được đổi tên thành cross-project-tests và được thiết kế để kiểm tra các thành phần từ các dự án khác nhau, không giới hạn ở thông tin gỡ lỗi.
  • Hệ thống lắp ráp cung cấp hỗ trợ để xây dựng một số bản phân phối, ví dụ: một bản phân phối có tiện ích và bản phân phối kia có thư viện dành cho nhà phát triển.
  • Trong phần phụ trợ của kiến ​​trúc AArch64, hỗ trợ cho các tiện ích mở rộng Armv9-A RME (Phần mở rộng quản lý vương quốc) và SME (Phần mở rộng ma trận có thể mở rộng) được triển khai trong trình biên dịch chương trình.
  • Hỗ trợ cho ISA V68/HVX đã được thêm vào phần phụ trợ cho kiến ​​trúc Hexagon.
  • Phần phụ trợ x86 đã cải thiện khả năng hỗ trợ cho bộ xử lý AMD Zen 3.
  • Đã thêm hỗ trợ cho APU GFX1013 RDNA2 vào phần phụ trợ AMDGPU.
  • В Libc++ продолжена реализация новых возможностей стандартов C++20 и C++2b, в том числе завершена реализация библиотеки «concepts». Для платформы Windows на базе MinGW добавлена поддержка std::filesystem. Разделены заголовочные файлы <algorithm>, <iterator> и <utility>. Добавлена сборочная опция LIBCXX_ENABLE_INCOMPLETE_FEATURES для отключения заголовочных файлов с не полностью реализованной функциональностью.
  • Các khả năng của trình liên kết LLD đã được mở rộng, trong đó triển khai hỗ trợ cho bộ xử lý Big-endian Aarch64 và phần phụ trợ Mach-O đã được đưa đến trạng thái cho phép liên kết các chương trình thông thường. Bao gồm các cải tiến cần thiết để liên kết Glibc bằng LLD.
  • Tiện ích llvm-mca (Trình phân tích mã máy) đã bổ sung hỗ trợ cho các bộ xử lý thực thi các hướng dẫn theo thứ tự (đường dẫn siêu vô hướng theo thứ tự), chẳng hạn như ARM Cortex-A55.
  • Trình gỡ lỗi LLDB cho nền tảng AArch64 cung cấp hỗ trợ đầy đủ cho Xác thực con trỏ, MTE (MemTag, Tiện ích mở rộng gắn thẻ bộ nhớ) và các thanh ghi SVE. Đã thêm các lệnh cho phép bạn liên kết các thẻ với từng thao tác cấp phát bộ nhớ và tổ chức kiểm tra con trỏ khi truy cập bộ nhớ, con trỏ này phải được liên kết với thẻ chính xác.
  • Trình gỡ lỗi LLDB và giao diện người dùng cho ngôn ngữ Fortran - Flang đã được thêm vào tập hợp nhị phân do dự án tạo ra.

Nguồn: opennet.ru

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster