Hi everyone,

Here is our monthly report for gccrs for the month of August 2025.

Overview



Thanks again to Open Source Security, inc and Embecosm for their ongoing

support for this project.



Project update



The month of August was focused on bug fixing for building core, once

again. We identified some issues in our macro expansion and reworked our

ExpandVisitor, a piece of code we had originally written 3 years ago

which contained some shortcomings and would not expand macro invocations

in all places required. We implemented a new visitor to visit nodes from

their container, and potentially reseat their pointer - which fixed a

lot of the issues and increased the completeness of the compiler. We

then transformed all of our mutating visitors into visitors inheriting

from this container visitor, which resulted in a cleaner codebase and a

more correct front end.



Google Summer of Code also came to an end, with both our students

Ryutaro Okada and Zhi Heng successfully completing their projects and

earning top scores in their final evaluations. It was a joy to work

alongside them on their projects, and we hope to see them contribute in

the future.



As a reminder, our current objective is to get gccrs to a state where it

can compile the Linux kernel's Rust parts. The Rust-for-Linux project

does not depend on the entire Rust standard library (std), but only on

core - like a lot of Rust embedded projects. However, because the

project wants to benefit from all of Rust's functionalities, they are

reimplementing parts of the standard library using the kernel's memory

allocator - this enables Rust kernel module developers to use types such

as Vec<T>, or String. As such, the milestones we worked on this summer

are aimed at two objectives:



1.  Compile Rust's core library, as it is the sole dependency of the

    Linux kernel's Rust crate

2.  Compile the Rust kernel crate



In order to do this, we had to implement some new Rust features over the

summer: namely, try blocks and while-let loops, both used in core and

within the kernel. The kernel makes use of more recent Rust features

that are not present in the version we target, so we must implement them

as well - for example, the offset_of macro.



Our first objective is the kernel's alloc crate, a reimplementation of

parts of the Rust std crate responsible for implementing dynamically

allocated types. Thanks to the work of our contributors over the summer,

we were able to implement all of the required language features

mentioned above. We are now debugging a few remaining bugs in our name

resolution and macro expansion passes.



The next two weeks of work on the project will be focused on these bugs,

and the last two weeks of the month of September will be solely

dedicated to compiling the Linux kernel's alloc crate.



We are currently interviewing two interns who would contribute to the

project for the period of September to January - we are currently

designing milestones for them, so that they may contribute meaningfully

to the project while gaining work experience within our company Embecosm

SAS.



Finally, we will also be present at three major conferences in

September:



-   Oxidize in Berlin, Germany

-   Kangrejos in Oviedo, Spain

-   GNU Cauldron in Port, Portugal



Pierre-Emmanuel and Arthur will be giving talks at these three venues

and we hope to meet with everyone interested in the project!



Community call



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



-   Jitsi link

-   Calendar ID:

7060a0923ffebd3cb52b1afef35a28ff7b64f05962c9af84c23b1847f1f5f...@group.calendar.google.com

-   Google calendar link

-   iCal link



Call for contribution



-   https://github.com/Rust-GCC/gccrs/issues/2500



-   https://github.com/Rust-GCC/gccrs/issues/2376



Completed Activities



-   gccrs: Fix segv when handling invalid array capacities PR4120

-   More const generics development PR4119

-   Get rid of TyTy::BaseType can_(eq) interface PR4118

-   Unify path-to-type handling in Late resolver PR4113

-   Recognize rustc_allow_const_fn_unstable PR4111

-   nr1.0: Remove chunks of resolution phase PR4110

-   nr1.0: Remove support in expansion phase PR4109

-   Implement missing var decl binding & read-only checker cases for

    TuplePatternItemsHasRest PR4106

-   Emit error on lonely self use declaration PR4103

-   Do not dump the AST if the parser emit errors PR4101

-   Separate strip information from internal state PR4100

-   Avoid std::unique_ptr<std::string> in Token PR4097

-   gccrs: Refactor AST Patterns that hold multiple pattern items PR4096

-   Remove Parser::parse_tuple_index_expr_float PR4095

-   nr1.0: Remove support in privacy checker PR4094

-   nr1.0: Remove support in pattern checker PR4093

-   nr1.0: Remove support in borrow checker PR4092

-   nr1.0: Remove support in rust-session-manager.cc PR4091

-   Eagerly expand format_args macro PR4089

-   ci: Fix arm64 ci PR4088

-   Remove Parser::parse_path_in_expression_pratt PR4087

-   Partial eq fn field PR4084

-   Expect identifier subpatterns to be non-alt PR4083

-   gccrs: fix ICE for empty enum variant PR4081

-   Add AST::PointerVisitor PR4079

-   gccrs: fix ICE by skipping invalid (non-FNDEF) candidates PR4078

-   Reject empty cfg_(attr) PR4077

-   Handle patterns in macro expansion PR4076

-   nr2.0: Fix ChangeLog entry PR4075

-   Improve libformat_parser FFI PR4074

-   Fix Self macro and partial macro invocation parsing null check

    PR4073

-   Finish up subpattern codegen support for identifier patterns PR4072

-   Wildcard use declaration PR4070

-   Replace old read-only checker with new one. PR4069

-   CfgStrip AST nodes marked with #[test] PR4067

-   Collect lang items after expansion PR4066

-   Remove #[simd_test] support PR4065

-   Improve handling of non-final path segments PR4063

-   gccrs: Implement rest pattern support for slice patterns PR4062

-   Fix Macro builtins asm clobber infinite loop PR4061

-   gccrs: fix ICE in convert_(tree) for tuple destructuring with ref

    PR4059

-   Allow early resolution to use the language prelude PR4058

-   Detect failure to match an ident metavariable PR4057

-   Add checks to ExpandVisitor PR4052

-   gccrs: Fix ICE on exclusive_(rangepattern) lowering PR4049

-   Exclude some inline assembly test PR4048

-   Misc fixes in headers PR4045

-   Improve handling of AttrInputLiteral PR4044

-   Sync with upstream fa099f248e2462ecd5ab8b0cadd348aaf11bb093 PR4043

-   Recognize rustc_args_required_const attribute PR4042

-   Remove undefined behavior with static_cast PR4041

-   Handle attributes in expression macros PR4040

-   gccrs: Refactor HIR::PatternItem class and its derivatives PR4039

-   Explicitely create empty vector PR4029

-   Add offset_(of)!() evaluation PR4021

-   Make AttributeParser rely more on Parser PR4018

-   ci: Bump from macos-13 to macos-15 PR4001

-   Implement readonly checker on HIR PR3881

-   Fix ICE when trying to compile enums with non-const discriminants.

    PR3681

-   Fix Error Code for Attempted to call something which isn't a

    function nor a method. PR3496



Contributors this month



-   Zhi Heng

-   Ryutaro Okada

-   Lishin

-   Marc Poulhiès

-   Owen Avery

-   Pierre-Emmanuel Patry

-   Philip Herron

-   Arthur Cohen



Overall Task Status



  Category      Last Month   This Month   Delta

  ------------- ------------ ------------ -------

  TODO          469          396          -73

  In Progress   109          110          +1

  Completed     1114         1135         +21



Bugs



  Category      Last Month   This Month   Delta

  ------------- ------------ ------------ -------

  TODO          207          198          -9

  In Progress   54           49           -5

  Completed     526          558          +32



Test Cases



  TestCases   Last Month   This Month   Delta

  ----------- ------------ ------------ -------

  Passing     10089        10189        +100

  Failed      -            -            -

  XFAIL       64           64           -

  XPASS       -            -            -



Milestones Progress



Milestone                    Last Month   This Month  Delta  Target GCC

---------------------------- ------------ ----------- ------ -----------

Final Inline assembly fixes  65%          100%        +35%   GCC 16.1



Upcoming Milestone

-------------------------------

Unstable RfL features

Generic Associated Types

RfL const generics

frontend plugin hooks

Handling the testsuite issues

main shim

Final core attributes

Core nightly features

Defered inference

Fn traits fixes

Recursive types

Drop

Pin, PinInit



Past Milestone

-----------------------------------

Data Structures 1 - Core

Control Flow 1 - Core

Data Structures 2 - Generics

Data Structures 3 - Traits

Control Flow 2 - Pattern Matching

Macros and cfg expansion

Imports and Visibility

Const Generics

Initial upstream patches

Upstream initial patchset

Update GCC's master branch

Final set of upstream patches

Borrow Checking 1

Procedural Macros 1

GCC 13.2 Release

GCC 14 Stage 3

GCC 14.1 Release

format_(args)!() support

GCC 14.2

GCC 15.1

Unhandled attributes

Inline assembly

Rustc Testsuite Adaptor

Borrow checker improvements

Deref and DerefMut improvements

Indexing fixes

Iterator fixes

Auto traits improvements

Lang items

alloc parser issues

std parser issues

Question mark operator

Name resolution 2.0 rework

Macro expansion

Remaining typecheck issues

cfg-core

Codegen fixes

black_(box) intrinsic

let-else

Specialization

cfg-rfl

Downgrade to Rust 1.49

try blocks

while-let loops

offset_(of)!() builtin macro

Explicit generics with impl Trait



Planned Activities



-   Finish debugging core

-   Start experimenting with the kernel's Rust code


Best,

Arthur

Attachment: OpenPGP_0x1B3465B044AD9C65.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to