]> gcc.gnu.org Git - gcc.git/commitdiff
gccrs: Take advantage of our new unify_and to inject inference
authorPhilip Herron <herron.philip@googlemail.com>
Fri, 3 Mar 2023 18:42:21 +0000 (18:42 +0000)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:19:03 +0000 (18:19 +0100)
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 <herron.philip@googlemail.com>
gcc/rust/ChangeLog:

* typecheck/rust-hir-trait-resolve.cc: use unify_and infer

gcc/rust/typecheck/rust-hir-trait-resolve.cc

index f96c84c2410fbd44124a045271a934d119cb2a1e..92faa8c0cf85d0c5d8ff07331a1ad8c9d5e334e4 100644 (file)
@@ -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);
     }
 
This page took 0.064405 seconds and 5 git commands to generate.