From: Philip Herron <[email protected]>

Fixes Rust-GCC/gccrs#4828

gcc/rust/ChangeLog:

        * hir/rust-ast-lower-implitem.cc (ASTLowerTraitItem::visit): lower 
where clauses

gcc/testsuite/ChangeLog:

        * rust/compile/issue-4828.rs: New test.

Signed-off-by: Philip Herron <[email protected]>
---
 gcc/rust/hir/rust-ast-lower-implitem.cc  |  5 +++++
 gcc/testsuite/rust/compile/issue-4828.rs | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+)
 create mode 100644 gcc/testsuite/rust/compile/issue-4828.rs

diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc 
b/gcc/rust/hir/rust-ast-lower-implitem.cc
index bb08c3c36fa..16a7c3b4368 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.cc
+++ b/gcc/rust/hir/rust-ast-lower-implitem.cc
@@ -234,6 +234,11 @@ void
 ASTLowerTraitItem::visit (AST::Function &func)
 {
   std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
+  where_clause_items.reserve (func.get_where_clause ().get_items ().size ());
+  for (auto &item : func.get_where_clause ().get_items ())
+    where_clause_items.emplace_back (
+      ASTLowerWhereClauseItem::translate (*item.get ()));
+
   HIR::WhereClause where_clause (std::move (where_clause_items));
   HIR::FunctionQualifiers qualifiers
     = lower_qualifiers (func.get_qualifiers ());
diff --git a/gcc/testsuite/rust/compile/issue-4828.rs 
b/gcc/testsuite/rust/compile/issue-4828.rs
new file mode 100644
index 00000000000..3dba752356b
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-4828.rs
@@ -0,0 +1,18 @@
+#![feature(lang_items, no_core)]
+#![no_core]
+
+#[lang = "sized"]
+trait Sized {}
+
+trait IntoIterator {
+    type IntoIter;
+}
+
+pub struct Chain<A, B>(A, B);
+
+trait Iterator {
+    fn chain<U>(self, other: U) -> Chain<Self, U::IntoIter>
+    where
+        Self: Sized,
+        U: IntoIterator;
+}
-- 
2.50.1

Reply via email to