diff options
author | Philip Herron <herron.philip@googlemail.com> | 2023-04-20 10:26:18 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:34:14 +0100 |
commit | 6182a284960a850bc5520337f51799d015538c67 (patch) | |
tree | b47faa9784ae596cf195f4a752b2acf331613af2 /gcc | |
parent | bee0c8a1d4263754feb2271f50bbb7a5819ae4ff (diff) | |
download | gcc-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.h | 16 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-1524.rs | 2 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-2106.rs | 15 |
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(); + } +} |