https://gcc.gnu.org/g:6655c7d8b09b84ed863b1b63d5ecd4bc91d928a5

commit r17-4317-g6655c7d8b09b84ed863b1b63d5ecd4bc91d928a5
Author: Philip Herron <[email protected]>
Date:   Mon Aug 31 20:07:14 2026 +0100

    gccrs: Fix missing unconstrained check to look at the full argument
    
    Fixes Rust-GCC/gccrs#4822
    
    gcc/rust/ChangeLog:
    
            * typecheck/rust-hir-type-check-base.cc (walk_type_to_constrain): 
prototype
            (walk_types_to_constrain): make sure to walk the argument too
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/issue-4822.rs: New test.
    
    Signed-off-by: Philip Herron <[email protected]>

Diff:
---
 gcc/rust/typecheck/rust-hir-type-check-base.cc |  5 ++++-
 gcc/testsuite/rust/compile/issue-4822.rs       | 11 +++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.cc 
b/gcc/rust/typecheck/rust-hir-type-check-base.cc
index 97ff55400c3d..b53232a57e52 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-base.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-base.cc
@@ -26,7 +26,6 @@
 #include "rust-type-util.h"
 #include "rust-attribute-values.h"
 #include "rust-tyty.h"
-#include "tree.h"
 
 namespace Rust {
 namespace Resolver {
@@ -58,6 +57,9 @@ TypeCheckBase::ResolvePredicateFromBound (
                                       is_qualified_type, is_super_trait);
 }
 
+static void walk_type_to_constrain (std::set<HirId> &constrained_symbols,
+                                   TyTy::BaseType &r);
+
 static void
 walk_types_to_constrain (std::set<HirId> &constrained_symbols,
                         const TyTy::SubstitutionArgumentMappings &constraints)
@@ -70,6 +72,7 @@ walk_types_to_constrain (std::set<HirId> &constrained_symbols,
          const auto p = arg->get_root ();
          constrained_symbols.insert (p->get_ref ());
          constrained_symbols.insert (p->get_ty_ref ());
+         walk_type_to_constrain (constrained_symbols, *arg);
 
          if (p->has_substitutions_defined ())
            {
diff --git a/gcc/testsuite/rust/compile/issue-4822.rs 
b/gcc/testsuite/rust/compile/issue-4822.rs
new file mode 100644
index 000000000000..45641ad3c5dc
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-4822.rs
@@ -0,0 +1,11 @@
+#![feature(lang_items, no_core)]
+#![no_core]
+
+#[lang = "sized"]
+trait Sized {}
+
+trait PartialEq<Rhs> {}
+
+impl<A, B, const N: usize> PartialEq<[B; N]> for [A; N] {}
+
+fn main() {}

Reply via email to