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
OpenPGP_0x1B3465B044AD9C65.asc
Description: OpenPGP public key
OpenPGP_signature.asc
Description: OpenPGP digital signature