https://gcc.gnu.org/g:6ade4ac86f17e814a84c11a0ccb80090fe7243f4
commit r17-5149-g6ade4ac86f17e814a84c11a0ccb80090fe7243f4 Author: Philip Herron <[email protected]> Date: Fri Sep 18 22:01:08 2026 +0100 gccrs: Add missing lifetime handling to trait resolve Fixes Rust-GCC/gccrs#4912 gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_trait): add missing gcc/testsuite/ChangeLog: * rust/compile/issues/4912.rs: New test. Signed-off-by: Philip Herron <[email protected]> Diff: --- gcc/rust/typecheck/rust-hir-trait-resolve.cc | 10 ++++++++++ gcc/testsuite/rust/compile/issues/4912.rs | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index c80899979c23..b694521533d5 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -283,6 +283,8 @@ TraitResolver::resolve_trait (HIR::Trait *trait_reference) TyTy::BaseType *self = nullptr; std::vector<TyTy::SubstitutionParamMapping> substitutions; + auto lifetime_pin = context->push_clean_lifetime_resolver (); + // this needs to be special cased for the sized trait to not auto implemented // Sized on Self for (auto &generic_param : trait_reference->get_generic_params ()) @@ -290,6 +292,14 @@ TraitResolver::resolve_trait (HIR::Trait *trait_reference) switch (generic_param.get ()->get_kind ()) { case HIR::GenericParam::GenericKind::LIFETIME: + { + auto &lifetime_param + = static_cast<HIR::LifetimeParam &> (*generic_param); + context->intern_and_insert_lifetime ( + lifetime_param.get_lifetime ()); + } + break; + case HIR::GenericParam::GenericKind::CONST: // FIXME: Skipping Lifetime and Const completely until better // handling. diff --git a/gcc/testsuite/rust/compile/issues/4912.rs b/gcc/testsuite/rust/compile/issues/4912.rs new file mode 100644 index 000000000000..4c3571331918 --- /dev/null +++ b/gcc/testsuite/rust/compile/issues/4912.rs @@ -0,0 +1,11 @@ +#![feature(no_core, lang_items)] +#![no_core] + +#[lang = "sized"] +pub trait Sized {} + +pub trait Searcher<'a> {} + +pub trait ReverseSearcher<'a>: Searcher<'a> {} + +fn main() {}
