Switch crate_extern_paths to a query, and tweak wording.

This commit is contained in:
Eric Huss 2020-06-27 14:54:19 -07:00
parent c225e5c5cb
commit 1b3ef66026
9 changed files with 20 additions and 27 deletions

View File

@ -27,7 +27,6 @@ use rustc_span::symbol::{Ident, Symbol};
use rustc_data_structures::sync::Lrc;
use smallvec::SmallVec;
use std::any::Any;
use std::path::PathBuf;
macro_rules! provide {
(<$lt:tt> $tcx:ident, $def_id:ident, $other:ident, $cdata:ident,
@ -240,6 +239,8 @@ provide! { <'tcx> tcx, def_id, other, cdata,
syms
}
crate_extern_paths => { cdata.source().paths().cloned().collect() }
}
pub fn provide(providers: &mut Providers<'_>) {
@ -514,8 +515,4 @@ impl CrateStore for CStore {
fn allocator_kind(&self) -> Option<AllocatorKind> {
self.allocator_kind()
}
fn crate_extern_paths(&self, cnum: CrateNum) -> Vec<PathBuf> {
self.get_crate_data(cnum).source().paths().cloned().collect()
}
}

View File

@ -203,7 +203,6 @@ pub trait CrateStore {
fn encode_metadata(&self, tcx: TyCtxt<'_>) -> EncodedMetadata;
fn metadata_encoding_version(&self) -> &[u8];
fn allocator_kind(&self) -> Option<AllocatorKind>;
fn crate_extern_paths(&self, cnum: CrateNum) -> Vec<PathBuf>;
}
pub type CrateStoreDyn = dyn CrateStore + sync::Sync;

View File

@ -1042,6 +1042,10 @@ rustc_queries! {
eval_always
desc { "looking up the extra filename for a crate" }
}
query crate_extern_paths(_: CrateNum) -> Vec<PathBuf> {
eval_always
desc { "looking up the paths for extern crates" }
}
}
TypeChecking {

View File

@ -62,7 +62,6 @@ use std::hash::{Hash, Hasher};
use std::iter;
use std::mem;
use std::ops::{Bound, Deref};
use std::path::PathBuf;
use std::sync::Arc;
type InternedSet<'tcx, T> = ShardedHashMap<Interned<'tcx, T>, ()>;
@ -1253,14 +1252,6 @@ impl<'tcx> TyCtxt<'tcx> {
if cnum == LOCAL_CRATE { false } else { self.cstore.crate_is_private_dep_untracked(cnum) }
}
pub fn crate_extern_paths(&self, cnum: CrateNum) -> Vec<PathBuf> {
if cnum == LOCAL_CRATE {
self.sess.local_crate_source_file.iter().cloned().collect()
} else {
self.cstore.crate_extern_paths(cnum)
}
}
#[inline]
pub fn def_path_hash(self, def_id: DefId) -> rustc_hir::definitions::DefPathHash {
if let Some(def_id) = def_id.as_local() {

View File

@ -57,6 +57,7 @@ use rustc_span::{Span, DUMMY_SP};
use std::borrow::Cow;
use std::collections::BTreeMap;
use std::ops::Deref;
use std::path::PathBuf;
use std::sync::Arc;
#[macro_use]

View File

@ -147,8 +147,9 @@ impl LanguageItemCollector<'tcx> {
}
}
let mut note_def = |which, def_id: DefId| {
let location = if def_id.is_local() {
"the local crate".to_string()
let crate_name = self.tcx.crate_name(def_id.krate);
let note = if def_id.is_local() {
format!("{} definition in the local crate (`{}`)", which, crate_name)
} else {
let paths: Vec<_> = self
.tcx
@ -156,14 +157,14 @@ impl LanguageItemCollector<'tcx> {
.iter()
.map(|p| p.display().to_string())
.collect();
paths.join(", ")
format!(
"{} definition in `{}` loaded from {}",
which,
crate_name,
paths.join(", ")
)
};
err.note(&format!(
"{} definition in `{}` loaded from {}",
which,
self.tcx.crate_name(def_id.krate),
location
));
err.note(&note);
};
note_def("first", original_def_id);
note_def("second", item_def_id);

View File

@ -9,7 +9,7 @@ LL | | }
|
= note: the lang item is first defined in crate `std` (which `duplicate_entry_error` depends on)
= note: first definition in `std` loaded from SYSROOT/libstd-*.rlib
= note: second definition in `duplicate_entry_error` loaded from the local crate
= note: second definition in the local crate (`duplicate_entry_error`)
error: aborting due to previous error

View File

@ -6,7 +6,7 @@ LL | struct Foo;
|
= note: the lang item is first defined in crate `alloc` (which `std` depends on)
= note: first definition in `alloc` loaded from SYSROOT/liballoc-*.rlib
= note: second definition in `E0152` loaded from the local crate
= note: second definition in the local crate (`E0152`)
error: aborting due to previous error

View File

@ -8,7 +8,7 @@ LL | | }
|
= note: the lang item is first defined in crate `std` (which `panic_handler_std` depends on)
= note: first definition in `std` loaded from SYSROOT/libstd-*.rlib
= note: second definition in `panic_handler_std` loaded from the local crate
= note: second definition in the local crate (`panic_handler_std`)
error: argument should be `&PanicInfo`
--> $DIR/panic-handler-std.rs:8:16