diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-trait-reference.h | 7 | ||||
-rw-r--r-- | gcc/rust/typecheck/rust-hir-trait-resolve.cc | 8 | ||||
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-path.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-3242.rs | 1 |
4 files changed, 9 insertions, 11 deletions
diff --git a/gcc/rust/typecheck/rust-hir-trait-reference.h b/gcc/rust/typecheck/rust-hir-trait-reference.h index 307dca4..5866a23 100644 --- a/gcc/rust/typecheck/rust-hir-trait-reference.h +++ b/gcc/rust/typecheck/rust-hir-trait-reference.h @@ -254,10 +254,9 @@ public: void setup_raw_associated_types (); - TyTy::BaseType * - setup_associated_types (const TyTy::BaseType *self, - const TyTy::TypeBoundPredicate &bound, - TyTy::SubstitutionArgumentMappings *args = nullptr); + TyTy::BaseType *setup_associated_types ( + const TyTy::BaseType *self, const TyTy::TypeBoundPredicate &bound, + TyTy::SubstitutionArgumentMappings *args = nullptr, bool infer = true); void reset_associated_types (); diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index 71ae7df..811abcb 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -485,7 +485,7 @@ AssociatedImplTrait::setup_raw_associated_types () TyTy::BaseType * AssociatedImplTrait::setup_associated_types ( const TyTy::BaseType *self, const TyTy::TypeBoundPredicate &bound, - TyTy::SubstitutionArgumentMappings *args) + TyTy::SubstitutionArgumentMappings *args, bool infer) { // compute the constrained impl block generic arguments based on self and the // higher ranked trait bound @@ -545,7 +545,7 @@ AssociatedImplTrait::setup_associated_types ( std::vector<TyTy::SubstitutionArg> subst_args; for (auto &p : substitutions) { - if (p.needs_substitution ()) + if (p.needs_substitution () && infer) { TyTy::TyVar infer_var = TyTy::TyVar::get_implicit_infer_var (locus); subst_args.push_back ( @@ -619,7 +619,7 @@ AssociatedImplTrait::setup_associated_types ( = unify_site_and (a->get_ref (), TyTy::TyWithLocation (a), TyTy::TyWithLocation (b), impl_predicate.get_locus (), true /*emit-errors*/, true /*commit-if-ok*/, - false /*infer*/, true /*cleanup-on-fail*/); + true /*infer*/, true /*cleanup-on-fail*/); rust_assert (result->get_kind () != TyTy::TypeKind::ERROR); } @@ -632,7 +632,7 @@ AssociatedImplTrait::setup_associated_types ( TyTy::TyWithLocation (impl_self_infer), impl_predicate.get_locus (), true /*emit-errors*/, true /*commit-if-ok*/, - false /*infer*/, true /*cleanup-on-fail*/); + true /*infer*/, true /*cleanup-on-fail*/); rust_assert (result->get_kind () != TyTy::TypeKind::ERROR); TyTy::BaseType *self_result = result; diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index 1904eba..74ab141 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -535,8 +535,8 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, = impl_block_ty->lookup_predicate (trait_ref.get_defid ()); if (!predicate.is_error ()) impl_block_ty - = associated->setup_associated_types (prev_segment, - predicate); + = associated->setup_associated_types (prev_segment, predicate, + nullptr, false); } } diff --git a/gcc/testsuite/rust/compile/issue-3242.rs b/gcc/testsuite/rust/compile/issue-3242.rs index 468497a..a4542aea0 100644 --- a/gcc/testsuite/rust/compile/issue-3242.rs +++ b/gcc/testsuite/rust/compile/issue-3242.rs @@ -1,5 +1,4 @@ #[lang = "sized"] -// { dg-skip-if "" { *-*-* } } pub trait Sized {} trait Foo<T> { |