GCC Front-End For Rust

Alternative Rust Compiler for GCC

View the Project on GitHub

May 2024 Monthly report

Overview

Thanks again to Open Source Security, inc and Embecosm for their ongoing support for this project.

Project update

We took some time this month to put together a document outlining the future of the project, like we had done last year. This document allowed us to establish smaller milestones, and to create a dependency graph in between these milestones. This, as well as an estimate of the time to complete for each issue, allows us to put together a Gantt chart which gives us start and target dates for each of the milestones. The purpose of this document is to evolve as time passes, and to reflect on our progress around the release of GCC 15.1, in one year of work.

To establish this document, we spent multiple hours painstakingly compiling each module of the core and alloc crates, hacking around the missing imports and dependencies in order to go as far as possible into the compiler pipeline, in the hope of unearthing new issues with the compiler. Because we attempted to compile each module separately, imports were not handled properly and we had to re-define huge chunks of the core library each time, making the progress very slow. However, as the high number of issues opened this month will show, this work is proving to be worthwile and gives us a clearer picture of the situation for our objectives of compiling the Rust standard library and the Rust-for-Linux project.

Speaking about Rust-for-Linux (RfL), Miguel Ojeda and Arthur had a great conversation regarding the state of the compiler and future goals of the Rust language concerning the kernel. For example, RfL no longer needs its own fork of the alloc crate - meaning that once we are able to catch up and compile the Rust standard library, we should have no issues providing this dependency to RfL. Furthermore, one of the goals of the Rust project for 2024 is to enable RfL to compile using a stable compiler, which should help us when catching up to the Rust version the kernel expects, as it will drop requirements for nightly features we might not have implemented.

Regarding GSoC, we are very impressed with the work done by our students so far. As they all had important commitments, such as internships or exams, they chose to start working on their project early and have done oustandingly. We are looking forward to more progress and we can’t wait to show you the cool features they are building.

On the technical side of things, we have started progressing towards the next milestones already. Internal compiler attributes are being handled, work has started on fixing some bugs discovered in our support of negative trait implementations (used in quite a few places in core 1.49), parser improvements are being worked on for alloc and std, and as usual, a lot of code is being cleaned up and improved continuously. Our GCC build system patch has now been reviewed, and the review comments adressed - meaning that upstreaming will start again shortly, and that GCC’s trunk will be in sync with our development repository. We are also working towards getting documentation in for GCC 14.2, which should release in the next few months.

Community call

We will have our next monthly community call on the 17th of June at 9am UTC. You can subscribe to our calendar to see when the next one will be held. The call is open to everyone, even if you would just like to sit-in and listen. You can also subscribe to our mailing-list or join our Zulip chat to be notified of upcoming events.

Call for contribution

Our error propagation expressions (expressions which use the question mark operator, of the form <expr>?) are currently forgotten in many of our AST visitors. As a result, there are unexpected cases when it comes to various parts of the compiler pipeline handling them. In that particular case, the function call’s generic arguments are not disambiguated - the compiler does not know if it needs to be handling a generic type, or a const generic value. You will need to add handling to our name resolution pass for these error propagation expressions. It would be helpful to look at the current generic disambiguation to start figuring out where it is called from, and where you need to call it.

Completed Activities

Contributors this month

Overall Task Status

Category Last Month This Month Delta
TODO 293 333 +40
In Progress 68 71 +3
Completed 831 836 +5

Test Cases

TestCases Last Month This Month Delta
Passing 8439 8507 +68
Failed - - -
XFAIL 69 69 -
XPASS - - -

Bugs

Category Last Month This Month Delta
TODO 108 126 +18
In Progress 37 40 +3
Completed 413 414 +1

Milestones Progress

Milestone Last Month This Month Delta Start Date Completion Date Target
GCC 14.2 0% 0% - 7th Jun 2024 - 15th Jun 2024
Name resolution 2.0 0% 0% - 1st Jun 2024 - 1st Apr 2025
Macro expansion 0% 0% - 1st Jun 2024 - 1st Jan 2025
Upcoming Milestone Last Month This Month Delta Start Date Completion Date Target
GCC 15.1 0% 0% - 21st Jun 2024 - 1st Jul 2024
Unhandled attributes 0% 0% - 1st Jul 2024 - 15th Aug 2024
Lang items 0% 0% - 1st Jul 2024 - 1st Sep 2024
Indexing fixes 0% 0% - 21st Jun 2024 - 15th Sep 2024
Iterator fixes 0% 0% - 21st Jun 2024 - 15th Sep 2024
Auto traits improvements 0% 0% - 15th Sep 2024 - 21st Oct 2024
Deref and DerefMut improvements 0% 0% - 28th Sep 2024 - 28th Oct 2024
Remaining typecheck issues 0% 0% - 21st Oct 2024 - 1st Jan 2025
cfg-core 0% 0% - 1st Dec 2024 - 1st Jan 2025
Question mark operator 0% 0% - 15th Dec 2024 - 21st Feb 2025
Codegen fixes 0% 0% - 7th Oct 2024 - 1st Mar 2025
Specialization 0% 0% - 1st Jan 2025 - 1st Mar 2025
Inline assembly 0% 0% - 1st Jun 2024 - 15th Sep 2024
Borrow checker improvements 0% 0% - 1st Jun 2024 - 15th Sep 2024
Rustc Testsuite Adaptor 0% 0% - 1st Jun 2024 - 15th Sep 2024
black_box intrinsic 0% 0% - 28th Oct 2024 - 28th Nov 2024
Unstable RfL features 0% 0% - 7th Jan 2025 - 1st Mar 2025
cfg-rfl 0% 0% - 7th Jan 2025 - 15th Feb 2025
alloc parser issues 0% 0% - 7th Jan 2025 - 28th Jan 2025
let-else 0% 0% - 28th Jan 2025 - 28th Feb 2025
Explicit generics with impl Trait 0% 0% - 28th Feb 2025 - 28th Mar 2025
offset_of!() builtin macro 0% 0% - 15th Mar 2025 - 15th May 2025
Generic Associated Types 0% 0% - 15th Mar 2025 - 15th Jun 2025
RfL const generics 0% 0% - 1st May 2025 - 15th Jun 2025
frontend plugin hooks 0% 0% - 15th May 2025 - 7th Jul 2025
Handling the testsuite issues 0% 0% - 15th Sep 2024 - 15th Sep 2025
std parser issues 0% 0% - 28th Jun 2025 - 28th Jul 2025
main shim 0% 0% - 28th Jul 2025 - 15th Sep 2025
Past Milestone Last Month This Month Delta Start Date Completion Date Target
Data Structures 1 - Core 100% 100% - 30th Nov 2020 27th Jan 2021 29th Jan 2021
Control Flow 1 - Core 100% 100% - 28th Jan 2021 10th Feb 2021 26th Feb 2021
Data Structures 2 - Generics 100% 100% - 11th Feb 2021 14th May 2021 28th May 2021
Data Structures 3 - Traits 100% 100% - 20th May 2021 17th Sep 2021 27th Aug 2021
Control Flow 2 - Pattern Matching 100% 100% - 20th Sep 2021 9th Dec 2021 29th Nov 2021
Macros and cfg expansion 100% 100% - 1st Dec 2021 31st Mar 2022 28th Mar 2022
Imports and Visibility 100% 100% - 29th Mar 2022 13th Jul 2022 27th May 2022
Const Generics 100% 100% - 30th May 2022 10th Oct 2022 17th Oct 2022
Initial upstream patches 100% 100% - 10th Oct 2022 13th Nov 2022 13th Nov 2022
Upstream initial patchset 100% 100% - 13th Nov 2022 13th Dec 2022 19th Dec 2022
Update GCC’s master branch 100% 100% - 1st Jan 2023 21st Feb 2023 3rd Mar 2023
Final set of upstream patches 100% 100% - 16th Nov 2022 1st May 2023 30th Apr 2023
Borrow Checking 1 100% 100% - TBD 8th Jan 2024 15th Aug 2023
Procedural Macros 1 100% 100% - 13th Apr 2023 6th Aug 2023 6th Aug 2023
GCC 13.2 Release 100% 100% - 13th Apr 2023 22nd Jul 2023 15th Jul 2023
GCC 14 Stage 3 100% 100% - 1st Sep 2023 20th Sep 2023 1st Nov 2023
GCC 14.1 Release 98% 100% +2% 2nd Jan 2024 2nd Jun 2024 15th Apr 2024
format_args!() support 100% 100% - 15th Feb 2024 - 1st Apr 2024

Planned Activities

Risks

Risk Impact (1-3) Likelihood (0-10) Risk (I * L) Mitigation
Missing features for GCC 15.1 deadline 2 1 2 Start working on required features as early as July (6mo ahead)

Detailed changelog