mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Make Clone::clone a lang item
This commit is contained in:
parent
92c6c03805
commit
f4f57bfccb
@ -162,6 +162,7 @@ language_item_table! {
|
|||||||
StructuralPeq, sym::structural_peq, structural_peq_trait, Target::Trait, GenericRequirement::None;
|
StructuralPeq, sym::structural_peq, structural_peq_trait, Target::Trait, GenericRequirement::None;
|
||||||
Copy, sym::copy, copy_trait, Target::Trait, GenericRequirement::Exact(0);
|
Copy, sym::copy, copy_trait, Target::Trait, GenericRequirement::Exact(0);
|
||||||
Clone, sym::clone, clone_trait, Target::Trait, GenericRequirement::None;
|
Clone, sym::clone, clone_trait, Target::Trait, GenericRequirement::None;
|
||||||
|
CloneFn, sym::clone_fn, clone_fn, Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
|
||||||
Sync, sym::sync, sync_trait, Target::Trait, GenericRequirement::Exact(0);
|
Sync, sym::sync, sync_trait, Target::Trait, GenericRequirement::Exact(0);
|
||||||
DiscriminantKind, sym::discriminant_kind, discriminant_kind_trait, Target::Trait, GenericRequirement::None;
|
DiscriminantKind, sym::discriminant_kind, discriminant_kind_trait, Target::Trait, GenericRequirement::None;
|
||||||
/// The associated item of the `DiscriminantKind` trait.
|
/// The associated item of the `DiscriminantKind` trait.
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
use crate::simplify::simplify_duplicate_switch_targets;
|
use crate::simplify::simplify_duplicate_switch_targets;
|
||||||
use crate::take_array;
|
use crate::take_array;
|
||||||
use rustc_ast::attr;
|
use rustc_ast::attr;
|
||||||
|
use rustc_hir::LangItem;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::layout;
|
use rustc_middle::ty::layout;
|
||||||
@ -271,8 +272,7 @@ impl<'tcx> InstSimplifyContext<'tcx, '_> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let trait_def_id = self.tcx.trait_of_item(fn_def_id);
|
if !self.tcx.is_lang_item(fn_def_id, LangItem::CloneFn) {
|
||||||
if trait_def_id.is_none() || trait_def_id != self.tcx.lang_items().clone_trait() {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -557,6 +557,7 @@ symbols! {
|
|||||||
clobber_abi,
|
clobber_abi,
|
||||||
clone,
|
clone,
|
||||||
clone_closures,
|
clone_closures,
|
||||||
|
clone_fn,
|
||||||
clone_from,
|
clone_from,
|
||||||
closure,
|
closure,
|
||||||
closure_lifetime_binder,
|
closure_lifetime_binder,
|
||||||
|
@ -160,6 +160,9 @@ pub trait Clone: Sized {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
#[must_use = "cloning is often expensive and is not expected to have side effects"]
|
#[must_use = "cloning is often expensive and is not expected to have side effects"]
|
||||||
|
// Clone::clone is special because the compiler generates MIR to implement it for some types.
|
||||||
|
// See InstanceKind::CloneShim.
|
||||||
|
#[cfg_attr(not(bootstrap), lang = "clone_fn")]
|
||||||
fn clone(&self) -> Self;
|
fn clone(&self) -> Self;
|
||||||
|
|
||||||
/// Performs copy-assignment from `source`.
|
/// Performs copy-assignment from `source`.
|
||||||
|
Loading…
Reference in New Issue
Block a user