From: Philip Herron Date: Tue, 20 Jun 2023 09:39:54 +0000 (+0100) Subject: gccrs: fix unsafe lookup at zero index X-Git-Tag: basepoints/gcc-15~2459 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=946af759bdc029c1bbd3d6349ad5f80098bc30e3;p=thirdparty%2Fgcc.git gccrs: fix unsafe lookup at zero index Using lookup_predciate by DefId is the safe way to get the relevant predicate. Addresses #1893 gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc: use lookup_predicate (DefID) * typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_segments): fix formatting Signed-off-by: Philip Herron --- diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index 7c6ce4c7a2d7..099c6729483f 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -513,11 +513,9 @@ AssociatedImplTrait::setup_associated_types ( ? SubstMapperInternal::Resolve (associated_self, infer_arguments) : associated_self; - // FIXME this needs to do a lookup for the trait-reference DefId instead of - // assuming its the first one in the list - rust_assert (associated_self->num_specified_bounds () > 0); - TyTy::TypeBoundPredicate &impl_predicate - = associated_self->get_specified_bounds ().at (0); + const TyTy::TypeBoundPredicate &impl_predicate + = associated_self->lookup_predicate (bound.get_id ()); + rust_assert (!impl_predicate.is_error ()); // infer the arguments on the predicate std::vector impl_trait_predicate_args; diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index 6ae58cea631a..4bac75a63d97 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -427,9 +427,7 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, seg.get_locus ()); bool ok = prev_segment->get_kind () != TyTy::TypeKind::ERROR; if (!ok) - { - return; - } + return; if (found_impl_trait) {