https://gcc.gnu.org/g:55552cd4acbe884b6bf5e5783aa7a5a126a117a6

commit r17-2244-g55552cd4acbe884b6bf5e5783aa7a5a126a117a6
Author: Lucas Ly Ba <[email protected]>
Date:   Sat Jun 27 21:15:27 2026 +0200

    gccrs: fix ICE on generic type aliases
    
    A type alias with generic parameters never resolved those parameters
    into the type context, so the reachability pass asserted when looking
    up their types. Resolve the generic parameters, as the other items do.
    
    gcc/rust/ChangeLog:
    
            * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): 
Resolve
            the generic parameters of a type alias.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/type-alias-generic-params.rs: New test.
    
    Signed-off-by: Lucas Ly Ba <[email protected]>

Diff:
---
 gcc/rust/typecheck/rust-hir-type-check-item.cc          | 7 +++++++
 gcc/testsuite/rust/compile/type-alias-generic-params.rs | 9 +++++++++
 2 files changed, 16 insertions(+)

diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc 
b/gcc/rust/typecheck/rust-hir-type-check-item.cc
index d8f2b8754e89..8c8d7e416147 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-item.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc
@@ -228,6 +228,13 @@ TypeCheckItem::validate_trait_impl_block (
 void
 TypeCheckItem::visit (HIR::TypeAlias &alias)
 {
+  auto lifetime_pin = context->push_clean_lifetime_resolver ();
+
+  std::vector<TyTy::SubstitutionParamMapping> substitutions;
+  if (alias.has_generics ())
+    resolve_generic_params (HIR::Item::ItemKind::TypeAlias, alias.get_locus (),
+                           alias.get_generic_params (), substitutions);
+
   TyTy::BaseType *actual_type
     = TypeCheckType::Resolve (alias.get_type_aliased ());
 
diff --git a/gcc/testsuite/rust/compile/type-alias-generic-params.rs 
b/gcc/testsuite/rust/compile/type-alias-generic-params.rs
new file mode 100644
index 000000000000..8e0883fea6c6
--- /dev/null
+++ b/gcc/testsuite/rust/compile/type-alias-generic-params.rs
@@ -0,0 +1,9 @@
+// Generic type aliases used to ICE in the reachability pass because their
+// generic parameters were never resolved into the type context.
+#![feature(no_core, lang_items)]
+#![no_core]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+pub type Alias<T> = T;

Reply via email to