]> git.lizzy.rs Git - rust.git/commitdiff
Always check type_dependent_defs
authorvarkor <github@varkor.com>
Thu, 28 Jun 2018 21:49:01 +0000 (22:49 +0100)
committervarkor <github@varkor.com>
Thu, 28 Jun 2018 21:52:44 +0000 (22:52 +0100)
src/librustc/middle/dead.rs
src/librustc/middle/reachable.rs
src/librustc_lint/builtin.rs
src/librustc_mir/hair/cx/expr.rs
src/librustc_privacy/lib.rs

index 7ebc0d4a4de5a4a358566bb002ad670eeb730ff0..f59cce4bd9e39dff7bfadb9a389553d288c6fd10 100644 (file)
@@ -96,7 +96,11 @@ fn handle_definition(&mut self, def: Def) {
     }
 
     fn lookup_and_handle_method(&mut self, id: hir::HirId) {
-        self.check_def_id(self.tables.type_dependent_defs()[id].def_id());
+        if let Some(def) = self.tables.type_dependent_defs().get(id) {
+            self.check_def_id(def.def_id());
+        } else {
+            bug!("no type-dependent def for method");
+        }
     }
 
     fn handle_field_access(&mut self, lhs: &hir::Expr, node_id: ast::NodeId) {
index 95829346ede8ff07d009ec34c5c3c41530a7c688..476f3f5799daf6d322cf9908de8f42a7c9400c9e 100644 (file)
@@ -120,7 +120,7 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
                 Some(self.tables.qpath_def(qpath, expr.hir_id))
             }
             hir::ExprMethodCall(..) => {
-                Some(self.tables.type_dependent_defs()[expr.hir_id])
+                self.tables.type_dependent_defs().get(expr.hir_id).cloned()
             }
             _ => None
         };
index d6120ab207924b2206a05eab6d4f45e29c716bd9..6d0f60f65791c2972c01409dbc5ee0193010fa59 100644 (file)
@@ -1007,10 +1007,15 @@ fn expr_refers_to_this_method(cx: &LateContext,
             // Check for method calls and overloaded operators.
             if cx.tables.is_method_call(expr) {
                 let hir_id = cx.tcx.hir.definitions().node_to_hir_id(id);
-                let def_id = cx.tables.type_dependent_defs()[hir_id].def_id();
-                let substs = cx.tables.node_substs(hir_id);
-                if method_call_refers_to_method(cx, method, def_id, substs, id) {
-                    return true;
+                if let Some(def) = cx.tables.type_dependent_defs().get(hir_id) {
+                    let def_id = def.def_id();
+                    let substs = cx.tables.node_substs(hir_id);
+                    if method_call_refers_to_method(cx, method, def_id, substs, id) {
+                        return true;
+                    }
+                } else {
+                    cx.tcx.sess.delay_span_bug(expr.span,
+                                               "no type-dependent def for method call");
                 }
             }
 
index 9c6c35a340e2fd7d1f1dc8591385baad7dd20fbb..8c73771e57b22544be20dc014a3b64603f432ec4 100644 (file)
@@ -692,8 +692,11 @@ fn method_callee<'a, 'gcx, 'tcx>(cx: &mut Cx<'a, 'gcx, 'tcx>,
                                  -> Expr<'tcx> {
     let temp_lifetime = cx.region_scope_tree.temporary_scope(expr.hir_id.local_id);
     let (def_id, substs) = custom_callee.unwrap_or_else(|| {
-        (cx.tables().type_dependent_defs()[expr.hir_id].def_id(),
-         cx.tables().node_substs(expr.hir_id))
+        if let Some(def) = cx.tables().type_dependent_defs().get(expr.hir_id) {
+            (def.def_id(), cx.tables().node_substs(expr.hir_id))
+        } else {
+            span_bug!(expr.span, "no type-dependent def for method callee")
+        }
     });
     let ty = cx.tcx().mk_fn_def(def_id, substs);
     Expr {
index de087049267b1f1ed82a4db643497692355a3061..118e0dce73fdb3c0398ec222fdd630ce3004333a 100644 (file)
@@ -795,10 +795,15 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
             }
             hir::ExprMethodCall(_, span, _) => {
                 // Method calls have to be checked specially.
-                let def_id = self.tables.type_dependent_defs()[expr.hir_id].def_id();
                 self.span = span;
-                if self.tcx.type_of(def_id).visit_with(self) {
-                    return;
+                if let Some(def) = self.tables.type_dependent_defs().get(expr.hir_id) {
+                    let def_id = def.def_id();
+                    if self.tcx.type_of(def_id).visit_with(self) {
+                        return;
+                    }
+                } else {
+                    self.tcx.sess.delay_span_bug(expr.span,
+                                                 "no type-dependent def for method call");
                 }
             }
             _ => {}