From 6e385d2f257c5cba10e569bd540bdfa9f91960d2 Mon Sep 17 00:00:00 2001 From: Philip Herron Date: Thu, 17 Mar 2022 09:44:46 +0000 Subject: [PATCH] Fix bad copy-paste in can equal interface for pointer types When we perform method resolution we check if the self arguments can be matched. Here the bug was that pointer types had a bad vistitor and only could ever match reference types which is wrong and was a copy paste error. Fixes #1031 --- gcc/rust/typecheck/rust-tyty-cmp.h | 2 +- gcc/testsuite/rust/compile/issue-1031.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/rust/compile/issue-1031.rs diff --git a/gcc/rust/typecheck/rust-tyty-cmp.h b/gcc/rust/typecheck/rust-tyty-cmp.h index 436bde9a2954..684c41abc2f8 100644 --- a/gcc/rust/typecheck/rust-tyty-cmp.h +++ b/gcc/rust/typecheck/rust-tyty-cmp.h @@ -1240,7 +1240,7 @@ class PointerCmp : public BaseCmp : BaseCmp (base, emit_errors), base (base) {} - void visit (const ReferenceType &type) override + void visit (const PointerType &type) override { auto base_type = base->get_base (); auto other_base_type = type.get_base (); diff --git a/gcc/testsuite/rust/compile/issue-1031.rs b/gcc/testsuite/rust/compile/issue-1031.rs new file mode 100644 index 000000000000..6727f34336f3 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-1031.rs @@ -0,0 +1,16 @@ +extern "rust-intrinsic" { + pub fn offset(dst: *const T, offset: isize) -> *const T; +} + +#[lang = "const_ptr"] +impl *const T { + pub const unsafe fn offset(self, count: isize) -> *const T { + // { dg-warning "associated function is never used" "" { target *-*-* } .-1 } + unsafe { offset(self, count) } + } + + pub const unsafe fn add(self, count: usize) -> Self { + // { dg-warning "associated function is never used" "" { target *-*-* } .-1 } + unsafe { self.offset(count as isize) } + } +}