mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-08 04:56:58 +00:00
Auto merge of #98203 - kckeiks:gather-body-owners-in-hir-item-queries, r=cjgillot
gather body owners Issue #96341
This commit is contained in:
commit
30243dd87e
@ -39,6 +39,7 @@ pub fn fn_sig<'hir>(node: Node<'hir>) -> Option<&'hir FnSig<'hir>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
pub fn associated_body<'hir>(node: Node<'hir>) -> Option<BodyId> {
|
pub fn associated_body<'hir>(node: Node<'hir>) -> Option<BodyId> {
|
||||||
match node {
|
match node {
|
||||||
Node::Item(Item {
|
Node::Item(Item {
|
||||||
@ -486,35 +487,13 @@ impl<'hir> Map<'hir> {
|
|||||||
/// crate. If you would prefer to iterate over the bodies
|
/// crate. If you would prefer to iterate over the bodies
|
||||||
/// themselves, you can do `self.hir().krate().body_ids.iter()`.
|
/// themselves, you can do `self.hir().krate().body_ids.iter()`.
|
||||||
pub fn body_owners(self) -> impl Iterator<Item = LocalDefId> + 'hir {
|
pub fn body_owners(self) -> impl Iterator<Item = LocalDefId> + 'hir {
|
||||||
self.krate()
|
self.tcx.hir_crate_items(()).body_owners.iter().copied()
|
||||||
.owners
|
|
||||||
.iter_enumerated()
|
|
||||||
.flat_map(move |(owner, owner_info)| {
|
|
||||||
let bodies = &owner_info.as_owner()?.nodes.bodies;
|
|
||||||
Some(bodies.iter().map(move |&(local_id, _)| {
|
|
||||||
let hir_id = HirId { owner, local_id };
|
|
||||||
let body_id = BodyId { hir_id };
|
|
||||||
self.body_owner_def_id(body_id)
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
.flatten()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn par_body_owners<F: Fn(LocalDefId) + Sync + Send>(self, f: F) {
|
pub fn par_body_owners<F: Fn(LocalDefId) + Sync + Send>(self, f: F) {
|
||||||
use rustc_data_structures::sync::{par_iter, ParallelIterator};
|
use rustc_data_structures::sync::{par_iter, ParallelIterator};
|
||||||
#[cfg(parallel_compiler)]
|
|
||||||
use rustc_rayon::iter::IndexedParallelIterator;
|
|
||||||
|
|
||||||
par_iter(&self.krate().owners.raw).enumerate().for_each(|(owner, owner_info)| {
|
par_iter(&self.tcx.hir_crate_items(()).body_owners[..]).for_each(|&def_id| f(def_id));
|
||||||
let owner = LocalDefId::new(owner);
|
|
||||||
if let MaybeOwner::Owner(owner_info) = owner_info {
|
|
||||||
par_iter(owner_info.nodes.bodies.range(..)).for_each(|(local_id, _)| {
|
|
||||||
let hir_id = HirId { owner, local_id: *local_id };
|
|
||||||
let body_id = BodyId { hir_id };
|
|
||||||
f(self.body_owner_def_id(body_id))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ty_param_owner(self, def_id: LocalDefId) -> LocalDefId {
|
pub fn ty_param_owner(self, def_id: LocalDefId) -> LocalDefId {
|
||||||
@ -1283,85 +1262,48 @@ fn hir_id_to_string(map: Map<'_>, id: HirId) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalDefId) -> ModuleItems {
|
pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalDefId) -> ModuleItems {
|
||||||
let mut collector = ModuleCollector {
|
let mut collector = ItemCollector::new(tcx, false);
|
||||||
tcx,
|
|
||||||
submodules: Vec::default(),
|
|
||||||
items: Vec::default(),
|
|
||||||
trait_items: Vec::default(),
|
|
||||||
impl_items: Vec::default(),
|
|
||||||
foreign_items: Vec::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let (hir_mod, span, hir_id) = tcx.hir().get_module(module_id);
|
let (hir_mod, span, hir_id) = tcx.hir().get_module(module_id);
|
||||||
collector.visit_mod(hir_mod, span, hir_id);
|
collector.visit_mod(hir_mod, span, hir_id);
|
||||||
|
|
||||||
let ModuleCollector { submodules, items, trait_items, impl_items, foreign_items, .. } =
|
let ItemCollector {
|
||||||
collector;
|
submodules,
|
||||||
|
items,
|
||||||
|
trait_items,
|
||||||
|
impl_items,
|
||||||
|
foreign_items,
|
||||||
|
body_owners,
|
||||||
|
..
|
||||||
|
} = collector;
|
||||||
return ModuleItems {
|
return ModuleItems {
|
||||||
submodules: submodules.into_boxed_slice(),
|
submodules: submodules.into_boxed_slice(),
|
||||||
items: items.into_boxed_slice(),
|
items: items.into_boxed_slice(),
|
||||||
trait_items: trait_items.into_boxed_slice(),
|
trait_items: trait_items.into_boxed_slice(),
|
||||||
impl_items: impl_items.into_boxed_slice(),
|
impl_items: impl_items.into_boxed_slice(),
|
||||||
foreign_items: foreign_items.into_boxed_slice(),
|
foreign_items: foreign_items.into_boxed_slice(),
|
||||||
|
body_owners: body_owners.into_boxed_slice(),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ModuleCollector<'tcx> {
|
|
||||||
tcx: TyCtxt<'tcx>,
|
|
||||||
submodules: Vec<LocalDefId>,
|
|
||||||
items: Vec<ItemId>,
|
|
||||||
trait_items: Vec<TraitItemId>,
|
|
||||||
impl_items: Vec<ImplItemId>,
|
|
||||||
foreign_items: Vec<ForeignItemId>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'hir> Visitor<'hir> for ModuleCollector<'hir> {
|
|
||||||
type NestedFilter = nested_filter::All;
|
|
||||||
|
|
||||||
fn nested_visit_map(&mut self) -> Self::Map {
|
|
||||||
self.tcx.hir()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_item(&mut self, item: &'hir Item<'hir>) {
|
|
||||||
self.items.push(item.item_id());
|
|
||||||
if let ItemKind::Mod(..) = item.kind {
|
|
||||||
// If this declares another module, do not recurse inside it.
|
|
||||||
self.submodules.push(item.def_id);
|
|
||||||
} else {
|
|
||||||
intravisit::walk_item(self, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_trait_item(&mut self, item: &'hir TraitItem<'hir>) {
|
|
||||||
self.trait_items.push(item.trait_item_id());
|
|
||||||
intravisit::walk_trait_item(self, item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_impl_item(&mut self, item: &'hir ImplItem<'hir>) {
|
|
||||||
self.impl_items.push(item.impl_item_id());
|
|
||||||
intravisit::walk_impl_item(self, item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_foreign_item(&mut self, item: &'hir ForeignItem<'hir>) {
|
|
||||||
self.foreign_items.push(item.foreign_item_id());
|
|
||||||
intravisit::walk_foreign_item(self, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn hir_crate_items(tcx: TyCtxt<'_>, _: ()) -> ModuleItems {
|
pub(crate) fn hir_crate_items(tcx: TyCtxt<'_>, _: ()) -> ModuleItems {
|
||||||
let mut collector = CrateCollector {
|
let mut collector = ItemCollector::new(tcx, true);
|
||||||
tcx,
|
|
||||||
submodules: Vec::default(),
|
|
||||||
items: Vec::default(),
|
|
||||||
trait_items: Vec::default(),
|
|
||||||
impl_items: Vec::default(),
|
|
||||||
foreign_items: Vec::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
|
// A "crate collector" and "module collector" start at a
|
||||||
|
// module item (the former starts at the crate root) but only
|
||||||
|
// the former needs to collect it. ItemCollector does not do this for us.
|
||||||
|
collector.submodules.push(CRATE_DEF_ID);
|
||||||
tcx.hir().walk_toplevel_module(&mut collector);
|
tcx.hir().walk_toplevel_module(&mut collector);
|
||||||
|
|
||||||
let CrateCollector { submodules, items, trait_items, impl_items, foreign_items, .. } =
|
let ItemCollector {
|
||||||
collector;
|
submodules,
|
||||||
|
items,
|
||||||
|
trait_items,
|
||||||
|
impl_items,
|
||||||
|
foreign_items,
|
||||||
|
body_owners,
|
||||||
|
..
|
||||||
|
} = collector;
|
||||||
|
|
||||||
return ModuleItems {
|
return ModuleItems {
|
||||||
submodules: submodules.into_boxed_slice(),
|
submodules: submodules.into_boxed_slice(),
|
||||||
@ -1369,47 +1311,96 @@ pub(crate) fn hir_crate_items(tcx: TyCtxt<'_>, _: ()) -> ModuleItems {
|
|||||||
trait_items: trait_items.into_boxed_slice(),
|
trait_items: trait_items.into_boxed_slice(),
|
||||||
impl_items: impl_items.into_boxed_slice(),
|
impl_items: impl_items.into_boxed_slice(),
|
||||||
foreign_items: foreign_items.into_boxed_slice(),
|
foreign_items: foreign_items.into_boxed_slice(),
|
||||||
|
body_owners: body_owners.into_boxed_slice(),
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
struct CrateCollector<'tcx> {
|
struct ItemCollector<'tcx> {
|
||||||
tcx: TyCtxt<'tcx>,
|
// When true, it collects all items in the create,
|
||||||
submodules: Vec<LocalDefId>,
|
// otherwise it collects items in some module.
|
||||||
items: Vec<ItemId>,
|
crate_collector: bool,
|
||||||
trait_items: Vec<TraitItemId>,
|
tcx: TyCtxt<'tcx>,
|
||||||
impl_items: Vec<ImplItemId>,
|
submodules: Vec<LocalDefId>,
|
||||||
foreign_items: Vec<ForeignItemId>,
|
items: Vec<ItemId>,
|
||||||
}
|
trait_items: Vec<TraitItemId>,
|
||||||
|
impl_items: Vec<ImplItemId>,
|
||||||
|
foreign_items: Vec<ForeignItemId>,
|
||||||
|
body_owners: Vec<LocalDefId>,
|
||||||
|
}
|
||||||
|
|
||||||
impl<'hir> Visitor<'hir> for CrateCollector<'hir> {
|
impl<'tcx> ItemCollector<'tcx> {
|
||||||
type NestedFilter = nested_filter::All;
|
fn new(tcx: TyCtxt<'tcx>, crate_collector: bool) -> ItemCollector<'tcx> {
|
||||||
|
ItemCollector {
|
||||||
fn nested_visit_map(&mut self) -> Self::Map {
|
crate_collector,
|
||||||
self.tcx.hir()
|
tcx,
|
||||||
}
|
submodules: Vec::default(),
|
||||||
|
items: Vec::default(),
|
||||||
fn visit_item(&mut self, item: &'hir Item<'hir>) {
|
trait_items: Vec::default(),
|
||||||
self.items.push(item.item_id());
|
impl_items: Vec::default(),
|
||||||
intravisit::walk_item(self, item)
|
foreign_items: Vec::default(),
|
||||||
}
|
body_owners: Vec::default(),
|
||||||
|
|
||||||
fn visit_mod(&mut self, m: &'hir Mod<'hir>, _s: Span, n: HirId) {
|
|
||||||
self.submodules.push(n.owner);
|
|
||||||
intravisit::walk_mod(self, m, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_foreign_item(&mut self, item: &'hir ForeignItem<'hir>) {
|
|
||||||
self.foreign_items.push(item.foreign_item_id());
|
|
||||||
intravisit::walk_foreign_item(self, item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_trait_item(&mut self, item: &'hir TraitItem<'hir>) {
|
|
||||||
self.trait_items.push(item.trait_item_id());
|
|
||||||
intravisit::walk_trait_item(self, item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_impl_item(&mut self, item: &'hir ImplItem<'hir>) {
|
|
||||||
self.impl_items.push(item.impl_item_id());
|
|
||||||
intravisit::walk_impl_item(self, item)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'hir> Visitor<'hir> for ItemCollector<'hir> {
|
||||||
|
type NestedFilter = nested_filter::All;
|
||||||
|
|
||||||
|
fn nested_visit_map(&mut self) -> Self::Map {
|
||||||
|
self.tcx.hir()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_item(&mut self, item: &'hir Item<'hir>) {
|
||||||
|
if associated_body(Node::Item(item)).is_some() {
|
||||||
|
self.body_owners.push(item.def_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.items.push(item.item_id());
|
||||||
|
|
||||||
|
// Items that are modules are handled here instead of in visit_mod.
|
||||||
|
if let ItemKind::Mod(module) = &item.kind {
|
||||||
|
self.submodules.push(item.def_id);
|
||||||
|
// A module collector does not recurse inside nested modules.
|
||||||
|
if self.crate_collector {
|
||||||
|
intravisit::walk_mod(self, module, item.hir_id());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
intravisit::walk_item(self, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_foreign_item(&mut self, item: &'hir ForeignItem<'hir>) {
|
||||||
|
self.foreign_items.push(item.foreign_item_id());
|
||||||
|
intravisit::walk_foreign_item(self, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_anon_const(&mut self, c: &'hir AnonConst) {
|
||||||
|
self.body_owners.push(self.tcx.hir().local_def_id(c.hir_id));
|
||||||
|
intravisit::walk_anon_const(self, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_expr(&mut self, ex: &'hir Expr<'hir>) {
|
||||||
|
if matches!(ex.kind, ExprKind::Closure { .. }) {
|
||||||
|
self.body_owners.push(self.tcx.hir().local_def_id(ex.hir_id));
|
||||||
|
}
|
||||||
|
intravisit::walk_expr(self, ex)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_trait_item(&mut self, item: &'hir TraitItem<'hir>) {
|
||||||
|
if associated_body(Node::TraitItem(item)).is_some() {
|
||||||
|
self.body_owners.push(item.def_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.trait_items.push(item.trait_item_id());
|
||||||
|
intravisit::walk_trait_item(self, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_impl_item(&mut self, item: &'hir ImplItem<'hir>) {
|
||||||
|
if associated_body(Node::ImplItem(item)).is_some() {
|
||||||
|
self.body_owners.push(item.def_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.impl_items.push(item.impl_item_id());
|
||||||
|
intravisit::walk_impl_item(self, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -44,6 +44,7 @@ pub struct ModuleItems {
|
|||||||
trait_items: Box<[TraitItemId]>,
|
trait_items: Box<[TraitItemId]>,
|
||||||
impl_items: Box<[ImplItemId]>,
|
impl_items: Box<[ImplItemId]>,
|
||||||
foreign_items: Box<[ForeignItemId]>,
|
foreign_items: Box<[ForeignItemId]>,
|
||||||
|
body_owners: Box<[LocalDefId]>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ModuleItems {
|
impl ModuleItems {
|
||||||
|
@ -33,33 +33,6 @@ LL | asm!("{}", sym x);
|
|||||||
|
|
|
|
||||||
= help: `sym` operands must refer to either a function or a static
|
= help: `sym` operands must refer to either a function or a static
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/type-check-1.rs:58:26
|
|
||||||
|
|
|
||||||
LL | asm!("{}", const 0f32);
|
|
||||||
| ^^^^ expected integer, found `f32`
|
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/type-check-1.rs:60:26
|
|
||||||
|
|
|
||||||
LL | asm!("{}", const 0 as *mut u8);
|
|
||||||
| ^^^^^^^^^^^^ expected integer, found *-ptr
|
|
||||||
|
|
|
||||||
= note: expected type `{integer}`
|
|
||||||
found raw pointer `*mut u8`
|
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/type-check-1.rs:62:26
|
|
||||||
|
|
|
||||||
LL | asm!("{}", const &0);
|
|
||||||
| ^^ expected integer, found `&{integer}`
|
|
||||||
|
|
|
||||||
help: consider removing the borrow
|
|
||||||
|
|
|
||||||
LL - asm!("{}", const &0);
|
|
||||||
LL + asm!("{}", const 0);
|
|
||||||
|
|
|
||||||
|
|
||||||
error: invalid asm output
|
error: invalid asm output
|
||||||
--> $DIR/type-check-1.rs:15:29
|
--> $DIR/type-check-1.rs:15:29
|
||||||
|
|
|
|
||||||
@ -123,6 +96,33 @@ LL | asm!("{}", inout(reg) v[..]);
|
|||||||
|
|
|
|
||||||
= note: only integers, floats, SIMD vectors, pointers and function pointers can be used as arguments for inline assembly
|
= note: only integers, floats, SIMD vectors, pointers and function pointers can be used as arguments for inline assembly
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/type-check-1.rs:58:26
|
||||||
|
|
|
||||||
|
LL | asm!("{}", const 0f32);
|
||||||
|
| ^^^^ expected integer, found `f32`
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/type-check-1.rs:60:26
|
||||||
|
|
|
||||||
|
LL | asm!("{}", const 0 as *mut u8);
|
||||||
|
| ^^^^^^^^^^^^ expected integer, found *-ptr
|
||||||
|
|
|
||||||
|
= note: expected type `{integer}`
|
||||||
|
found raw pointer `*mut u8`
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/type-check-1.rs:62:26
|
||||||
|
|
|
||||||
|
LL | asm!("{}", const &0);
|
||||||
|
| ^^ expected integer, found `&{integer}`
|
||||||
|
|
|
||||||
|
help: consider removing the borrow
|
||||||
|
|
|
||||||
|
LL - asm!("{}", const &0);
|
||||||
|
LL + asm!("{}", const 0);
|
||||||
|
|
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/type-check-1.rs:76:25
|
--> $DIR/type-check-1.rs:76:25
|
||||||
|
|
|
|
||||||
|
@ -22,30 +22,6 @@ note: the late bound lifetime parameter is introduced here
|
|||||||
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:30:23
|
|
||||||
|
|
|
||||||
LL | let _ = [0; faz::<'a>(&())];
|
|
||||||
| ^^
|
|
||||||
|
|
|
||||||
note: the late bound lifetime parameter is introduced here
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:8:14
|
|
||||||
|
|
|
||||||
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:33:23
|
|
||||||
|
|
|
||||||
LL | let _ = [0; faz::<'b>(&())];
|
|
||||||
| ^^
|
|
||||||
|
|
|
||||||
note: the late bound lifetime parameter is introduced here
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:8:14
|
|
||||||
|
|
|
||||||
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
||||||
--> $DIR/const-arg-in-const-arg.rs:41:24
|
--> $DIR/const-arg-in-const-arg.rs:41:24
|
||||||
|
|
|
|
||||||
@ -118,6 +94,30 @@ LL | let _ = [0; bar::<N>()];
|
|||||||
|
|
|
|
||||||
= help: try adding a `where` bound using this expression: `where [(); bar::<N>()]:`
|
= help: try adding a `where` bound using this expression: `where [(); bar::<N>()]:`
|
||||||
|
|
||||||
|
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:30:23
|
||||||
|
|
|
||||||
|
LL | let _ = [0; faz::<'a>(&())];
|
||||||
|
| ^^
|
||||||
|
|
|
||||||
|
note: the late bound lifetime parameter is introduced here
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:8:14
|
||||||
|
|
|
||||||
|
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
||||||
|
| ^^
|
||||||
|
|
||||||
|
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:33:23
|
||||||
|
|
|
||||||
|
LL | let _ = [0; faz::<'b>(&())];
|
||||||
|
| ^^
|
||||||
|
|
|
||||||
|
note: the late bound lifetime parameter is introduced here
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:8:14
|
||||||
|
|
|
||||||
|
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
||||||
|
| ^^
|
||||||
|
|
||||||
error: unconstrained generic constant
|
error: unconstrained generic constant
|
||||||
--> $DIR/const-arg-in-const-arg.rs:47:19
|
--> $DIR/const-arg-in-const-arg.rs:47:19
|
||||||
|
|
|
|
||||||
|
@ -240,41 +240,6 @@ note: the late bound lifetime parameter is introduced here
|
|||||||
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0747]: unresolved item provided when a constant was expected
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:27:23
|
|
||||||
|
|
|
||||||
LL | let _ = [0; bar::<N>()];
|
|
||||||
| ^
|
|
||||||
|
|
|
||||||
help: if this generic argument was intended as a const parameter, surround it with braces
|
|
||||||
|
|
|
||||||
LL | let _ = [0; bar::<{ N }>()];
|
|
||||||
| + +
|
|
||||||
|
|
||||||
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:30:23
|
|
||||||
|
|
|
||||||
LL | let _ = [0; faz::<'a>(&())];
|
|
||||||
| ^^
|
|
||||||
|
|
|
||||||
note: the late bound lifetime parameter is introduced here
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:8:14
|
|
||||||
|
|
|
||||||
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:33:23
|
|
||||||
|
|
|
||||||
LL | let _ = [0; faz::<'b>(&())];
|
|
||||||
| ^^
|
|
||||||
|
|
|
||||||
note: the late bound lifetime parameter is introduced here
|
|
||||||
--> $DIR/const-arg-in-const-arg.rs:8:14
|
|
||||||
|
|
|
||||||
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error[E0747]: unresolved item provided when a constant was expected
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
--> $DIR/const-arg-in-const-arg.rs:38:24
|
--> $DIR/const-arg-in-const-arg.rs:38:24
|
||||||
|
|
|
|
||||||
@ -318,6 +283,41 @@ LL | let _ = [0; foo::<T>()];
|
|||||||
|
|
|
|
||||||
= note: this may fail depending on what value the parameter takes
|
= note: this may fail depending on what value the parameter takes
|
||||||
|
|
||||||
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:27:23
|
||||||
|
|
|
||||||
|
LL | let _ = [0; bar::<N>()];
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
||||||
|
LL | let _ = [0; bar::<{ N }>()];
|
||||||
|
| + +
|
||||||
|
|
||||||
|
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:30:23
|
||||||
|
|
|
||||||
|
LL | let _ = [0; faz::<'a>(&())];
|
||||||
|
| ^^
|
||||||
|
|
|
||||||
|
note: the late bound lifetime parameter is introduced here
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:8:14
|
||||||
|
|
|
||||||
|
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
||||||
|
| ^^
|
||||||
|
|
||||||
|
error: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:33:23
|
||||||
|
|
|
||||||
|
LL | let _ = [0; faz::<'b>(&())];
|
||||||
|
| ^^
|
||||||
|
|
|
||||||
|
note: the late bound lifetime parameter is introduced here
|
||||||
|
--> $DIR/const-arg-in-const-arg.rs:8:14
|
||||||
|
|
|
||||||
|
LL | const fn faz<'a>(_: &'a ()) -> usize { 13 }
|
||||||
|
| ^^
|
||||||
|
|
||||||
error[E0747]: unresolved item provided when a constant was expected
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
--> $DIR/const-arg-in-const-arg.rs:49:27
|
--> $DIR/const-arg-in-const-arg.rs:49:27
|
||||||
|
|
|
|
||||||
|
@ -1,11 +1,3 @@
|
|||||||
error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
|
|
||||||
--> $DIR/const-extern-fn-requires-unsafe.rs:9:17
|
|
||||||
|
|
|
||||||
LL | let a: [u8; foo()];
|
|
||||||
| ^^^^^ call to unsafe function
|
|
||||||
|
|
|
||||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
|
||||||
|
|
||||||
error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
|
error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
|
||||||
--> $DIR/const-extern-fn-requires-unsafe.rs:12:5
|
--> $DIR/const-extern-fn-requires-unsafe.rs:12:5
|
||||||
|
|
|
|
||||||
@ -14,6 +6,14 @@ LL | foo();
|
|||||||
|
|
|
|
||||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/const-extern-fn-requires-unsafe.rs:9:17
|
||||||
|
|
|
||||||
|
LL | let a: [u8; foo()];
|
||||||
|
| ^^^^^ call to unsafe function
|
||||||
|
|
|
||||||
|
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0133`.
|
For more information about this error, try `rustc --explain E0133`.
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/issue-47486.rs:2:10
|
||||||
|
|
|
||||||
|
LL | () < std::mem::size_of::<_>();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found `usize`
|
||||||
|
|
||||||
error[E0282]: type annotations needed
|
error[E0282]: type annotations needed
|
||||||
--> $DIR/issue-47486.rs:3:11
|
--> $DIR/issue-47486.rs:3:11
|
||||||
|
|
|
|
||||||
@ -9,12 +15,6 @@ help: consider specifying the generic argument
|
|||||||
LL | [0u8; std::mem::size_of::<_>()];
|
LL | [0u8; std::mem::size_of::<_>()];
|
||||||
| ~~~~~
|
| ~~~~~
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/issue-47486.rs:2:10
|
|
||||||
|
|
|
||||||
LL | () < std::mem::size_of::<_>();
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found `usize`
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0282, E0308.
|
Some errors have detailed explanations: E0282, E0308.
|
||||||
|
@ -142,22 +142,6 @@ help: consider further restricting this bound
|
|||||||
LL | fn duplicate_custom_4<T: A + Copy + Trait>(t: S<T>) -> (S<T>, S<T>)
|
LL | fn duplicate_custom_4<T: A + Copy + Trait>(t: S<T>) -> (S<T>, S<T>)
|
||||||
| ++++++++++++++
|
| ++++++++++++++
|
||||||
|
|
||||||
error[E0382]: use of moved value: `t`
|
|
||||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:83:9
|
|
||||||
|
|
|
||||||
LL | fn existing_colon_in_where<T>(t: T)
|
|
||||||
| - move occurs because `t` has type `T`, which does not implement the `Copy` trait
|
|
||||||
...
|
|
||||||
LL | [t, t];
|
|
||||||
| - ^ value used here after move
|
|
||||||
| |
|
|
||||||
| value moved here
|
|
||||||
|
|
|
||||||
help: consider further restricting type parameter `T`
|
|
||||||
|
|
|
||||||
LL | T:, T: Copy
|
|
||||||
| ~~~~~~~~~
|
|
||||||
|
|
||||||
error[E0382]: use of moved value: `t`
|
error[E0382]: use of moved value: `t`
|
||||||
--> $DIR/use_of_moved_value_copy_suggestions.rs:75:9
|
--> $DIR/use_of_moved_value_copy_suggestions.rs:75:9
|
||||||
|
|
|
|
||||||
@ -174,6 +158,22 @@ help: consider restricting type parameter `T`
|
|||||||
LL | fn existing_colon<T: Copy>(t: T) {
|
LL | fn existing_colon<T: Copy>(t: T) {
|
||||||
| ++++
|
| ++++
|
||||||
|
|
||||||
|
error[E0382]: use of moved value: `t`
|
||||||
|
--> $DIR/use_of_moved_value_copy_suggestions.rs:83:9
|
||||||
|
|
|
||||||
|
LL | fn existing_colon_in_where<T>(t: T)
|
||||||
|
| - move occurs because `t` has type `T`, which does not implement the `Copy` trait
|
||||||
|
...
|
||||||
|
LL | [t, t];
|
||||||
|
| - ^ value used here after move
|
||||||
|
| |
|
||||||
|
| value moved here
|
||||||
|
|
|
||||||
|
help: consider further restricting type parameter `T`
|
||||||
|
|
|
||||||
|
LL | T:, T: Copy
|
||||||
|
| ~~~~~~~~~
|
||||||
|
|
||||||
error: aborting due to 11 previous errors
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0382`.
|
For more information about this error, try `rustc --explain E0382`.
|
||||||
|
@ -1,11 +1,3 @@
|
|||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/attribute-with-error.rs:25:22
|
|
||||||
|
|
|
||||||
LL | let a: i32 = "foo";
|
|
||||||
| --- ^^^^^ expected `i32`, found `&str`
|
|
||||||
| |
|
|
||||||
| expected due to this
|
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/attribute-with-error.rs:10:18
|
--> $DIR/attribute-with-error.rs:10:18
|
||||||
|
|
|
|
||||||
@ -22,6 +14,14 @@ LL | let b: i32 = "f'oo";
|
|||||||
| |
|
| |
|
||||||
| expected due to this
|
| expected due to this
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/attribute-with-error.rs:25:22
|
||||||
|
|
|
||||||
|
LL | let a: i32 = "foo";
|
||||||
|
| --- ^^^^^ expected `i32`, found `&str`
|
||||||
|
| |
|
||||||
|
| expected due to this
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/attribute-with-error.rs:35:22
|
--> $DIR/attribute-with-error.rs:35:22
|
||||||
|
|
|
|
||||||
|
@ -30,6 +30,12 @@ error[E0308]: mismatched types
|
|||||||
LL | let e = [0; "foo"];
|
LL | let e = [0; "foo"];
|
||||||
| ^^^^^ expected `usize`, found `&str`
|
| ^^^^^ expected `usize`, found `&str`
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/repeat_count.rs:31:17
|
||||||
|
|
|
||||||
|
LL | let g = [0; G { g: () }];
|
||||||
|
| ^^^^^^^^^^^ expected `usize`, found struct `G`
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/repeat_count.rs:19:17
|
--> $DIR/repeat_count.rs:19:17
|
||||||
|
|
|
|
||||||
@ -57,12 +63,6 @@ help: change the type of the numeric literal from `u8` to `usize`
|
|||||||
LL | let f = [0; 4usize];
|
LL | let f = [0; 4usize];
|
||||||
| ~~~~~
|
| ~~~~~
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/repeat_count.rs:31:17
|
|
||||||
|
|
|
||||||
LL | let g = [0; G { g: () }];
|
|
||||||
| ^^^^^^^^^^^ expected `usize`, found struct `G`
|
|
||||||
|
|
||||||
error: aborting due to 9 previous errors
|
error: aborting due to 9 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0308, E0435.
|
Some errors have detailed explanations: E0308, E0435.
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
error[E0277]: `<impl Iterator as Iterator>::Item` doesn't implement `Debug`
|
||||||
|
--> $DIR/impl-trait-with-missing-bounds.rs:6:13
|
||||||
|
|
|
||||||
|
LL | qux(constraint);
|
||||||
|
| --- ^^^^^^^^^^ `<impl Iterator as Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `Debug`
|
||||||
|
| |
|
||||||
|
| required by a bound introduced by this call
|
||||||
|
|
|
||||||
|
= help: the trait `Debug` is not implemented for `<impl Iterator as Iterator>::Item`
|
||||||
|
note: required by a bound in `qux`
|
||||||
|
--> $DIR/impl-trait-with-missing-bounds.rs:50:16
|
||||||
|
|
|
||||||
|
LL | fn qux(_: impl std::fmt::Debug) {}
|
||||||
|
| ^^^^^^^^^^^^^^^ required by this bound in `qux`
|
||||||
|
help: introduce a type parameter with a trait bound instead of using `impl Trait`
|
||||||
|
|
|
||||||
|
LL | fn foo<I: Iterator>(constraints: I) where <I as Iterator>::Item: Debug {
|
||||||
|
| +++++++++++++ ~ ++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
error[E0277]: `<impl Iterator as Iterator>::Item` doesn't implement `Debug`
|
error[E0277]: `<impl Iterator as Iterator>::Item` doesn't implement `Debug`
|
||||||
--> $DIR/impl-trait-with-missing-bounds.rs:14:13
|
--> $DIR/impl-trait-with-missing-bounds.rs:14:13
|
||||||
|
|
|
|
||||||
@ -74,25 +93,6 @@ help: introduce a type parameter with a trait bound instead of using `impl Trait
|
|||||||
LL | fn bak<I: Iterator + std::fmt::Debug>(constraints: I) where <I as Iterator>::Item: Debug {
|
LL | fn bak<I: Iterator + std::fmt::Debug>(constraints: I) where <I as Iterator>::Item: Debug {
|
||||||
| +++++++++++++++++++++++++++++++ ~ ++++++++++++++++++++++++++++++++++
|
| +++++++++++++++++++++++++++++++ ~ ++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
error[E0277]: `<impl Iterator as Iterator>::Item` doesn't implement `Debug`
|
|
||||||
--> $DIR/impl-trait-with-missing-bounds.rs:6:13
|
|
||||||
|
|
|
||||||
LL | qux(constraint);
|
|
||||||
| --- ^^^^^^^^^^ `<impl Iterator as Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `Debug`
|
|
||||||
| |
|
|
||||||
| required by a bound introduced by this call
|
|
||||||
|
|
|
||||||
= help: the trait `Debug` is not implemented for `<impl Iterator as Iterator>::Item`
|
|
||||||
note: required by a bound in `qux`
|
|
||||||
--> $DIR/impl-trait-with-missing-bounds.rs:50:16
|
|
||||||
|
|
|
||||||
LL | fn qux(_: impl std::fmt::Debug) {}
|
|
||||||
| ^^^^^^^^^^^^^^^ required by this bound in `qux`
|
|
||||||
help: introduce a type parameter with a trait bound instead of using `impl Trait`
|
|
||||||
|
|
|
||||||
LL | fn foo<I: Iterator>(constraints: I) where <I as Iterator>::Item: Debug {
|
|
||||||
| +++++++++++++ ~ ++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
error[E0277]: `<impl Iterator as Iterator>::Item` doesn't implement `Debug`
|
error[E0277]: `<impl Iterator as Iterator>::Item` doesn't implement `Debug`
|
||||||
--> $DIR/impl-trait-with-missing-bounds.rs:45:13
|
--> $DIR/impl-trait-with-missing-bounds.rs:45:13
|
||||||
|
|
|
|
||||||
|
@ -1,3 +1,25 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/suggest-ref-macro.rs:8:1
|
||||||
|
|
|
||||||
|
LL | #[hello]
|
||||||
|
| ^^^^^^^^
|
||||||
|
| |
|
||||||
|
| expected `&mut i32`, found integer
|
||||||
|
| arguments to this function are incorrect
|
||||||
|
|
|
||||||
|
note: function defined here
|
||||||
|
--> $DIR/suggest-ref-macro.rs:8:1
|
||||||
|
|
|
||||||
|
LL | #[hello]
|
||||||
|
| _-^^^^^^^
|
||||||
|
LL | | fn abc() {}
|
||||||
|
LL | |
|
||||||
|
LL | | fn x(_: &mut i32) {}
|
||||||
|
LL | |
|
||||||
|
LL | | macro_rules! bla {
|
||||||
|
| |_____________-
|
||||||
|
= note: this error originates in the attribute macro `hello` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/suggest-ref-macro.rs:15:11
|
--> $DIR/suggest-ref-macro.rs:15:11
|
||||||
|
|
|
|
||||||
@ -36,28 +58,6 @@ note: function defined here
|
|||||||
LL | fn x(_: &mut i32) {}
|
LL | fn x(_: &mut i32) {}
|
||||||
| ^ -----------
|
| ^ -----------
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
|
||||||
--> $DIR/suggest-ref-macro.rs:8:1
|
|
||||||
|
|
|
||||||
LL | #[hello]
|
|
||||||
| ^^^^^^^^
|
|
||||||
| |
|
|
||||||
| expected `&mut i32`, found integer
|
|
||||||
| arguments to this function are incorrect
|
|
||||||
|
|
|
||||||
note: function defined here
|
|
||||||
--> $DIR/suggest-ref-macro.rs:8:1
|
|
||||||
|
|
|
||||||
LL | #[hello]
|
|
||||||
| _-^^^^^^^
|
|
||||||
LL | | fn abc() {}
|
|
||||||
LL | |
|
|
||||||
LL | | fn x(_: &mut i32) {}
|
|
||||||
LL | |
|
|
||||||
LL | | macro_rules! bla {
|
|
||||||
| |_____________-
|
|
||||||
= note: this error originates in the attribute macro `hello` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0308`.
|
For more information about this error, try `rustc --explain E0308`.
|
||||||
|
@ -1,3 +1,20 @@
|
|||||||
|
error[E0277]: the trait bound `U1: Copy` is not satisfied
|
||||||
|
--> $DIR/union-derive-clone.rs:6:10
|
||||||
|
|
|
||||||
|
LL | #[derive(Clone)]
|
||||||
|
| ^^^^^ the trait `Copy` is not implemented for `U1`
|
||||||
|
|
|
||||||
|
note: required by a bound in `AssertParamIsCopy`
|
||||||
|
--> $SRC_DIR/core/src/clone.rs:LL:COL
|
||||||
|
|
|
||||||
|
LL | pub struct AssertParamIsCopy<T: Copy + ?Sized> {
|
||||||
|
| ^^^^ required by this bound in `AssertParamIsCopy`
|
||||||
|
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
help: consider annotating `U1` with `#[derive(Copy)]`
|
||||||
|
|
|
||||||
|
LL | #[derive(Copy)]
|
||||||
|
|
|
||||||
|
|
||||||
error[E0599]: the method `clone` exists for union `U5<CloneNoCopy>`, but its trait bounds were not satisfied
|
error[E0599]: the method `clone` exists for union `U5<CloneNoCopy>`, but its trait bounds were not satisfied
|
||||||
--> $DIR/union-derive-clone.rs:38:15
|
--> $DIR/union-derive-clone.rs:38:15
|
||||||
|
|
|
|
||||||
@ -26,23 +43,6 @@ help: consider annotating `CloneNoCopy` with `#[derive(Clone, Copy)]`
|
|||||||
LL | #[derive(Clone, Copy)]
|
LL | #[derive(Clone, Copy)]
|
||||||
|
|
|
|
||||||
|
|
||||||
error[E0277]: the trait bound `U1: Copy` is not satisfied
|
|
||||||
--> $DIR/union-derive-clone.rs:6:10
|
|
||||||
|
|
|
||||||
LL | #[derive(Clone)]
|
|
||||||
| ^^^^^ the trait `Copy` is not implemented for `U1`
|
|
||||||
|
|
|
||||||
note: required by a bound in `AssertParamIsCopy`
|
|
||||||
--> $SRC_DIR/core/src/clone.rs:LL:COL
|
|
||||||
|
|
|
||||||
LL | pub struct AssertParamIsCopy<T: Copy + ?Sized> {
|
|
||||||
| ^^^^ required by this bound in `AssertParamIsCopy`
|
|
||||||
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
||||||
help: consider annotating `U1` with `#[derive(Copy)]`
|
|
||||||
|
|
|
||||||
LL | #[derive(Copy)]
|
|
||||||
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0277, E0599.
|
Some errors have detailed explanations: E0277, E0599.
|
||||||
|
@ -1,3 +1,20 @@
|
|||||||
|
error[E0277]: the trait bound `U1: Copy` is not satisfied
|
||||||
|
--> $DIR/union-derive-clone.rs:6:10
|
||||||
|
|
|
||||||
|
LL | #[derive(Clone)]
|
||||||
|
| ^^^^^ the trait `Copy` is not implemented for `U1`
|
||||||
|
|
|
||||||
|
note: required by a bound in `AssertParamIsCopy`
|
||||||
|
--> $SRC_DIR/core/src/clone.rs:LL:COL
|
||||||
|
|
|
||||||
|
LL | pub struct AssertParamIsCopy<T: Copy + ?Sized> {
|
||||||
|
| ^^^^ required by this bound in `AssertParamIsCopy`
|
||||||
|
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
help: consider annotating `U1` with `#[derive(Copy)]`
|
||||||
|
|
|
||||||
|
LL | #[derive(Copy)]
|
||||||
|
|
|
||||||
|
|
||||||
error[E0599]: the method `clone` exists for union `U5<CloneNoCopy>`, but its trait bounds were not satisfied
|
error[E0599]: the method `clone` exists for union `U5<CloneNoCopy>`, but its trait bounds were not satisfied
|
||||||
--> $DIR/union-derive-clone.rs:38:15
|
--> $DIR/union-derive-clone.rs:38:15
|
||||||
|
|
|
|
||||||
@ -26,23 +43,6 @@ help: consider annotating `CloneNoCopy` with `#[derive(Clone, Copy)]`
|
|||||||
LL | #[derive(Clone, Copy)]
|
LL | #[derive(Clone, Copy)]
|
||||||
|
|
|
|
||||||
|
|
||||||
error[E0277]: the trait bound `U1: Copy` is not satisfied
|
|
||||||
--> $DIR/union-derive-clone.rs:6:10
|
|
||||||
|
|
|
||||||
LL | #[derive(Clone)]
|
|
||||||
| ^^^^^ the trait `Copy` is not implemented for `U1`
|
|
||||||
|
|
|
||||||
note: required by a bound in `AssertParamIsCopy`
|
|
||||||
--> $SRC_DIR/core/src/clone.rs:LL:COL
|
|
||||||
|
|
|
||||||
LL | pub struct AssertParamIsCopy<T: Copy + ?Sized> {
|
|
||||||
| ^^^^ required by this bound in `AssertParamIsCopy`
|
|
||||||
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
||||||
help: consider annotating `U1` with `#[derive(Copy)]`
|
|
||||||
|
|
|
||||||
LL | #[derive(Copy)]
|
|
||||||
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0277, E0599.
|
Some errors have detailed explanations: E0277, E0599.
|
||||||
|
Loading…
Reference in New Issue
Block a user