https://gcc.gnu.org/g:a04da45d8722e4a9eae4b2d1e995ff9b8f658751

commit r17-4283-ga04da45d8722e4a9eae4b2d1e995ff9b8f658751
Author: Philip Herron <[email protected]>
Date:   Sun Aug 23 14:17:19 2026 +0100

    gccrs: Add missing unconstrained type parameters walker for const generics
    
    Fixes Rust-GCC/gccrs#4805
    
    gcc/rust/ChangeLog:
    
            * typecheck/rust-hir-type-check-base.cc (walk_type_to_constrain): 
walk const generics
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/issue-4805.rs: New test.
    
    Signed-off-by: Philip Herron <[email protected]>

Diff:
---
 gcc/rust/typecheck/rust-hir-type-check-base.cc | 8 ++++++++
 gcc/testsuite/rust/compile/issue-4805.rs       | 7 +++++++
 2 files changed, 15 insertions(+)

diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.cc 
b/gcc/rust/typecheck/rust-hir-type-check-base.cc
index 399b9594609a..97ff55400c3d 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-base.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-base.cc
@@ -101,6 +101,7 @@ walk_type_to_constrain (std::set<HirId> 
&constrained_symbols, TyTy::BaseType &r)
       {
        auto &arr = static_cast<TyTy::ArrayType &> (r);
        walk_type_to_constrain (constrained_symbols, *arr.get_element_type ());
+       walk_type_to_constrain (constrained_symbols, *arr.get_capacity ());
       }
       break;
     case TyTy::TypeKind::FNDEF:
@@ -117,6 +118,13 @@ walk_type_to_constrain (std::set<HirId> 
&constrained_symbols, TyTy::BaseType &r)
        constrained_symbols.insert (param.get_ty_ref ());
       }
       break;
+    case TyTy::TypeKind::CONST:
+      {
+       auto *constant = r.as_const_type ();
+       if (constant->const_kind () == TyTy::BaseConstType::ConstKind::Decl)
+         constrained_symbols.insert (r.get_ty_ref ());
+      }
+      break;
     case TyTy::SLICE:
       {
        auto &slice = static_cast<TyTy::SliceType &> (r);
diff --git a/gcc/testsuite/rust/compile/issue-4805.rs 
b/gcc/testsuite/rust/compile/issue-4805.rs
new file mode 100644
index 000000000000..300e3d5aa08d
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-4805.rs
@@ -0,0 +1,7 @@
+#![no_core]
+#![feature(no_core)]
+#![feature(min_const_generics)]
+
+trait A {}
+
+impl<const N: usize> A for [u8; N] {}

Reply via email to