Skip to content

Commit 0c26783

Browse files
committed
Match on hir::TraitFn::Provided instead of using maybe_body_owned_by
1 parent 11fd857 commit 0c26783

File tree

1 file changed

+30
-32
lines changed
  • compiler/rustc_typeck/src/check

1 file changed

+30
-32
lines changed

compiler/rustc_typeck/src/check/expr.rs

+30-32
Original file line numberDiff line numberDiff line change
@@ -683,38 +683,36 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
683683

684684
let encl_item_id = self.tcx.hir().get_parent_item(expr.hir_id);
685685

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-
{
703-
// We are inside a function body, so reporting "return statement
704-
// outside of function body" needs an explanation.
705-
706-
let encl_body_owner_id = self.tcx.hir().enclosing_body_owner(expr.hir_id);
707-
708-
// If this didn't hold, we would not have to report an error in
709-
// the first place.
710-
assert_ne!(encl_item_id, encl_body_owner_id);
711-
712-
let encl_body_id = self.tcx.hir().body_owned_by(encl_body_owner_id);
713-
let encl_body = self.tcx.hir().body(encl_body_id);
714-
715-
err.encl_body_span = Some(encl_body.value.span);
716-
err.encl_fn_span = Some(*encl_fn_span);
717-
}
686+
if let Some(hir::Node::Item(hir::Item {
687+
kind: hir::ItemKind::Fn(..),
688+
span: encl_fn_span,
689+
..
690+
}))
691+
| Some(hir::Node::TraitItem(hir::TraitItem {
692+
kind: hir::TraitItemKind::Fn(_, hir::TraitFn::Provided(_)),
693+
span: encl_fn_span,
694+
..
695+
}))
696+
| Some(hir::Node::ImplItem(hir::ImplItem {
697+
kind: hir::ImplItemKind::Fn(..),
698+
span: encl_fn_span,
699+
..
700+
})) = self.tcx.hir().find(encl_item_id)
701+
{
702+
// We are inside a function body, so reporting "return statement
703+
// outside of function body" needs an explanation.
704+
705+
let encl_body_owner_id = self.tcx.hir().enclosing_body_owner(expr.hir_id);
706+
707+
// If this didn't hold, we would not have to report an error in
708+
// the first place.
709+
assert_ne!(encl_item_id, encl_body_owner_id);
710+
711+
let encl_body_id = self.tcx.hir().body_owned_by(encl_body_owner_id);
712+
let encl_body = self.tcx.hir().body(encl_body_id);
713+
714+
err.encl_body_span = Some(encl_body.value.span);
715+
err.encl_fn_span = Some(*encl_fn_span);
718716
}
719717

720718
self.tcx.sess.emit_err(err);

0 commit comments

Comments
 (0)