aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2023-04-20 10:26:18 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:34:14 +0100
commit6182a284960a850bc5520337f51799d015538c67 (patch)
treeb47faa9784ae596cf195f4a752b2acf331613af2 /gcc
parentbee0c8a1d4263754feb2271f50bbb7a5819ae4ff (diff)
downloadgcc-6182a284960a850bc5520337f51799d015538c67.zip
gcc-6182a284960a850bc5520337f51799d015538c67.tar.gz
gcc-6182a284960a850bc5520337f51799d015538c67.tar.bz2
gccrs: Add missing where clause lowering for Impl functions
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>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/hir/rust-ast-lower-implitem.h16
-rw-r--r--gcc/testsuite/rust/compile/issue-1524.rs2
-rw-r--r--gcc/testsuite/rust/compile/issue-2106.rs15
3 files changed, 32 insertions, 1 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h
index 7475e87..53cb8ea 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.h
+++ b/gcc/rust/hir/rust-ast-lower-implitem.h
@@ -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 ());
diff --git a/gcc/testsuite/rust/compile/issue-1524.rs b/gcc/testsuite/rust/compile/issue-1524.rs
index e46efe4..2d7599f 100644
--- a/gcc/testsuite/rust/compile/issue-1524.rs
+++ b/gcc/testsuite/rust/compile/issue-1524.rs
@@ -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
index 0000000..a4f235c
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-2106.rs
@@ -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();
+ }
+}