From 1dc363bce1f02ed9863f9b9cdc10532b95a64fbb Mon Sep 17 00:00:00 2001 From: marmeladema Date: Wed, 8 Apr 2020 12:33:38 +0100 Subject: [PATCH] librustc_middle: return LocalDefId instead of DefId in opt_local_def_id --- .../infer/error_reporting/mod.rs | 10 ++++++--- src/librustc_middle/hir/map/mod.rs | 22 ++++++++++--------- .../traits/error_reporting/mod.rs | 3 ++- src/librustdoc/core.rs | 7 ++++-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/librustc_infer/infer/error_reporting/mod.rs b/src/librustc_infer/infer/error_reporting/mod.rs index 925f92edd7d..b98924ff8a6 100644 --- a/src/librustc_infer/infer/error_reporting/mod.rs +++ b/src/librustc_infer/infer/error_reporting/mod.rs @@ -59,7 +59,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_errors::{pluralize, struct_span_err}; use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticStyledString}; use rustc_hir as hir; -use rustc_hir::def_id::DefId; +use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_hir::Node; use rustc_middle::middle::region; use rustc_middle::ty::error::TypeError; @@ -1589,8 +1589,12 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { // it's a actual definition. According to the comments (e.g. in // librustc_typeck/check/compare_method.rs:compare_predicate_entailment) the latter // is relied upon by some other code. This might (or might not) need cleanup. - let body_owner_def_id = - self.tcx.hir().opt_local_def_id(cause.body_id).unwrap_or_else(|| { + let body_owner_def_id = self + .tcx + .hir() + .opt_local_def_id(cause.body_id) + .map(LocalDefId::to_def_id) + .unwrap_or_else(|| { self.tcx.hir().body_owner_def_id(hir::BodyId { hir_id: cause.body_id }) }); self.check_and_note_conflicting_crates(diag, terr); diff --git a/src/librustc_middle/hir/map/mod.rs b/src/librustc_middle/hir/map/mod.rs index 343afab154b..3cda1f41b05 100644 --- a/src/librustc_middle/hir/map/mod.rs +++ b/src/librustc_middle/hir/map/mod.rs @@ -150,7 +150,7 @@ impl<'hir> Map<'hir> { } pub fn def_path_from_hir_id(&self, id: HirId) -> Option { - self.opt_local_def_id(id).map(|def_id| self.def_path(def_id.expect_local())) + self.opt_local_def_id(id).map(|def_id| self.def_path(def_id)) } pub fn def_path(&self, def_id: LocalDefId) -> DefPath { @@ -175,19 +175,21 @@ impl<'hir> Map<'hir> { // FIXME(eddyb) this function can and should return `LocalDefId`. #[inline] pub fn local_def_id(&self, hir_id: HirId) -> DefId { - self.opt_local_def_id(hir_id).unwrap_or_else(|| { - bug!( - "local_def_id: no entry for `{:?}`, which has a map of `{:?}`", - hir_id, - self.find_entry(hir_id) - ) - }) + self.opt_local_def_id(hir_id) + .unwrap_or_else(|| { + bug!( + "local_def_id: no entry for `{:?}`, which has a map of `{:?}`", + hir_id, + self.find_entry(hir_id) + ) + }) + .to_def_id() } #[inline] - pub fn opt_local_def_id(&self, hir_id: HirId) -> Option { + pub fn opt_local_def_id(&self, hir_id: HirId) -> Option { let node_id = self.hir_id_to_node_id(hir_id); - Some(self.opt_local_def_id_from_node_id(node_id)?.to_def_id()) + self.opt_local_def_id_from_node_id(node_id) } #[inline] diff --git a/src/librustc_trait_selection/traits/error_reporting/mod.rs b/src/librustc_trait_selection/traits/error_reporting/mod.rs index f0a157b3770..a19daa12d5b 100644 --- a/src/librustc_trait_selection/traits/error_reporting/mod.rs +++ b/src/librustc_trait_selection/traits/error_reporting/mod.rs @@ -14,7 +14,7 @@ use crate::infer::{self, InferCtxt, TyCtxtInferExt}; use rustc_data_structures::fx::FxHashMap; use rustc_errors::{pluralize, struct_span_err, Applicability, DiagnosticBuilder}; use rustc_hir as hir; -use rustc_hir::def_id::{DefId, LOCAL_CRATE}; +use rustc_hir::def_id::{DefId, LocalDefId, LOCAL_CRATE}; use rustc_hir::{Node, QPath, TyKind, WhereBoundPredicate, WherePredicate}; use rustc_middle::mir::interpret::ErrorHandled; use rustc_middle::ty::error::ExpectedFound; @@ -354,6 +354,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { let enclosing_scope_span = tcx.def_span( tcx.hir() .opt_local_def_id(obligation.cause.body_id) + .map(LocalDefId::to_def_id) .unwrap_or_else(|| { tcx.hir().body_owner_def_id(hir::BodyId { hir_id: obligation.cause.body_id, diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 98f4b592fea..762ec7e9ac3 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -152,12 +152,15 @@ impl<'tcx> DocContext<'tcx> { self.tcx .hir() .opt_local_def_id(id) - .and_then(|def_id| self.tcx.lookup_stability(def_id)) + .and_then(|def_id| self.tcx.lookup_stability(def_id.to_def_id())) .cloned() } pub fn deprecation(&self, id: HirId) -> Option { - self.tcx.hir().opt_local_def_id(id).and_then(|def_id| self.tcx.lookup_deprecation(def_id)) + self.tcx + .hir() + .opt_local_def_id(id) + .and_then(|def_id| self.tcx.lookup_deprecation(def_id.to_def_id())) } }