From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 0886F3AA9400; Wed, 8 Jun 2022 12:00:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0886F3AA9400 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Improve error message for failure in Method resolution X-Act-Checkin: gcc X-Git-Author: Philip Herron X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: a6c5dbadc3c9023821244bd4af4e78ad9d8f63f2 X-Git-Newrev: d31c1bdaa8f0c08ec5517a0819b590e5650795ee Message-Id: <20220608120038.0886F3AA9400@sourceware.org> Date: Wed, 8 Jun 2022 12:00:38 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2022 12:00:38 -0000 https://gcc.gnu.org/g:d31c1bdaa8f0c08ec5517a0819b590e5650795ee commit d31c1bdaa8f0c08ec5517a0819b590e5650795ee Author: Philip Herron Date: Fri Jan 21 20:49:55 2022 +0000 Improve error message for failure in Method resolution Use the locus for the method name segment and print its name as part of the error message improves the quality of the error handling in method resolution. Fixes #861 Diff: --- gcc/rust/typecheck/rust-hir-type-check-expr.h | 15 ++++----------- gcc/testsuite/rust/compile/method1.rs | 2 +- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h index 1ac49463062..0ac924fa26e 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.h +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h @@ -299,17 +299,10 @@ public: = MethodResolution::Select (candidates, receiver_tyty, adjustments); if (resolved_candidate == nullptr) { - if (candidates.size () > 1) - { - // not sure if this is the correct error here - ReportMultipleCandidateError::Report ( - candidates, expr.get_method_name ().get_segment (), - expr.get_method_name ().get_locus ()); - } - else - { - rust_error_at (expr.get_locus (), "failed to resolve method"); - } + rust_error_at ( + expr.get_method_name ().get_locus (), + "failed to resolve method for %<%s%>", + expr.get_method_name ().get_segment ().as_string ().c_str ()); return; } diff --git a/gcc/testsuite/rust/compile/method1.rs b/gcc/testsuite/rust/compile/method1.rs index cce4ecfb683..18652406085 100644 --- a/gcc/testsuite/rust/compile/method1.rs +++ b/gcc/testsuite/rust/compile/method1.rs @@ -8,6 +8,6 @@ pub fn main() { a = Foo(123); a.test(); - // { dg-error "failed to resolve method" "" { target *-*-* } .-1 } + // { dg-error "failed to resolve method for .test." "" { target *-*-* } .-1 } // { dg-error {failed to type resolve expression} "" { target *-*-* } .-2 } }