]> gcc.gnu.org Git - gcc.git/commitdiff
gccrs: Add missing where clause lowering for Impl functions
authorPhilip Herron <herron.philip@googlemail.com>
Thu, 20 Apr 2023 09:26:18 +0000 (10:26 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:34:14 +0000 (18:34 +0100)
Fixes #2106

gcc/rust/ChangeLog:

* hir/rust-ast-lower-implitem.h: add missing where clause lowering

gcc/testsuite/ChangeLog:

* rust/compile/issue-2106.rs: New test.
* rust/compile/issue-1524.rs: regression (placeholder generic)

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
gcc/rust/hir/rust-ast-lower-implitem.h
gcc/testsuite/rust/compile/issue-1524.rs
gcc/testsuite/rust/compile/issue-2106.rs [new file with mode: 0644]

index 7475e8784500f51c0075d2440dbb60628bfed9b7..53cb8ea395f0b8925a1ab1951cd10b0b4e615841 100644 (file)
@@ -133,6 +133,14 @@ public:
   {
     // ignore for now and leave empty
     std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
+    for (auto &item : function.get_where_clause ().get_items ())
+      {
+       HIR::WhereClauseItem *i
+         = ASTLowerWhereClauseItem::translate (*item.get ());
+       where_clause_items.push_back (
+         std::unique_ptr<HIR::WhereClauseItem> (i));
+      }
+
     HIR::WhereClause where_clause (std::move (where_clause_items));
     HIR::FunctionQualifiers qualifiers
       = lower_qualifiers (function.get_qualifiers ());
@@ -209,6 +217,14 @@ public:
   {
     // ignore for now and leave empty
     std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
+    for (auto &item : method.get_where_clause ().get_items ())
+      {
+       HIR::WhereClauseItem *i
+         = ASTLowerWhereClauseItem::translate (*item.get ());
+       where_clause_items.push_back (
+         std::unique_ptr<HIR::WhereClauseItem> (i));
+      }
+
     HIR::WhereClause where_clause (std::move (where_clause_items));
     HIR::FunctionQualifiers qualifiers
       = lower_qualifiers (method.get_qualifiers ());
index e46efe4595f12647dd622e7e55fbe713cdfd41b5..2d7599f1804ed9d4fdf9e3f0bccf0a3977f497d2 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-additional-options "-w" }
+// { dg-additional-options "-w -frust-compile-until=nameresolution" }
 // https://github.com/Rust-GCC/gccrs/issues/1524
 // https://github.com/rust-lang/rust/blob/673d0db5e393e9c64897005b470bfeb6d5aec61b/src/test/ui/methods/method-normalize-bounds-issue-20604.rs
 trait Hasher {
diff --git a/gcc/testsuite/rust/compile/issue-2106.rs b/gcc/testsuite/rust/compile/issue-2106.rs
new file mode 100644 (file)
index 0000000..a4f235c
--- /dev/null
@@ -0,0 +1,15 @@
+struct Foo(u32);
+// { dg-warning "struct is never constructed" "" { target *-*-* } .-1 }
+
+pub trait Bar {
+    fn bar(self);
+}
+
+impl Foo {
+    pub fn map<F>(f: F)
+    where
+        F: Bar,
+    {
+        f.bar();
+    }
+}
This page took 0.072766 seconds and 5 git commands to generate.