rustc_passes/delegation.rs
1use rustc_data_structures::fx::FxIndexMap;
2use rustc_middle::ty::TyCtxt;
3
4use crate::diagnostics::GlobOrListDelegationUnusedTargetExpr;
5
6pub fn check_glob_and_list_delegations_target_expr(tcx: TyCtxt<'_>) {
7 let mut delegations_by_group_id = FxIndexMap::default();
8
9 for &id in tcx.resolutions(()).delegation_infos.keys() {
10 if let Some(info) = tcx.hir_opt_delegation_info(id)
11 && let Some((group_id, unused_target_expr)) = info.group_id
12 {
13 delegations_by_group_id
14 .entry(group_id)
15 .or_insert_with(|| (true, tcx.def_span(id)))
16 .0 &= unused_target_expr;
17 }
18 }
19
20 for (_, (unused_target_expr, span)) in delegations_by_group_id {
21 if unused_target_expr {
22 tcx.dcx().emit_err(GlobOrListDelegationUnusedTargetExpr { span });
23 }
24 }
25}