[gcc r17-3075] gccrs: Fix type param forward declare check

Arthur Cohen via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:09e7ac3a6ed62509b292516ef5256633a1144ee4

commit r17-3075-g09e7ac3a6ed62509b292516ef5256633a1144ee4
Author: Owen Avery <[email protected]>
Date:   Sat Jul 4 13:27:47 2026 -0400

    gccrs: Fix type param forward declare check
    
    Type param bounds are allowed to use forward declared generic
    parameters.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-default-resolver.cc
            (DefaultResolver::visit (TypeParam)): Visit bounds outside of
            ForwardTypeParamBan rib.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/generics15.rs: New test.
    
    Signed-off-by: Owen Avery <[email protected]>

Diff:
---
 gcc/rust/resolve/rust-default-resolver.cc | 12 ++++++++++--
 gcc/testsuite/rust/compile/generics15.rs  |  9 +++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/gcc/rust/resolve/rust-default-resolver.cc b/gcc/rust/resolve/rust-default-resolver.cc
index 10f506bb2364..ba65308688f4 100644
--- a/gcc/rust/resolve/rust-default-resolver.cc
+++ b/gcc/rust/resolve/rust-default-resolver.cc
@@ -433,9 +433,17 @@ DefaultResolver::visit (AST::StaticItem &item)
 void
 DefaultResolver::visit (AST::TypeParam &param)
 {
-  auto expr_vis = [this, &param] () { AST::DefaultASTVisitor::visit (param); };
+  auto param_ban_vis = [this, &param] () {
+    visit_outer_attrs (param);
+    if (param.has_type ())
+      visit (param.get_type ());
+  };
+
+  ctx.scoped (Rib::Kind::ForwardTypeParamBan, param.get_node_id (),
+	      param_ban_vis);
 
-  ctx.scoped (Rib::Kind::ForwardTypeParamBan, param.get_node_id (), expr_vis);
+  for (auto &bound : param.get_type_param_bounds ())
+    visit (bound);
 }
 
 void
diff --git a/gcc/testsuite/rust/compile/generics15.rs b/gcc/testsuite/rust/compile/generics15.rs
new file mode 100644
index 000000000000..bb50be4e88fb
--- /dev/null
+++ b/gcc/testsuite/rust/compile/generics15.rs
@@ -0,0 +1,9 @@
+#![feature(no_core, lang_items)]
+#![no_core]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+pub trait A<T> {}
+
+pub struct B<T: A<T>> (T);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.