1
Fork 0

Rollup merge of #119638 - lukas-code:suggest-constructor-cycle-error, r=cjgillot

fix cyle error when suggesting to use associated function instead of constructor

Fixes https://github.com/rust-lang/rust/issues/119625.

The first commit fixes the infinite recursion and makes the cycle error actually show up. We do this by making the `Display` for `ty::Instance` impl  respect `with_no_queries` so that it can be used in query descriptions.

The second commit fixes the cycle error `resolver_for_lowering` -> `normalize` -> `resolve_instance` (for evaluating const) -> `lang_items` (for `drop_in_place`) -> `resolver_for_lowering` (for collecting lang items). We do this by simply skipping the suggestion when encountering an unnormalized type.
This commit is contained in:
Michael Goulet 2024-01-05 23:41:43 -05:00 committed by GitHub
commit 61c776ae0a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 9 deletions

View file

@ -1755,11 +1755,8 @@ impl<'a: 'ast, 'ast, 'tcx> LateResolutionVisitor<'a, '_, 'ast, 'tcx> {
.filter_map(|item| {
// Only assoc fns that return `Self`
let fn_sig = self.r.tcx.fn_sig(item.def_id).skip_binder();
let ret_ty = fn_sig.output();
let ret_ty = self
.r
.tcx
.normalize_erasing_late_bound_regions(ty::ParamEnv::reveal_all(), ret_ty);
// Don't normalize the return type, because that can cause cycle errors.
let ret_ty = fn_sig.output().skip_binder();
let ty::Adt(def, _args) = ret_ty.kind() else {
return None;
};