about summary refs log tree commit diff
path: root/compiler/rustc_passes/src
diff options
context:
space:
mode:
authorFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-05-22 01:25:16 +0200
committerFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-05-22 01:25:16 +0200
commit7a98fd412425ed39e8737e63a35da96202e43e56 (patch)
tree786572a4916a72c11801fde6ce89199b522f6480 /compiler/rustc_passes/src
parent2bcc7591142c4bad5cbe290df28ded0e80e6b870 (diff)
downloadrust-7a98fd412425ed39e8737e63a35da96202e43e56.tar.gz
rust-7a98fd412425ed39e8737e63a35da96202e43e56.zip
Small refactoring in `liveness.rs`
Diffstat (limited to 'compiler/rustc_passes/src')
-rw-r--r--compiler/rustc_passes/src/liveness.rs72
1 files changed, 21 insertions, 51 deletions
diff --git a/compiler/rustc_passes/src/liveness.rs b/compiler/rustc_passes/src/liveness.rs
index 80c1bd7a5f5..413fb32b70d 100644
--- a/compiler/rustc_passes/src/liveness.rs
+++ b/compiler/rustc_passes/src/liveness.rs
@@ -977,62 +977,13 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
             }
 
             hir::ExprKind::Call(ref f, ref args) => {
-                let m = self.ir.tcx.parent_module(expr.hir_id).to_def_id();
-                let ty = self.typeck_results.expr_ty(expr);
-                let succ = if self.ir.tcx.is_ty_uninhabited_from(m, ty, self.param_env) {
-                    if let LiveNodeKind::ExprNode(succ_span, succ_id) = self.ir.lnks[succ] {
-                        self.warn_about_unreachable(
-                            expr.span,
-                            ty,
-                            succ_span,
-                            succ_id,
-                            "expression",
-                        );
-                    } else if let LiveNodeKind::VarDefNode(succ_span, succ_id) = self.ir.lnks[succ]
-                    {
-                        self.warn_about_unreachable(
-                            expr.span,
-                            ty,
-                            succ_span,
-                            succ_id,
-                            "definition",
-                        );
-                    }
-                    self.exit_ln
-                } else {
-                    succ
-                };
+                let succ = self.check_is_ty_uninhabited(expr, succ);
                 let succ = self.propagate_through_exprs(args, succ);
                 self.propagate_through_expr(&f, succ)
             }
 
             hir::ExprKind::MethodCall(.., ref args, _) => {
-                let m = self.ir.tcx.parent_module(expr.hir_id).to_def_id();
-                let ty = self.typeck_results.expr_ty(expr);
-                let succ = if self.ir.tcx.is_ty_uninhabited_from(m, ty, self.param_env) {
-                    if let LiveNodeKind::ExprNode(succ_span, succ_id) = self.ir.lnks[succ] {
-                        self.warn_about_unreachable(
-                            expr.span,
-                            ty,
-                            succ_span,
-                            succ_id,
-                            "expression",
-                        );
-                    } else if let LiveNodeKind::VarDefNode(succ_span, succ_id) = self.ir.lnks[succ]
-                    {
-                        self.warn_about_unreachable(
-                            expr.span,
-                            ty,
-                            succ_span,
-                            succ_id,
-                            "definition",
-                        );
-                    }
-                    self.exit_ln
-                } else {
-                    succ
-                };
-
+                let succ = self.check_is_ty_uninhabited(expr, succ);
                 self.propagate_through_exprs(args, succ)
             }
 
@@ -1305,6 +1256,25 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
         ln
     }
 
+    fn check_is_ty_uninhabited(&mut self, expr: &Expr<'_>, succ: LiveNode) -> LiveNode {
+        let ty = self.typeck_results.expr_ty(expr);
+        let m = self.ir.tcx.parent_module(expr.hir_id).to_def_id();
+        if self.ir.tcx.is_ty_uninhabited_from(m, ty, self.param_env) {
+            match self.ir.lnks[succ] {
+                LiveNodeKind::ExprNode(succ_span, succ_id) => {
+                    self.warn_about_unreachable(expr.span, ty, succ_span, succ_id, "expression");
+                }
+                LiveNodeKind::VarDefNode(succ_span, succ_id) => {
+                    self.warn_about_unreachable(expr.span, ty, succ_span, succ_id, "definition");
+                }
+                _ => {}
+            };
+            self.exit_ln
+        } else {
+            succ
+        }
+    }
+
     fn warn_about_unreachable(
         &mut self,
         orig_span: Span,