about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-06-30 18:27:07 +0200
committerFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-06-30 18:27:07 +0200
commit0c267830d5afdeea2058f0b97e69cf1afbb3d3da (patch)
tree27ebb81dc2c407ed0da3f4065e4e8e10e0b4367f
parent11fd8579e44950c0cca82bb389d255962854b9ce (diff)
downloadrust-0c267830d5afdeea2058f0b97e69cf1afbb3d3da.tar.gz
rust-0c267830d5afdeea2058f0b97e69cf1afbb3d3da.zip
Match on `hir::TraitFn::Provided` instead of using `maybe_body_owned_by`
-rw-r--r--compiler/rustc_typeck/src/check/expr.rs62
1 files changed, 30 insertions, 32 deletions
diff --git a/compiler/rustc_typeck/src/check/expr.rs b/compiler/rustc_typeck/src/check/expr.rs
index de38c41e93c..cfe1d1c6871 100644
--- a/compiler/rustc_typeck/src/check/expr.rs
+++ b/compiler/rustc_typeck/src/check/expr.rs
@@ -683,38 +683,36 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
 
             let encl_item_id = self.tcx.hir().get_parent_item(expr.hir_id);
 
-            if self.tcx.hir().maybe_body_owned_by(encl_item_id).is_some() {
-                if let Some(hir::Node::Item(hir::Item {
-                    kind: hir::ItemKind::Fn(..),
-                    span: encl_fn_span,
-                    ..
-                }))
-                | Some(hir::Node::TraitItem(hir::TraitItem {
-                    kind: hir::TraitItemKind::Fn(..),
-                    span: encl_fn_span,
-                    ..
-                }))
-                | Some(hir::Node::ImplItem(hir::ImplItem {
-                    kind: hir::ImplItemKind::Fn(..),
-                    span: encl_fn_span,
-                    ..
-                })) = self.tcx.hir().find(encl_item_id)
-                {
-                    // We are inside a function body, so reporting "return statement
-                    // outside of function body" needs an explanation.
-
-                    let encl_body_owner_id = self.tcx.hir().enclosing_body_owner(expr.hir_id);
-
-                    // If this didn't hold, we would not have to report an error in
-                    // the first place.
-                    assert_ne!(encl_item_id, encl_body_owner_id);
-
-                    let encl_body_id = self.tcx.hir().body_owned_by(encl_body_owner_id);
-                    let encl_body = self.tcx.hir().body(encl_body_id);
-
-                    err.encl_body_span = Some(encl_body.value.span);
-                    err.encl_fn_span = Some(*encl_fn_span);
-                }
+            if let Some(hir::Node::Item(hir::Item {
+                kind: hir::ItemKind::Fn(..),
+                span: encl_fn_span,
+                ..
+            }))
+            | Some(hir::Node::TraitItem(hir::TraitItem {
+                kind: hir::TraitItemKind::Fn(_, hir::TraitFn::Provided(_)),
+                span: encl_fn_span,
+                ..
+            }))
+            | Some(hir::Node::ImplItem(hir::ImplItem {
+                kind: hir::ImplItemKind::Fn(..),
+                span: encl_fn_span,
+                ..
+            })) = self.tcx.hir().find(encl_item_id)
+            {
+                // We are inside a function body, so reporting "return statement
+                // outside of function body" needs an explanation.
+
+                let encl_body_owner_id = self.tcx.hir().enclosing_body_owner(expr.hir_id);
+
+                // If this didn't hold, we would not have to report an error in
+                // the first place.
+                assert_ne!(encl_item_id, encl_body_owner_id);
+
+                let encl_body_id = self.tcx.hir().body_owned_by(encl_body_owner_id);
+                let encl_body = self.tcx.hir().body(encl_body_id);
+
+                err.encl_body_span = Some(encl_body.value.span);
+                err.encl_fn_span = Some(*encl_fn_span);
             }
 
             self.tcx.sess.emit_err(err);