@@ -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