From 0516fc6acb419283365fcb3ce7bd2a22aae6e0d0 Mon Sep 17 00:00:00 2001 From: ywxt Date: Fri, 14 Nov 2025 15:18:14 +0800 Subject: [PATCH] Use `search_for_cycle_permutation` to look for `fn_sig` Co-authored-by: Zoxc --- compiler/rustc_middle/src/values.rs | 30 ++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/compiler/rustc_middle/src/values.rs b/compiler/rustc_middle/src/values.rs index bc73d36216ef4..3011a0e406a4e 100644 --- a/compiler/rustc_middle/src/values.rs +++ b/compiler/rustc_middle/src/values.rs @@ -50,17 +50,25 @@ impl<'tcx> Value> for ty::Binder<'_, ty::FnSig<'_>> { ) -> Self { let err = Ty::new_error(tcx, guar); - let arity = if let Some(frame) = cycle_error.cycle.get(0) - && frame.query.dep_kind == dep_kinds::fn_sig - && let Some(def_id) = frame.query.def_id - && let Some(node) = tcx.hir_get_if_local(def_id) - && let Some(sig) = node.fn_sig() - { - sig.decl.inputs.len() - } else { - tcx.dcx().abort_if_errors(); - unreachable!() - }; + let arity = search_for_cycle_permutation( + &cycle_error.cycle, + |cycle| { + if let Some(frame) = cycle.get(0) + && frame.query.dep_kind == dep_kinds::fn_sig + && let Some(def_id) = frame.query.def_id + && let Some(node) = tcx.hir_get_if_local(def_id) + && let Some(sig) = node.fn_sig() + { + ControlFlow::Break(sig.decl.inputs.len()) + } else { + ControlFlow::Continue(()) + } + }, + || { + tcx.dcx().abort_if_errors(); + unreachable!() + }, + ); let fn_sig = ty::Binder::dummy(tcx.mk_fn_sig( std::iter::repeat_n(err, arity),