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