diff --git a/crates/hir-ty/src/infer/path.rs b/crates/hir-ty/src/infer/path.rs index bdaec615ac..88638d1ae9 100644 --- a/crates/hir-ty/src/infer/path.rs +++ b/crates/hir-ty/src/infer/path.rs @@ -207,7 +207,7 @@ impl InferenceContext<'_> { (TypeNs::TraitId(trait_), true) => { let self_ty = self.table.new_type_var(); let trait_ref = - path_ctx.lower_trait_ref_from_resolved_path(trait_, self_ty); + path_ctx.lower_trait_ref_from_resolved_path(trait_, self_ty, true); drop_ctx(ctx, no_diagnostics); self.resolve_trait_assoc_item(trait_ref, last_segment, id) } diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs index eecca32240..740882521c 100644 --- a/crates/hir-ty/src/lower.rs +++ b/crates/hir-ty/src/lower.rs @@ -538,7 +538,7 @@ impl<'a> TyLoweringContext<'a> { TypeNs::TraitId(tr) => tr, _ => return None, }; - Some((ctx.lower_trait_ref_from_resolved_path(resolved, explicit_self_ty), ctx)) + Some((ctx.lower_trait_ref_from_resolved_path(resolved, explicit_self_ty, false), ctx)) } fn lower_trait_ref( diff --git a/crates/hir-ty/src/lower/path.rs b/crates/hir-ty/src/lower/path.rs index d3ca438d6e..6b71e98b03 100644 --- a/crates/hir-ty/src/lower/path.rs +++ b/crates/hir-ty/src/lower/path.rs @@ -166,6 +166,7 @@ impl<'a, 'b> PathLoweringContext<'a, 'b> { let trait_ref = self.lower_trait_ref_from_resolved_path( trait_, TyKind::Error.intern(Interner), + infer_args, ); self.skip_resolved_segment(); @@ -830,8 +831,9 @@ impl<'a, 'b> PathLoweringContext<'a, 'b> { &mut self, resolved: TraitId, explicit_self_ty: Ty, + infer_args: bool, ) -> TraitRef { - let substs = self.trait_ref_substs_from_path(resolved, explicit_self_ty); + let substs = self.trait_ref_substs_from_path(resolved, explicit_self_ty, infer_args); TraitRef { trait_id: to_chalk_trait_id(resolved), substitution: substs } } @@ -839,8 +841,9 @@ impl<'a, 'b> PathLoweringContext<'a, 'b> { &mut self, resolved: TraitId, explicit_self_ty: Ty, + infer_args: bool, ) -> Substitution { - self.substs_from_path_segment(resolved.into(), false, Some(explicit_self_ty), false) + self.substs_from_path_segment(resolved.into(), infer_args, Some(explicit_self_ty), false) } pub(super) fn assoc_type_bindings_from_type_bound<'c>( diff --git a/crates/ide-diagnostics/src/handlers/incorrect_generics_len.rs b/crates/ide-diagnostics/src/handlers/incorrect_generics_len.rs index 8244f303d9..17c7f75880 100644 --- a/crates/ide-diagnostics/src/handlers/incorrect_generics_len.rs +++ b/crates/ide-diagnostics/src/handlers/incorrect_generics_len.rs @@ -172,4 +172,16 @@ fn foo = bool>>() {} "#, ); } + + #[test] + fn regression_19669() { + check_diagnostics( + r#" +//- minicore: from +fn main() { + let _: i32 = Into::into(0); +} +"#, + ); + } }