Skip to content

Commit 41e077a

Browse files
committed
Stop generating Clone impls when there isn't a derive(Copy)
1 parent b0a396b commit 41e077a

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/libsyntax/ext/derive.rs

+3
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ pub fn add_derived_markers<T>(cx: &mut ExtCtxt, span: Span, traits: &[ast::Path]
7777
if names.contains(&Symbol::intern("Copy")) {
7878
let meta = cx.meta_word(span, Symbol::intern("rustc_copy_clone_marker"));
7979
attrs.push(cx.attribute(span, meta));
80+
} else if names.contains(&Symbol::intern("Clone")) {
81+
let meta = cx.meta_word(span, Symbol::intern("rustc_nocopy_clone_marker"));
82+
attrs.push(cx.attribute(span, meta));
8083
}
8184
attrs
8285
})

src/libsyntax/feature_gate.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,10 @@ pub const BUILTIN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeG
869869
"rustc_attrs",
870870
"internal implementation detail",
871871
cfg_fn!(rustc_attrs))),
872-
872+
("rustc_nocopy_clone_marker", Whitelisted, Gated(Stability::Unstable,
873+
"rustc_attrs",
874+
"internal implementation detail",
875+
cfg_fn!(rustc_attrs))),
873876
// FIXME: #14408 whitelist docs since rustdoc looks at them
874877
("doc", Whitelisted, Ungated),
875878

0 commit comments

Comments
 (0)