diff options
| author | varkor <github@varkor.com> | 2018-06-28 22:49:01 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2018-06-28 22:52:44 +0100 |
| commit | 4071adfcb5c9fa0d28f4ea096c19a3e8d4c802ff (patch) | |
| tree | a4c68cc13ae73171a616f8f6216d0c5c3af4c6eb /src | |
| parent | 4fe88c05cd14fa182fd58cc68127f98aca77d1ff (diff) | |
| download | rust-4071adfcb5c9fa0d28f4ea096c19a3e8d4c802ff.tar.gz rust-4071adfcb5c9fa0d28f4ea096c19a3e8d4c802ff.zip | |
Always check type_dependent_defs
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/middle/dead.rs | 6 | ||||
| -rw-r--r-- | src/librustc/middle/reachable.rs | 2 | ||||
| -rw-r--r-- | src/librustc_lint/builtin.rs | 13 | ||||
| -rw-r--r-- | src/librustc_mir/hair/cx/expr.rs | 7 | ||||
| -rw-r--r-- | src/librustc_privacy/lib.rs | 11 |
5 files changed, 28 insertions, 11 deletions
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index 7ebc0d4a4de..f59cce4bd9e 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -96,7 +96,11 @@ impl<'a, 'tcx> MarkSymbolVisitor<'a, 'tcx> { } 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) { diff --git a/src/librustc/middle/reachable.rs b/src/librustc/middle/reachable.rs index 95829346ede..476f3f5799d 100644 --- a/src/librustc/middle/reachable.rs +++ b/src/librustc/middle/reachable.rs @@ -120,7 +120,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ReachableContext<'a, 'tcx> { 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 }; diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index d6120ab2079..6d0f60f6579 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -1007,10 +1007,15 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnconditionalRecursion { // 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"); } } diff --git a/src/librustc_mir/hair/cx/expr.rs b/src/librustc_mir/hair/cx/expr.rs index 9c6c35a340e..8c73771e57b 100644 --- a/src/librustc_mir/hair/cx/expr.rs +++ b/src/librustc_mir/hair/cx/expr.rs @@ -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 { diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index de087049267..118e0dce73f 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -795,10 +795,15 @@ impl<'a, 'tcx> Visitor<'tcx> for TypePrivacyVisitor<'a, 'tcx> { } 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"); } } _ => {} |
