@@ -683,11 +683,23 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
683
683
684
684
let encl_item_id = self . tcx . hir ( ) . get_parent_item ( expr. hir_id ) ;
685
685
686
- // Somewhat confusingly, get_parent_item() does not necessarily return an
687
- // item -- it can also return a Foreign-/Impl-/TraitItem or a Crate (see
688
- // issue #86721). If it does, we still report the same error.
689
- if let Some ( hir:: Node :: Item ( encl_item) ) = self . tcx . hir ( ) . find ( encl_item_id) {
690
- if let hir:: ItemKind :: Fn ( ..) = encl_item. kind {
686
+ if self . tcx . hir ( ) . maybe_body_owned_by ( encl_item_id) . is_some ( ) {
687
+ if let Some ( hir:: Node :: Item ( hir:: Item {
688
+ kind : hir:: ItemKind :: Fn ( ..) ,
689
+ span : encl_fn_span,
690
+ ..
691
+ } ) )
692
+ | Some ( hir:: Node :: TraitItem ( hir:: TraitItem {
693
+ kind : hir:: TraitItemKind :: Fn ( ..) ,
694
+ span : encl_fn_span,
695
+ ..
696
+ } ) )
697
+ | Some ( hir:: Node :: ImplItem ( hir:: ImplItem {
698
+ kind : hir:: ImplItemKind :: Fn ( ..) ,
699
+ span : encl_fn_span,
700
+ ..
701
+ } ) ) = self . tcx . hir ( ) . find ( encl_item_id)
702
+ {
691
703
// We are inside a function body, so reporting "return statement
692
704
// outside of function body" needs an explanation.
693
705
@@ -701,7 +713,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
701
713
let encl_body = self . tcx . hir ( ) . body ( encl_body_id) ;
702
714
703
715
err. encl_body_span = Some ( encl_body. value . span ) ;
704
- err. encl_fn_span = Some ( encl_item . span ) ;
716
+ err. encl_fn_span = Some ( * encl_fn_span ) ;
705
717
}
706
718
}
707
719
0 commit comments