Store idents for DefPathData
into crate metadata
Previously, we threw away the `Span` associated with a definition's identifier when we encoded crate metadata, causing us to lose location and hygiene information. We now store the identifier's `Span` in the crate metadata. When we decode items from the metadata, we combine the name and span back into an `Ident`. This improves the output of several tests, which previously had messages suppressed due to dummy spans. This is a prerequisite for #68686, since throwing away a `Span` means that we lose hygiene information.
This commit is contained in:
parent
e4b01c7791
commit
96e2d03d4b
@ -509,14 +509,6 @@ impl<'a, 'tcx> SpecializedDecoder<Span> for DecodeContext<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl SpecializedDecoder<Ident> for DecodeContext<'_, '_> {
|
||||
fn specialized_decode(&mut self) -> Result<Ident, Self::Error> {
|
||||
// FIXME(jseyfried): intercrate hygiene
|
||||
|
||||
Ok(Ident::with_dummy_span(Symbol::decode(self)?))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> SpecializedDecoder<Fingerprint> for DecodeContext<'a, 'tcx> {
|
||||
fn specialized_decode(&mut self) -> Result<Fingerprint, Self::Error> {
|
||||
Fingerprint::decode_opaque(&mut self.opaque)
|
||||
@ -663,15 +655,27 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
&self.raw_proc_macros.unwrap()[pos]
|
||||
}
|
||||
|
||||
fn item_name(&self, item_index: DefIndex) -> Symbol {
|
||||
fn item_ident(&self, item_index: DefIndex, sess: &Session) -> Ident {
|
||||
if !self.is_proc_macro(item_index) {
|
||||
self.def_key(item_index)
|
||||
let name = self
|
||||
.def_key(item_index)
|
||||
.disambiguated_data
|
||||
.data
|
||||
.get_opt_name()
|
||||
.expect("no name in item_name")
|
||||
.expect("no name in item_ident");
|
||||
let span = self
|
||||
.root
|
||||
.per_def
|
||||
.ident_span
|
||||
.get(self, item_index)
|
||||
.map(|data| data.decode((self, sess)))
|
||||
.unwrap_or_else(|| panic!("Missing ident span for {:?} ({:?})", name, item_index));
|
||||
Ident::new(name, span)
|
||||
} else {
|
||||
Symbol::intern(self.raw_proc_macro(item_index).name())
|
||||
Ident::new(
|
||||
Symbol::intern(self.raw_proc_macro(item_index).name()),
|
||||
self.get_span(item_index, sess),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -750,6 +754,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
kind: &EntryKind,
|
||||
index: DefIndex,
|
||||
parent_did: DefId,
|
||||
sess: &Session,
|
||||
) -> ty::VariantDef {
|
||||
let data = match kind {
|
||||
EntryKind::Variant(data) | EntryKind::Struct(data, _) | EntryKind::Union(data, _) => {
|
||||
@ -771,7 +776,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
|
||||
ty::VariantDef::new(
|
||||
tcx,
|
||||
Ident::with_dummy_span(self.item_name(index)),
|
||||
self.item_ident(index, sess),
|
||||
variant_did,
|
||||
ctor_did,
|
||||
data.discr,
|
||||
@ -783,7 +788,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
.decode(self)
|
||||
.map(|index| ty::FieldDef {
|
||||
did: self.local_def_id(index),
|
||||
ident: Ident::with_dummy_span(self.item_name(index)),
|
||||
ident: self.item_ident(index, sess),
|
||||
vis: self.get_visibility(index),
|
||||
})
|
||||
.collect(),
|
||||
@ -812,10 +817,10 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
.get(self, item_id)
|
||||
.unwrap_or(Lazy::empty())
|
||||
.decode(self)
|
||||
.map(|index| self.get_variant(tcx, &self.kind(index), index, did))
|
||||
.map(|index| self.get_variant(tcx, &self.kind(index), index, did, tcx.sess))
|
||||
.collect()
|
||||
} else {
|
||||
std::iter::once(self.get_variant(tcx, &kind, item_id, did)).collect()
|
||||
std::iter::once(self.get_variant(tcx, &kind, item_id, did, tcx.sess)).collect()
|
||||
};
|
||||
|
||||
tcx.alloc_adt_def(did, adt_kind, variants, repr)
|
||||
@ -1007,7 +1012,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
if let Some(kind) = self.def_kind(child_index) {
|
||||
callback(Export {
|
||||
res: Res::Def(kind, self.local_def_id(child_index)),
|
||||
ident: Ident::with_dummy_span(self.item_name(child_index)),
|
||||
ident: self.item_ident(child_index, sess),
|
||||
vis: self.get_visibility(child_index),
|
||||
span: self
|
||||
.root
|
||||
@ -1028,10 +1033,11 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
|
||||
let def_key = self.def_key(child_index);
|
||||
let span = self.get_span(child_index, sess);
|
||||
if let (Some(kind), Some(name)) =
|
||||
(self.def_kind(child_index), def_key.disambiguated_data.data.get_opt_name())
|
||||
{
|
||||
let ident = Ident::with_dummy_span(name);
|
||||
if let (Some(kind), true) = (
|
||||
self.def_kind(child_index),
|
||||
def_key.disambiguated_data.data.get_opt_name().is_some(),
|
||||
) {
|
||||
let ident = self.item_ident(child_index, sess);
|
||||
let vis = self.get_visibility(child_index);
|
||||
let def_id = self.local_def_id(child_index);
|
||||
let res = Res::Def(kind, def_id);
|
||||
@ -1138,10 +1144,10 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_associated_item(&self, id: DefIndex) -> ty::AssocItem {
|
||||
fn get_associated_item(&self, id: DefIndex, sess: &Session) -> ty::AssocItem {
|
||||
let def_key = self.def_key(id);
|
||||
let parent = self.local_def_id(def_key.parent.unwrap());
|
||||
let name = def_key.disambiguated_data.data.get_opt_name().unwrap();
|
||||
let ident = self.item_ident(id, sess);
|
||||
|
||||
let (kind, container, has_self) = match self.kind(id) {
|
||||
EntryKind::AssocConst(container, _, _) => (ty::AssocKind::Const, container, false),
|
||||
@ -1155,7 +1161,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
};
|
||||
|
||||
ty::AssocItem {
|
||||
ident: Ident::with_dummy_span(name),
|
||||
ident,
|
||||
kind,
|
||||
vis: self.get_visibility(id),
|
||||
defaultness: container.defaultness(),
|
||||
@ -1219,7 +1225,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
.get(self, id)
|
||||
.unwrap_or(Lazy::empty())
|
||||
.decode(self)
|
||||
.map(|index| respan(self.get_span(index, sess), self.item_name(index)))
|
||||
.map(|index| respan(self.get_span(index, sess), self.item_ident(index, sess).name))
|
||||
.collect()
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,7 @@ provide! { <'tcx> tcx, def_id, other, cdata,
|
||||
|child| result.push(child.res.def_id()), tcx.sess);
|
||||
tcx.arena.alloc_slice(&result)
|
||||
}
|
||||
associated_item => { cdata.get_associated_item(def_id.index) }
|
||||
associated_item => { cdata.get_associated_item(def_id.index, tcx.sess) }
|
||||
impl_trait_ref => { cdata.get_impl_trait(def_id.index, tcx) }
|
||||
impl_polarity => { cdata.get_impl_polarity(def_id.index) }
|
||||
coerce_unsized_info => {
|
||||
@ -442,8 +442,8 @@ impl CStore {
|
||||
)
|
||||
}
|
||||
|
||||
pub fn associated_item_cloned_untracked(&self, def: DefId) -> ty::AssocItem {
|
||||
self.get_crate_data(def.krate).get_associated_item(def.index)
|
||||
pub fn associated_item_cloned_untracked(&self, def: DefId, sess: &Session) -> ty::AssocItem {
|
||||
self.get_crate_data(def.krate).get_associated_item(def.index, sess)
|
||||
}
|
||||
|
||||
pub fn crate_source_untracked(&self, cnum: CrateNum) -> CrateSource {
|
||||
|
@ -13,7 +13,7 @@ use rustc::traits::specialization_graph;
|
||||
use rustc::ty::codec::{self as ty_codec, TyEncoder};
|
||||
use rustc::ty::layout::VariantIdx;
|
||||
use rustc::ty::{self, SymbolName, Ty, TyCtxt};
|
||||
use rustc_ast::ast;
|
||||
use rustc_ast::ast::{self, Ident};
|
||||
use rustc_ast::attr;
|
||||
use rustc_data_structures::fingerprint::Fingerprint;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
@ -30,7 +30,7 @@ use rustc_index::vec::Idx;
|
||||
use rustc_serialize::{opaque, Encodable, Encoder, SpecializedEncoder};
|
||||
use rustc_session::config::{self, CrateType};
|
||||
use rustc_span::source_map::Spanned;
|
||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::symbol::{kw, sym, Symbol};
|
||||
use rustc_span::{self, ExternalSource, FileName, SourceFile, Span};
|
||||
use std::hash::Hash;
|
||||
use std::num::NonZeroUsize;
|
||||
@ -220,13 +220,6 @@ impl<'tcx> SpecializedEncoder<Span> for EncodeContext<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl SpecializedEncoder<Ident> for EncodeContext<'tcx> {
|
||||
fn specialized_encode(&mut self, ident: &Ident) -> Result<(), Self::Error> {
|
||||
// FIXME(jseyfried): intercrate hygiene
|
||||
ident.name.encode(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> SpecializedEncoder<LocalDefId> for EncodeContext<'tcx> {
|
||||
#[inline]
|
||||
fn specialized_encode(&mut self, def_id: &LocalDefId) -> Result<(), Self::Error> {
|
||||
@ -633,6 +626,7 @@ impl EncodeContext<'tcx> {
|
||||
assert!(f.did.is_local());
|
||||
f.did.index
|
||||
}));
|
||||
self.encode_ident_span(def_id, variant.ident);
|
||||
self.encode_stability(def_id);
|
||||
self.encode_deprecation(def_id);
|
||||
self.encode_item_type(def_id);
|
||||
@ -735,6 +729,7 @@ impl EncodeContext<'tcx> {
|
||||
record!(self.per_def.visibility[def_id] <- field.vis);
|
||||
record!(self.per_def.span[def_id] <- self.tcx.def_span(def_id));
|
||||
record!(self.per_def.attributes[def_id] <- variant_data.fields()[field_index].attrs);
|
||||
self.encode_ident_span(def_id, field.ident);
|
||||
self.encode_stability(def_id);
|
||||
self.encode_deprecation(def_id);
|
||||
self.encode_item_type(def_id);
|
||||
@ -869,6 +864,7 @@ impl EncodeContext<'tcx> {
|
||||
record!(self.per_def.visibility[def_id] <- trait_item.vis);
|
||||
record!(self.per_def.span[def_id] <- ast_item.span);
|
||||
record!(self.per_def.attributes[def_id] <- ast_item.attrs);
|
||||
self.encode_ident_span(def_id, ast_item.ident);
|
||||
self.encode_stability(def_id);
|
||||
self.encode_const_stability(def_id);
|
||||
self.encode_deprecation(def_id);
|
||||
@ -952,6 +948,7 @@ impl EncodeContext<'tcx> {
|
||||
record!(self.per_def.visibility[def_id] <- impl_item.vis);
|
||||
record!(self.per_def.span[def_id] <- ast_item.span);
|
||||
record!(self.per_def.attributes[def_id] <- ast_item.attrs);
|
||||
self.encode_ident_span(def_id, impl_item.ident);
|
||||
self.encode_stability(def_id);
|
||||
self.encode_const_stability(def_id);
|
||||
self.encode_deprecation(def_id);
|
||||
@ -1058,6 +1055,8 @@ impl EncodeContext<'tcx> {
|
||||
|
||||
debug!("EncodeContext::encode_info_for_item({:?})", def_id);
|
||||
|
||||
self.encode_ident_span(def_id, item.ident);
|
||||
|
||||
record!(self.per_def.kind[def_id] <- match item.kind {
|
||||
hir::ItemKind::Static(_, hir::Mutability::Mut, _) => EntryKind::MutStatic,
|
||||
hir::ItemKind::Static(_, hir::Mutability::Not, _) => EntryKind::ImmStatic,
|
||||
@ -1284,6 +1283,7 @@ impl EncodeContext<'tcx> {
|
||||
record!(self.per_def.visibility[def_id] <- ty::Visibility::Public);
|
||||
record!(self.per_def.span[def_id] <- macro_def.span);
|
||||
record!(self.per_def.attributes[def_id] <- macro_def.attrs);
|
||||
self.encode_ident_span(def_id, macro_def.ident);
|
||||
self.encode_stability(def_id);
|
||||
self.encode_deprecation(def_id);
|
||||
}
|
||||
@ -1528,6 +1528,7 @@ impl EncodeContext<'tcx> {
|
||||
ty::Visibility::from_hir(&nitem.vis, nitem.hir_id, self.tcx));
|
||||
record!(self.per_def.span[def_id] <- nitem.span);
|
||||
record!(self.per_def.attributes[def_id] <- nitem.attrs);
|
||||
self.encode_ident_span(def_id, nitem.ident);
|
||||
self.encode_stability(def_id);
|
||||
self.encode_const_stability(def_id);
|
||||
self.encode_deprecation(def_id);
|
||||
@ -1622,6 +1623,10 @@ impl EncodeContext<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
fn encode_ident_span(&mut self, def_id: DefId, ident: Ident) {
|
||||
record!(self.per_def.ident_span[def_id] <- ident.span);
|
||||
}
|
||||
|
||||
/// In some cases, along with the item itself, we also
|
||||
/// encode some sub-items. Usually we want some info from the item
|
||||
/// so it's easier to do that here then to wait until we would encounter
|
||||
|
@ -256,6 +256,7 @@ define_per_def_tables! {
|
||||
kind: Table<DefIndex, Lazy<EntryKind>>,
|
||||
visibility: Table<DefIndex, Lazy<ty::Visibility>>,
|
||||
span: Table<DefIndex, Lazy<Span>>,
|
||||
ident_span: Table<DefIndex, Lazy<Span>>,
|
||||
attributes: Table<DefIndex, Lazy<[ast::Attribute]>>,
|
||||
children: Table<DefIndex, Lazy<[DefIndex]>>,
|
||||
stability: Table<DefIndex, Lazy<attr::Stability>>,
|
||||
|
@ -904,7 +904,10 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
||||
self.insert_field_names(def_id, field_names);
|
||||
}
|
||||
Res::Def(DefKind::AssocFn, def_id) => {
|
||||
if cstore.associated_item_cloned_untracked(def_id).method_has_self_argument {
|
||||
if cstore
|
||||
.associated_item_cloned_untracked(def_id, self.r.session)
|
||||
.method_has_self_argument
|
||||
{
|
||||
self.r.has_self.insert(def_id);
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,14 @@ LL | struct Foo {
|
||||
...
|
||||
LL | let _y = x.clone();
|
||||
| ^^^^^ method not found in `Foo`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<Foo>` here
|
||||
| the method is available for `std::rc::Rc<Foo>` here
|
||||
|
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `clone`, perhaps you need to implement it:
|
||||
|
@ -12,6 +12,14 @@ LL | struct NotClone;
|
||||
...
|
||||
LL | Bar::<NotClone> { x: 1 }.clone();
|
||||
| ^^^^^ method not found in `Bar<NotClone>`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<Bar<NotClone>>` here
|
||||
| the method is available for `std::rc::Rc<Bar<NotClone>>` here
|
||||
|
|
||||
= note: the method `clone` exists but the following trait bounds were not satisfied:
|
||||
`NotClone: std::clone::Clone`
|
||||
|
@ -3,6 +3,14 @@ error[E0004]: non-exhaustive patterns: `None` and `Some(_)` not covered
|
||||
|
|
||||
LL | match x { }
|
||||
| ^ patterns `None` and `Some(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/option.rs:LL:COL
|
||||
|
|
||||
LL | None,
|
||||
| ---- not covered
|
||||
...
|
||||
LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T),
|
||||
| ---- not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
|
@ -3,6 +3,11 @@ error[E0005]: refutable pattern in local binding: `None` not covered
|
||||
|
|
||||
LL | let Some(y) = x;
|
||||
| ^^^^^^^ pattern `None` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/option.rs:LL:COL
|
||||
|
|
||||
LL | None,
|
||||
| ---- not covered
|
||||
|
|
||||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
|
||||
|
@ -3,6 +3,11 @@ error[E0005]: refutable pattern in `for` loop binding: `None` not covered
|
||||
|
|
||||
LL | for Some(x) in xs {}
|
||||
| ^^^^^^^ pattern `None` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/option.rs:LL:COL
|
||||
|
|
||||
LL | None,
|
||||
| ---- not covered
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -3,6 +3,11 @@ error[E0005]: refutable pattern in local binding: `Err(_)` not covered
|
||||
|
|
||||
LL | let Ok(_x) = foo();
|
||||
| ^^^^^^ pattern `Err(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/result.rs:LL:COL
|
||||
|
|
||||
LL | Err(#[stable(feature = "rust1", since = "1.0.0")] E),
|
||||
| --- not covered
|
||||
|
|
||||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
|
||||
|
@ -5,6 +5,11 @@ LL | impl<T> Iterable for Vec<T> {
|
||||
| --------------------------- in this `impl` item
|
||||
LL | type Item<'a> where T: 'a = <std::slice::Iter<'a, T> as Iterator>::Item;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected reference, found associated type
|
||||
|
|
||||
::: $SRC_DIR/libcore/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | type Item;
|
||||
| ---- associated type defined here
|
||||
|
|
||||
= note: expected reference `&T`
|
||||
found associated type `<std::vec::Vec<T> as Iterable>::Item<'_>`
|
||||
@ -18,6 +23,11 @@ LL | impl<T> Iterable for [T] {
|
||||
| ------------------------ in this `impl` item
|
||||
LL | type Item<'a> where T: 'a = <std::slice::Iter<'a, T> as Iterator>::Item;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected reference, found associated type
|
||||
|
|
||||
::: $SRC_DIR/libcore/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | type Item;
|
||||
| ---- associated type defined here
|
||||
|
|
||||
= note: expected reference `&T`
|
||||
found associated type `<[T] as Iterable>::Item<'_>`
|
||||
|
@ -83,6 +83,16 @@ error[E0599]: no method named `method` found for struct `std::rc::Rc<&mut std::b
|
||||
|
|
||||
LL | std::rc::Rc::new(&mut Box::new(&1i32)).method();
|
||||
| ^^^^^^ method not found in `std::rc::Rc<&mut std::boxed::Box<&i32>>`
|
||||
|
|
||||
::: $DIR/auxiliary/no_method_suggested_traits.rs:8:12
|
||||
|
|
||||
LL | fn method(&self) {}
|
||||
| ------
|
||||
| |
|
||||
| the method is available for `std::boxed::Box<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
|
||||
| the method is available for `std::pin::Pin<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
|
||||
| the method is available for `std::sync::Arc<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
|
||||
| the method is available for `std::rc::Rc<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
|
||||
|
|
||||
= help: items from traits can only be used if the trait is in scope
|
||||
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
|
||||
|
@ -6,6 +6,14 @@ LL | struct C {
|
||||
...
|
||||
LL | let _d = c.clone();
|
||||
| ^^^^^ method not found in `C`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<C>` here
|
||||
| the method is available for `std::rc::Rc<C>` here
|
||||
|
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `clone`, perhaps you need to implement it:
|
||||
|
@ -8,6 +8,14 @@ LL | let _ = Struct::<A>::new().clone();
|
||||
|
|
||||
LL | pub struct Struct<A>(A);
|
||||
| ------------------------ doesn't satisfy `issue_69725::Struct<A>: std::clone::Clone`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<issue_69725::Struct<A>>` here
|
||||
| the method is available for `std::rc::Rc<issue_69725::Struct<A>>` here
|
||||
|
|
||||
= note: the method `clone` exists but the following trait bounds were not satisfied:
|
||||
`A: std::clone::Clone`
|
||||
|
@ -3,6 +3,14 @@ error[E0599]: no method named `clone` found for enum `libc::c_void` in the curre
|
||||
|
|
||||
LL | let _z = (*y).clone();
|
||||
| ^^^^^ method not found in `libc::c_void`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<libc::c_void>` here
|
||||
| the method is available for `std::rc::Rc<libc::c_void>` here
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -6,6 +6,14 @@ LL | struct Foo {
|
||||
...
|
||||
LL | let _y = x.clone();
|
||||
| ^^^^^ method not found in `Foo`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<Foo>` here
|
||||
| the method is available for `std::rc::Rc<Foo>` here
|
||||
|
|
||||
= help: items from traits can only be used if the trait is implemented and in scope
|
||||
= note: the following trait defines an item `clone`, perhaps you need to implement it:
|
||||
|
@ -11,6 +11,14 @@ error[E0004]: non-exhaustive patterns: `Some(Some(West))` not covered
|
||||
|
|
||||
LL | match Some(Some(North)) {
|
||||
| ^^^^^^^^^^^^^^^^^ pattern `Some(Some(West))` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/option.rs:LL:COL
|
||||
|
|
||||
LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T),
|
||||
| ----
|
||||
| |
|
||||
| not covered
|
||||
| not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
|
@ -3,6 +3,11 @@ error[E0004]: non-exhaustive patterns: `Some(Private { misc: true, .. })` not co
|
||||
|
|
||||
LL | match private::DATA {
|
||||
| ^^^^^^^^^^^^^ pattern `Some(Private { misc: true, .. })` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/option.rs:LL:COL
|
||||
|
|
||||
LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T),
|
||||
| ---- not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
|
@ -25,6 +25,11 @@ error[E0004]: non-exhaustive patterns: `Some(_)` not covered
|
||||
|
|
||||
LL | match Some(10) {
|
||||
| ^^^^^^^^ pattern `Some(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/option.rs:LL:COL
|
||||
|
|
||||
LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T),
|
||||
| ---- not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
|
@ -3,6 +3,11 @@ error[E0005]: refutable pattern in local binding: `Err(_)` not covered
|
||||
|
|
||||
LL | let Ok(x) = res;
|
||||
| ^^^^^ pattern `Err(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/result.rs:LL:COL
|
||||
|
|
||||
LL | Err(#[stable(feature = "rust1", since = "1.0.0")] E),
|
||||
| --- not covered
|
||||
|
|
||||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
|
||||
|
@ -3,8 +3,11 @@ error[E0038]: the trait `issue_3907::Foo` cannot be made into an object
|
||||
|
|
||||
LL | fn bar(_x: Foo) {}
|
||||
| ^^^ the trait `issue_3907::Foo` cannot be made into an object
|
||||
|
|
||||
::: $DIR/auxiliary/issue-3907.rs:2:8
|
||||
|
|
||||
= note: the trait cannot be made into an object because associated function `bar` has no `self` parameter
|
||||
LL | fn bar();
|
||||
| --- the trait cannot be made into an object because associated function `bar` has no `self` parameter
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -27,6 +27,13 @@ error[E0004]: non-exhaustive patterns: `Tuple(_)` and `Struct { .. }` not covere
|
||||
|
|
||||
LL | match x {}
|
||||
| ^ patterns `Tuple(_)` and `Struct { .. }` not covered
|
||||
|
|
||||
::: $DIR/auxiliary/uninhabited.rs:17:23
|
||||
|
|
||||
LL | #[non_exhaustive] Tuple(!),
|
||||
| ----- not covered
|
||||
LL | #[non_exhaustive] Struct { x: ! }
|
||||
| ------ not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
|
@ -27,6 +27,13 @@ error[E0004]: non-exhaustive patterns: `Tuple(_)` and `Struct { .. }` not covere
|
||||
|
|
||||
LL | match x {}
|
||||
| ^ patterns `Tuple(_)` and `Struct { .. }` not covered
|
||||
|
|
||||
::: $DIR/auxiliary/uninhabited.rs:17:23
|
||||
|
|
||||
LL | #[non_exhaustive] Tuple(!),
|
||||
| ----- not covered
|
||||
LL | #[non_exhaustive] Struct { x: ! }
|
||||
| ------ not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
|
@ -3,6 +3,11 @@ error[E0004]: non-exhaustive patterns: `Err(_)` not covered
|
||||
|
|
||||
LL | let _ = match x {
|
||||
| ^ pattern `Err(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/result.rs:LL:COL
|
||||
|
|
||||
LL | Err(#[stable(feature = "rust1", since = "1.0.0")] E),
|
||||
| --- not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
@ -46,6 +51,11 @@ error[E0004]: non-exhaustive patterns: `Err(_)` not covered
|
||||
|
|
||||
LL | let _ = match x {
|
||||
| ^ pattern `Err(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/result.rs:LL:COL
|
||||
|
|
||||
LL | Err(#[stable(feature = "rust1", since = "1.0.0")] E),
|
||||
| --- not covered
|
||||
|
|
||||
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
|
||||
|
||||
@ -54,6 +64,11 @@ error[E0005]: refutable pattern in local binding: `Err(_)` not covered
|
||||
|
|
||||
LL | let Ok(x) = x;
|
||||
| ^^^^^ pattern `Err(_)` not covered
|
||||
|
|
||||
::: $SRC_DIR/libcore/result.rs:LL:COL
|
||||
|
|
||||
LL | Err(#[stable(feature = "rust1", since = "1.0.0")] E),
|
||||
| --- not covered
|
||||
|
|
||||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
|
||||
|
@ -21,6 +21,14 @@ LL | struct CloneNoCopy;
|
||||
...
|
||||
LL | let w = u.clone();
|
||||
| ^^^^^ method not found in `U5<CloneNoCopy>`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<U5<CloneNoCopy>>` here
|
||||
| the method is available for `std::rc::Rc<U5<CloneNoCopy>>` here
|
||||
|
|
||||
= note: the method `clone` exists but the following trait bounds were not satisfied:
|
||||
`CloneNoCopy: std::marker::Copy`
|
||||
|
@ -14,6 +14,14 @@ LL | let _z = y.clone();
|
||||
|
|
||||
LL | pub struct Box<T: ?Sized>(Unique<T>);
|
||||
| ------------------------------------- doesn't satisfy `std::boxed::Box<dyn Foo>: std::clone::Clone`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<std::boxed::Box<dyn Foo>>` here
|
||||
| the method is available for `std::rc::Rc<std::boxed::Box<dyn Foo>>` here
|
||||
|
|
||||
= note: the method `clone` exists but the following trait bounds were not satisfied:
|
||||
`dyn Foo: std::marker::Sized`
|
||||
|
@ -11,6 +11,14 @@ LL | let _j = i.clone();
|
||||
|
|
||||
LL | pub struct Box<T: ?Sized>(Unique<T>);
|
||||
| ------------------------------------- doesn't satisfy `std::boxed::Box<R>: std::clone::Clone`
|
||||
|
|
||||
::: $SRC_DIR/libcore/clone.rs:LL:COL
|
||||
|
|
||||
LL | fn clone(&self) -> Self;
|
||||
| -----
|
||||
| |
|
||||
| the method is available for `std::sync::Arc<std::boxed::Box<R>>` here
|
||||
| the method is available for `std::rc::Rc<std::boxed::Box<R>>` here
|
||||
|
|
||||
= note: the method `clone` exists but the following trait bounds were not satisfied:
|
||||
`R: std::clone::Clone`
|
||||
|
Loading…
Reference in New Issue
Block a user