gccrs August 2026 Monthly report

Arthur Cohen arthur.cohen@opensrcsec.com
Mon Sep 14 12:54:59 GMT 2026


# Overview



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

support for this project.



# Project update



Over the course of the month of August, both Pierre-Emmanuel and Arthur

unfortunately got laid-off from Embecosm for economic reasons.

Thankfully, their contracts have been picked up by Open Source Security,

and work on the compiler continues as before.



Despite this tumultuous period, we have made great progress on the

compiler in both getting closer to compiling core and into compiling the

Linux kernel. For core, after closing out the Late name resolution fixes

milestone at the beginning of the month, we moved on to Lowering, a pass

which takes care of desugaring our high level AST into a more palatable

intermediate representation for the rest of the compiler, our HIR. This

pass is also responsible for verifying the validity of the AST in

multiple places, as well as desugaring certain language constructs into

others, allowing the HIR to be a smaller overall representation than the

AST, simplifying later passes such as type-checking and code generation.



We ran into several lowering errors when compiling core as certain

behaviors were unexpected or mishandled. We were able to fix all of the

shortcomings of this pass during the month of August and move on to

typechecking errors.



Our progess on the kernel happened on two fronts - we are still

reworking our handling of external crates to allow proper interaction

between the various kernel components and the core library, while

simultaneously researching and implementing nightly features that the

kernel makes use of.



The list of remaining unhandled features is as follows:



-   The ExtractIf iterator

-   Generic argument inference

-   The is_multiple_of method for unsigned types

-   Arbitrary self types and the Receiver trait

-   The #[used] attribute and its secondary form with an argument

-   CFI type encoding overriding

-   The CoercePointee trait



We have started work on the #[used] feature and now fully support it,

with one missing piece in our backend to not always mark static items as

used, but exclusively when they are used or annotated with the proper

attribute. We have also started working on the CoercePointee trait and

its associated derive, which will require substantial work on the

typechecker and in our desugaring infrastructure. Finally, we have

started working on CFI and the possibility of overriding the encoding of

a given type with the #[cfi_(encoding)] attribute. To that end, we have

reached out to commit author Alice Ryhl on the kernel side of things to

better understand why the attribute was needed, and we are currently

reviewing a patchset to GCC by Kees Cook which implements CFI for GCC,

as this feature is still not present in the compiler. We will need to

work with Kees' patches in order to enable the overriding of a type's

CFI encoding, as this feature is not currently supported by the

patchset, and are discussing this with other GCC maintainers such as

Andrea Pinski. We look forward to the GNU Cauldron to debate all of

these technicalities in person!



Overall, this month saw 79 pull-requests merged, which makes it an

extremely productive month. The next steps for compiling core are

finishing debugging our type-system, and then proceeding to our code

generation pass. Once this is done, the compiler will be able to compile

core. This should happen in the next few weeks or months, depending on

the hurdles that we run into as we keep progressing through the

pipeline. As core is the main and most difficult dependency of the

kernel, we will then move on to compiling each kernel crate separately

which should be relatively easy. We will continue working on our extern

crate handling to make sure that these crates interact together

properly. After this is done, gccrs will be able to compile the entirety

of the Linux kernel.



On a less technical note, Pierre-Emmanuel and Arthur are busy working on

their presentation to RustConf which will happen on the 9th of September

in Montreal. We look forward to meeting with as many people of the Rust

community as possible.



# Call for contribution



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

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



# Completed Activities



-   gccrs: Fix bug when compiling const position intrinsic calls PR4856

-   gccrs: Handle generic args to traits in paths PR4854

-   gccrs: Fix handling of constants in paths PR4852

-   gccrs: improve handling of defered operator overload handling PR4850

-   gccrs: Remove rust_(unreachable) from grs_(langhookpushdecl) PR4848

-   Improve method resolution by using indexes PR4847

-   gccrs: Remove bad unify in operator overload breaking partial eq in

     core PR4845

-   Fix ICE 4735 PR4844

-   gccrs: Fix parser handling for Foo<Bar: SomeTrait> PR4843

-   gccrs: Add new resolution mode CANONICAL/REFERNECE to

     type-check-type PR4840

-   gccrs: Fix debug output of variance analysis to switch to

     substitutionref PR4833

-   gccrs: Add missing handling to variance analysis PR4832

-   gccrs: make fn trait return optional PR4831

-   gccrs: Add hir lowering to trait item where clauses PR4830

-   gccrs: Implement extern types by reusing ADT with an extern kind

     PR4827

-   gccrs: Fix ambigious path resolution PR4826

-   gccrs: Fix missing unconstrained check to look at the full argument

     PR4825

-   gccrs: Fix self referencial assocated type PR4824

-   tyty: Fix FN_(VARIADIC) flag typo PR4820

-   Typecheck improvements for libcore PR4816

-   gccrs: when binding we need to distingish between

     generics/const-generics PR4813

-   gccrs: Add missing unconstrained type parameters walker for const

     generics PR4811

-   gccrs: fix bad projection normalize PR4810

-   gccrs: Support some LLVM builtin functions PR4809

-   gccrs: Function node links should be unnamed PR4807

-   gccrs: Resolve lang item types PR4803

-   gccrs: Add `unadjusted` and `platform-intrinsic` basic ABI support

     PR4802

-   Sync with upstream (2026-08-19):

     8aa30b41ec381846e4c08b78d437fd896d30f5da PR4800

-   gccrs: Report an error on an empty path expression PR4799

-   gccrs: Generate backend drop flags for conditional moves PR4798

-   gccrs: Port over missing GOTO handling from cp/constexpr.cc PR4796

-   gccrs: Support repr simd to setup a gcc vector type PR4795

-   gccrs: Wrap rust_(debugs) into a do-while wrapper PR4793

-   gccrs: Add missing lang item declarations for core 1.49 PR4792

-   gccrs: Add execute tests for supported Drop behavior PR4789

-   gccrs: Add `rust_(debugfmt)` PR4788

-   gccrs: Add missing bounds checks on the associated impl PR4787

-   gccrs: Handle more `llvm_(asm)` usages PR4786

-   gccrs: Prevent warning on "unreachable" items PR4785

-   gccrs: Add missing maybe fold reference to constexpr from

     cp/constcexpr.cc PR4782

-   gccrs: Fix missing error diag on const parser and crash in typecheck

     PR4781

-   gccrs: Add test cases to close out issues PR4780

-   gccrs: Add missing context ast walker to check for free fn's PR4779

-   gccrs: Improve `AST::LlvmInlineAsm` handling PR4778

-   gccrs: Handle conditional moves in BIR drop analysis PR4777

-   gccrs: Partially support `x @ ..` in `SlicePattern` PR4774

-   gccrs: Implement compilation for `let <StructPattern>` PR4773

-   Sync with upstream (2026-08-07):

     8d0676db179aa31207bc4dd29e1c310823988f4b PR4772

-   Add `va_(list)` lang item PR4771

-   Add `freeze` lang item PR4770

-   Desugar APITs on function items PR4769

-   Improve box PR4767

-   derive: Do not add default type parameters on derived impls PR4759

-   gccrs: Fix unused_(assignment) check logic PR4756

-   Sync with upstream (2026-08-03):

     3db020600d47180dc097f405d1dd7cfcafe24d43 PR4755

-   Better handle tool attributes PR4752

-   forever-stack: Add dfs_(cache) PR4751

-   resolve: Fix ignored self in grouped glob imports PR4750

-   gccrs: Move `SlicePattern` `RestPattern` handling PR4749

-   gccrs: Use BIR Drop analysis in backend cleanup PR4748

-   gccrs: Make `ExpandVisitor` visit more attributes PR4746

-   gccrs: Implement basic support for #[repr(simd)] structs PR4745

-   gccrs: Fix duplicate unused-assignment removals PR4744

-   gccrs: Test `libcore` compilation until lowering PR4743

-   gccrs: Add straight-line BIR drop style analysis PR4730

-   gccrs: Emit E0259 and E0260 for duplicate extern crate names PR4728

-   Support coercions and intrinsics for unsized ADTs PR4722

-   lang: Register lang items for alloc crate PR4721

-   Add lang pin/unpin PR4720

-   lang: Add unsafe_(cell) PR4719

-   gccrs: Separate argument and function body drop scopes PR4718

-   gccrs: Backport `cfg_(select)!` macro PR4714

-   gccrs: Run block cleanup for unlabeled break and continue PR4710

-   Resolve lang items from extern crate PR4694

-   testsuite: Add the alloc crate to the testsuite PR4693

-   gccrs: add repr_(cenumslargerthanint) lint PR4651

-   gccrs: add double negations lint PR4643

-   gccrs: add break with label and loop lint PR4640

-   gccrs: add unused unsafe lint PR4630



# Contributors this month



-   Philip Herron

-   Zhi Heng

-   Marc Poulhiès

-   Lucas Ly-Ba

-   Enes Cevik

-   Janet Chien

-   Owen Avery

-   Utkarsh Bahuguna

-   Aiman Najjar

-   Pierre-Emmanuel Patry

-   Arthur Cohen



# Overall Task Status



   Category      Last Month   This Month   Delta

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

   TODO          437          434          -3

   In Progress   128          118          -10

   Completed     1286         1328         +42



# Bugs



   Category      Last Month   This Month   Delta

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

   TODO          210          204          -6

   In Progress   52           51           -1

   Completed     634          647          +13



# Test Cases



   TestCases   Last Month   This Month   Delta

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

   Passing     11325        11549        +224

   Failed      -            -            -

   XFAIL       78           87           +9

   XPASS       -            -            -




I still haven't found a way to nicely render our milestone progress on 
the ML, so please check out the rendered version of this report [1] if 
you're interested in our milestone progress. The gist of it is that we 
closed off the "Lowering bugfix" milestone, and are now working on the 
final "Typechecking bugfix" milestone, while simultaneously making 
progress on the milestones concerning handling the Linux kernel.

Thank you to everyone involved in the project for their help, and thank 
you to all the people I reached out to these last few weeks for 
technical help.

Best,

Arthur

[1]: https://rust-gcc.github.io/2026/09/08/2026-08-monthly-report.html


More information about the Gcc-rust mailing list