From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 48AC7385840A; Sun, 5 Mar 2023 11:42:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 48AC7385840A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678016545; bh=flAuUCA+K/fLBVf2vzdtdRzF25l/0X/Zj+7BfdnmQPU=; h=From:To:Subject:Date:From; b=wnjBert5jpU5F4cJLvmXex0/F+Uy74nBWKbRZ38sUZXxMjQNNZFrZBdNdFjxvd454 IXI3tVDYPxjAy95lJn1r1sUAvCgPTOXqrNeSzdBOL8zJITS9NnpLrOBuTavi72MDic p9WqimxKY2j33zbWuMe9q5yoxK0ZDRVUWLYN0qNc= 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] gccrs: Take advantage of our new unify_and to inject inference X-Act-Checkin: gcc X-Git-Author: Philip Herron X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: a4c851df0358389970ffe3ce1ad495954729fc5f X-Git-Newrev: 6540653bc29778a5473746bc7463c75204e07c23 Message-Id: <20230305114225.48AC7385840A@sourceware.org> Date: Sun, 5 Mar 2023 11:42:25 +0000 (GMT) List-Id: https://gcc.gnu.org/g:6540653bc29778a5473746bc7463c75204e07c23 commit 6540653bc29778a5473746bc7463c75204e07c23 Author: Philip Herron Date: Fri Mar 3 18:42:21 2023 +0000 gccrs: Take advantage of our new unify_and to inject inference Wen computing higher ranked trait bounds where there are multiple type params and ones which are not bound entirely on the impl-type we need to inject inference variables as required to compute the types. The inference variables we inject are missing the callbacks that we can compute the bounds properly so this is the first part of the fix. Addresses #1893 Signed-off-by: Philip Herron gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc: use unify_and infer Diff: --- gcc/rust/typecheck/rust-hir-trait-resolve.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index 5a4d9660219..632a60a5366 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -497,10 +497,12 @@ AssociatedImplTrait::setup_associated_types ( // the type correctly as our receiver may be generic and we are inferring its // generic arguments and this Self might be the concrete version or vice // versa. - auto result = unify_site (get_impl_block ()->get_mappings ().get_hirid (), - TyTy::TyWithLocation (receiver), - TyTy::TyWithLocation (impl_self_infer), - impl_predicate.get_locus ()); + auto result = unify_site_and (get_impl_block ()->get_mappings ().get_hirid (), + TyTy::TyWithLocation (receiver), + TyTy::TyWithLocation (impl_self_infer), + impl_predicate.get_locus (), + true /*emit-errors*/, true /*commit-if-ok*/, + true /*infer*/, true /*cleanup-on-fail*/); rust_assert (result->get_kind () != TyTy::TypeKind::ERROR); TyTy::BaseType *self_result = result; @@ -525,8 +527,10 @@ AssociatedImplTrait::setup_associated_types ( TyTy::BaseType *b = hrtb_bound_arguments.at (i); result - = unify_site (a->get_ref (), TyTy::TyWithLocation (a), - TyTy::TyWithLocation (b), impl_predicate.get_locus ()); + = unify_site_and (a->get_ref (), TyTy::TyWithLocation (a), + TyTy::TyWithLocation (b), impl_predicate.get_locus (), + true /*emit-errors*/, true /*commit-if-ok*/, + true /*infer*/, true /*cleanup-on-fail*/); rust_assert (result->get_kind () != TyTy::TypeKind::ERROR); }