Skip to content

Commit d903573

Browse files
authored
Unrolled build for #144615
Rollup merge of #144615 - cjgillot:fn-sig-rib, r=petrochenkov Make resolve_fn_signature responsible for its own rib. Small simplification in late resolver rib bookkeeping. r? `@petrochenkov`
2 parents 7278554 + be9d3bc commit d903573

File tree

1 file changed

+54
-75
lines changed

1 file changed

+54
-75
lines changed

compiler/rustc_resolve/src/late.rs

Lines changed: 54 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -910,22 +910,15 @@ impl<'ast, 'ra, 'tcx> Visitor<'ast> for LateResolutionVisitor<'_, 'ast, 'ra, 'tc
910910
span,
911911
|this| {
912912
this.visit_generic_params(&fn_ptr.generic_params, false);
913-
this.with_lifetime_rib(
914-
LifetimeRibKind::AnonymousCreateParameter {
915-
binder: ty.id,
916-
report_in_path: false,
917-
},
918-
|this| {
919-
this.resolve_fn_signature(
920-
ty.id,
921-
false,
922-
// We don't need to deal with patterns in parameters, because
923-
// they are not possible for foreign or bodiless functions.
924-
fn_ptr.decl.inputs.iter().map(|Param { ty, .. }| (None, &**ty)),
925-
&fn_ptr.decl.output,
926-
)
927-
},
928-
);
913+
this.resolve_fn_signature(
914+
ty.id,
915+
false,
916+
// We don't need to deal with patterns in parameters, because
917+
// they are not possible for foreign or bodiless functions.
918+
fn_ptr.decl.inputs.iter().map(|Param { ty, .. }| (None, &**ty)),
919+
&fn_ptr.decl.output,
920+
false,
921+
)
929922
},
930923
)
931924
}
@@ -1042,19 +1035,12 @@ impl<'ast, 'ra, 'tcx> Visitor<'ast> for LateResolutionVisitor<'_, 'ast, 'ra, 'tc
10421035
self.visit_fn_header(&sig.header);
10431036
self.visit_ident(ident);
10441037
self.visit_generics(generics);
1045-
self.with_lifetime_rib(
1046-
LifetimeRibKind::AnonymousCreateParameter {
1047-
binder: fn_id,
1048-
report_in_path: false,
1049-
},
1050-
|this| {
1051-
this.resolve_fn_signature(
1052-
fn_id,
1053-
sig.decl.has_self(),
1054-
sig.decl.inputs.iter().map(|Param { ty, .. }| (None, &**ty)),
1055-
&sig.decl.output,
1056-
);
1057-
},
1038+
self.resolve_fn_signature(
1039+
fn_id,
1040+
sig.decl.has_self(),
1041+
sig.decl.inputs.iter().map(|Param { ty, .. }| (None, &**ty)),
1042+
&sig.decl.output,
1043+
false,
10581044
);
10591045
return;
10601046
}
@@ -1080,22 +1066,15 @@ impl<'ast, 'ra, 'tcx> Visitor<'ast> for LateResolutionVisitor<'_, 'ast, 'ra, 'tc
10801066
.coroutine_kind
10811067
.map(|coroutine_kind| coroutine_kind.return_id());
10821068

1083-
this.with_lifetime_rib(
1084-
LifetimeRibKind::AnonymousCreateParameter {
1085-
binder: fn_id,
1086-
report_in_path: coro_node_id.is_some(),
1087-
},
1088-
|this| {
1089-
this.resolve_fn_signature(
1090-
fn_id,
1091-
declaration.has_self(),
1092-
declaration
1093-
.inputs
1094-
.iter()
1095-
.map(|Param { pat, ty, .. }| (Some(&**pat), &**ty)),
1096-
&declaration.output,
1097-
);
1098-
},
1069+
this.resolve_fn_signature(
1070+
fn_id,
1071+
declaration.has_self(),
1072+
declaration
1073+
.inputs
1074+
.iter()
1075+
.map(|Param { pat, ty, .. }| (Some(&**pat), &**ty)),
1076+
&declaration.output,
1077+
coro_node_id.is_some(),
10991078
);
11001079

11011080
if let Some(contract) = contract {
@@ -1307,19 +1286,12 @@ impl<'ast, 'ra, 'tcx> Visitor<'ast> for LateResolutionVisitor<'_, 'ast, 'ra, 'tc
13071286
kind: LifetimeBinderKind::PolyTrait,
13081287
..
13091288
} => {
1310-
self.with_lifetime_rib(
1311-
LifetimeRibKind::AnonymousCreateParameter {
1312-
binder,
1313-
report_in_path: false,
1314-
},
1315-
|this| {
1316-
this.resolve_fn_signature(
1317-
binder,
1318-
false,
1319-
p_args.inputs.iter().map(|ty| (None, &**ty)),
1320-
&p_args.output,
1321-
)
1322-
},
1289+
self.resolve_fn_signature(
1290+
binder,
1291+
false,
1292+
p_args.inputs.iter().map(|ty| (None, &**ty)),
1293+
&p_args.output,
1294+
false,
13231295
);
13241296
break;
13251297
}
@@ -2236,25 +2208,32 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
22362208
has_self: bool,
22372209
inputs: impl Iterator<Item = (Option<&'ast Pat>, &'ast Ty)> + Clone,
22382210
output_ty: &'ast FnRetTy,
2211+
report_elided_lifetimes_in_path: bool,
22392212
) {
2240-
// Add each argument to the rib.
2241-
let elision_lifetime = self.resolve_fn_params(has_self, inputs);
2242-
debug!(?elision_lifetime);
2243-
2244-
let outer_failures = take(&mut self.diag_metadata.current_elision_failures);
2245-
let output_rib = if let Ok(res) = elision_lifetime.as_ref() {
2246-
self.r.lifetime_elision_allowed.insert(fn_id);
2247-
LifetimeRibKind::Elided(*res)
2248-
} else {
2249-
LifetimeRibKind::ElisionFailure
2213+
let rib = LifetimeRibKind::AnonymousCreateParameter {
2214+
binder: fn_id,
2215+
report_in_path: report_elided_lifetimes_in_path,
22502216
};
2251-
self.with_lifetime_rib(output_rib, |this| visit::walk_fn_ret_ty(this, output_ty));
2252-
let elision_failures =
2253-
replace(&mut self.diag_metadata.current_elision_failures, outer_failures);
2254-
if !elision_failures.is_empty() {
2255-
let Err(failure_info) = elision_lifetime else { bug!() };
2256-
self.report_missing_lifetime_specifiers(elision_failures, Some(failure_info));
2257-
}
2217+
self.with_lifetime_rib(rib, |this| {
2218+
// Add each argument to the rib.
2219+
let elision_lifetime = this.resolve_fn_params(has_self, inputs);
2220+
debug!(?elision_lifetime);
2221+
2222+
let outer_failures = take(&mut this.diag_metadata.current_elision_failures);
2223+
let output_rib = if let Ok(res) = elision_lifetime.as_ref() {
2224+
this.r.lifetime_elision_allowed.insert(fn_id);
2225+
LifetimeRibKind::Elided(*res)
2226+
} else {
2227+
LifetimeRibKind::ElisionFailure
2228+
};
2229+
this.with_lifetime_rib(output_rib, |this| visit::walk_fn_ret_ty(this, output_ty));
2230+
let elision_failures =
2231+
replace(&mut this.diag_metadata.current_elision_failures, outer_failures);
2232+
if !elision_failures.is_empty() {
2233+
let Err(failure_info) = elision_lifetime else { bug!() };
2234+
this.report_missing_lifetime_specifiers(elision_failures, Some(failure_info));
2235+
}
2236+
});
22582237
}
22592238

22602239
/// Resolve inside function parameters and parameter types.

0 commit comments

Comments
 (0)