GCC Front-End For Rust

Alternative Rust Compiler for GCC

View the Project on GitHub

June 2023 Monthly report

Overview

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

Milestone Progress

The number of contributions increased this month with over 50 pull requests merged in gccrs from eight contributors and a couple more in our various tooling projects, as well as valuable input on our different platforms, which remains a tremendous help in the development of this compiler. Our two Google Summer of Code students, Mahad Muhammad and Raiki Tamura, are progressing quickly on their projects and submitting high quality contributions - we are getting more and more of Rust’s error codes integrated to our compiler, which will assist us in trying to pass the rustc testsuite, and our lexer is slowly but surely becoming Unicode compliant with a high number of unit tests to boot. Their mid-term evaluations will start next week, and we are excited to enter the second phase of their projects, where more technical contributions will come in: v0 name mangling and punycode support for Raiki Tamura, and internal GCC cleanups for the error emitting code for Mahad Muhammad.

One unforeseen hurdle this month was the need for a complete rework of our name resolution pass. Name resolution in Rust is a complex process, which should be divided in two passes. In gccrs, name resolution was developed before macro expansion, meaning that macro name resolution was not taken into account properly. This is now starting to cause issues as we try and fix the last few remaining bugs around imports, macro exports and early name resolution in general for the compilation of core 1.49. We have spent a lot of time trying to improve the existing name resolution algorithms to stry and split them in two (or more) distinct passes, but this is proving to be a difficult task. Furthermore, it is an area of the compiler which deserves a little more attention, and has not been improved much since its creation. Philip and Arthur took the decision to rewrite this pass of the compiler, aiming for simpler data structures, simpler algorithms and less global state, making the name resolution pass a three-pass process: TopLevel name resolution, Early name resolution and Late name resolution. The TopLevel pass is in charge of collecting definitions for the entire program, as Rust allows you to call a function defined later in the source. Early takes care of macro name resolution and imports, and works in a fixed point fashion with TopLevel. Finally, Late is your “classical” name resolution pass, and resolves functions, types and variables.

We are mostly done with the data structures and are in the process of merging them to our compiler. We now need to write the missing visitors and name resolution 2.0 will be complete.

In our typesystem, Philip spent a lot of time chasing some of the few remaining bugs needed for handling iterators. Most of the fixes are now one-line fixes, which is quite disheartening, but also an indication that we are getting closer and closer!

We are also in the process of welcoming Jakub Dupak’s Master thesis project, which will be focused on adding support for the Polonius borrow checker to gccrs. This exciting work should start in the upcoming months.

Community call

We will have our next monthly community call on the 10th of July 2023. 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.

Completed Activities

Contributors this month

Overall Task Status

Category Last Month This Month Delta
TODO 227 237 +10
In Progress 50 46 +4
Completed 670 696 +26

Test Cases

TestCases Last Month This Month Delta
Passing 7924 7974 +50
Failed - - -
XFAIL 53 53 -
XPASS - - -

Bugs

Category Last Month This Month Delta
TODO 66 73 +7
In Progress 22 22 -
Completed 327 346 +19

Milestones Progress

Note that the intrinsics milestone percentage on github is not representative: It shows a 73% completion rate, but does not take into account the tracking issues with dozens of unresolved items. Thus the percentage is computed using the sum of issues and tracked items done divided by the sums of issues and tracked items overall. Similarly, the Update GCC’s master branch milestone contains a tracking issue containing over 200 tasks. The percentage shown here takes this into account.

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 0% 0% - TBD - 15th Aug 2023
AST Pipeline for libcore 1.49 51% 70% +19% 13th Apr 2023 - 1st Jul 2023
HIR Pipeline for libcore 1.49 53% 67% +14% 13th Apr 2023 - TBD
Procedural Macros 1 70% 70% - 13th Apr 2023 - 6th Aug 2023
GCC 13.2 Release 26% 42% +12% 13th Apr 2023 - 15th Jul 2023
GCC 14 Stage 3 0% 0% - TBD - 1st Nov 2023
core 1.49 functionality [AST] 0% 0% - 1st Jul 2023 - 1st Nov 2023
Rustc Testsuite Prerequisistes 0% 0% - TBD - 1st Sep 2023
Intrinsics and builtins 18% 18% - 6th Sep 2022 - TBD
Const Generics 2 0% 0% - TBD - TBD
Rust-for-Linux compilation 0% 0% - TBD - TBD

Testing project

The testing project is on hold as we try and figure out some of the issues we’re running into with GitHub and our various automations around it.

Planned Activities

Detailed changelog