Skip to content

Commit ee67e14

Browse files
committed
Stabilize the copy_closures and clone_closures features
In addition to the `Fn*` family of traits, closures now implement `Copy` (and similarly `Clone`) if all of the captures do.
1 parent 52f7e88 commit ee67e14

22 files changed

+15
-169
lines changed

src/librustc/dep_graph/dep_node.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -616,8 +616,6 @@ define_dep_nodes!( <'tcx>
616616
[input] MissingExternCrateItem(CrateNum),
617617
[input] UsedCrateSource(CrateNum),
618618
[input] PostorderCnums,
619-
[] HasCloneClosures(CrateNum),
620-
[] HasCopyClosures(CrateNum),
621619

622620
// This query is not expected to have inputs -- as a result, it's
623621
// not a good candidate for "replay" because it's essentially a

src/librustc/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#![feature(box_syntax)]
4646
#![feature(conservative_impl_trait)]
4747
#![feature(const_fn)]
48-
#![feature(copy_closures, clone_closures)]
48+
#![cfg_attr(stage0, feature(copy_closures, clone_closures))]
4949
#![feature(core_intrinsics)]
5050
#![feature(drain_filter)]
5151
#![feature(dyn_trait)]

src/librustc/traits/select.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2086,12 +2086,8 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
20862086

20872087
ty::TyClosure(def_id, substs) => {
20882088
let trait_id = obligation.predicate.def_id();
2089-
let copy_closures =
2090-
Some(trait_id) == self.tcx().lang_items().copy_trait() &&
2091-
self.tcx().has_copy_closures(def_id.krate);
2092-
let clone_closures =
2093-
Some(trait_id) == self.tcx().lang_items().clone_trait() &&
2094-
self.tcx().has_clone_closures(def_id.krate);
2089+
let copy_closures = Some(trait_id) == self.tcx().lang_items().copy_trait();
2090+
let clone_closures = Some(trait_id) == self.tcx().lang_items().clone_trait();
20952091

20962092
if copy_closures || clone_closures {
20972093
Where(ty::Binder(substs.upvar_tys(def_id, self.tcx()).collect()))

src/librustc/ty/context.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2520,14 +2520,6 @@ pub fn provide(providers: &mut ty::maps::Providers) {
25202520
assert_eq!(cnum, LOCAL_CRATE);
25212521
tcx.output_filenames.clone()
25222522
};
2523-
providers.has_copy_closures = |tcx, cnum| {
2524-
assert_eq!(cnum, LOCAL_CRATE);
2525-
tcx.features().copy_closures
2526-
};
2527-
providers.has_clone_closures = |tcx, cnum| {
2528-
assert_eq!(cnum, LOCAL_CRATE);
2529-
tcx.features().clone_closures
2530-
};
25312523
providers.features_query = |tcx, cnum| {
25322524
assert_eq!(cnum, LOCAL_CRATE);
25332525
Lrc::new(tcx.sess.features_untracked().clone())

src/librustc/ty/maps/config.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -604,24 +604,12 @@ impl<'tcx> QueryDescription<'tcx> for queries::output_filenames<'tcx> {
604604
}
605605
}
606606

607-
impl<'tcx> QueryDescription<'tcx> for queries::has_clone_closures<'tcx> {
608-
fn describe(_tcx: TyCtxt, _: CrateNum) -> String {
609-
format!("seeing if the crate has enabled `Clone` closures")
610-
}
611-
}
612-
613607
impl<'tcx> QueryDescription<'tcx> for queries::vtable_methods<'tcx> {
614608
fn describe(tcx: TyCtxt, key: ty::PolyTraitRef<'tcx> ) -> String {
615609
format!("finding all methods for trait {}", tcx.item_path_str(key.def_id()))
616610
}
617611
}
618612

619-
impl<'tcx> QueryDescription<'tcx> for queries::has_copy_closures<'tcx> {
620-
fn describe(_tcx: TyCtxt, _: CrateNum) -> String {
621-
format!("seeing if the crate has enabled `Copy` closures")
622-
}
623-
}
624-
625613
impl<'tcx> QueryDescription<'tcx> for queries::features_query<'tcx> {
626614
fn describe(_tcx: TyCtxt, _: CrateNum) -> String {
627615
format!("looking up enabled feature gates")

src/librustc/ty/maps/mod.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,9 +382,6 @@ define_maps! { <'tcx>
382382
[] fn output_filenames: output_filenames_node(CrateNum)
383383
-> Arc<OutputFilenames>,
384384

385-
[] fn has_copy_closures: HasCopyClosures(CrateNum) -> bool,
386-
[] fn has_clone_closures: HasCloneClosures(CrateNum) -> bool,
387-
388385
// Erases regions from `ty` to yield a new type.
389386
// Normally you would just use `tcx.erase_regions(&value)`,
390387
// however, which uses this query as a kind of cache.

src/librustc/ty/maps/plumbing.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -917,8 +917,6 @@ pub fn force_from_dep_node<'a, 'gcx, 'lcx>(tcx: TyCtxt<'a, 'gcx, 'lcx>,
917917
}
918918
DepKind::UsedCrateSource => { force!(used_crate_source, krate!()); }
919919
DepKind::PostorderCnums => { force!(postorder_cnums, LOCAL_CRATE); }
920-
DepKind::HasCloneClosures => { force!(has_clone_closures, krate!()); }
921-
DepKind::HasCopyClosures => { force!(has_copy_closures, krate!()); }
922920

923921
DepKind::Freevars => { force!(freevars, def_id!()); }
924922
DepKind::MaybeUnusedTraitImport => {

src/librustc_metadata/cstore.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -228,16 +228,6 @@ impl CrateMetadata {
228228
attr::contains_name(&attrs, "no_builtins")
229229
}
230230

231-
pub fn has_copy_closures(&self, sess: &Session) -> bool {
232-
let attrs = self.get_item_attrs(CRATE_DEF_INDEX, sess);
233-
attr::contains_feature_attr(&attrs, "copy_closures")
234-
}
235-
236-
pub fn has_clone_closures(&self, sess: &Session) -> bool {
237-
let attrs = self.get_item_attrs(CRATE_DEF_INDEX, sess);
238-
attr::contains_feature_attr(&attrs, "clone_closures")
239-
}
240-
241231
pub fn panic_strategy(&self) -> PanicStrategy {
242232
self.root.panic_strategy.clone()
243233
}

src/librustc_metadata/cstore_impl.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,6 @@ provide! { <'tcx> tcx, def_id, other, cdata,
256256

257257
used_crate_source => { Lrc::new(cdata.source.clone()) }
258258

259-
has_copy_closures => { cdata.has_copy_closures(tcx.sess) }
260-
has_clone_closures => { cdata.has_clone_closures(tcx.sess) }
261-
262259
exported_symbols => {
263260
let cnum = cdata.cnum;
264261
assert!(cnum != LOCAL_CRATE);

src/librustc_typeck/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ This API is completely unstable and subject to change.
7676
#![feature(box_patterns)]
7777
#![feature(box_syntax)]
7878
#![feature(conservative_impl_trait)]
79-
#![feature(copy_closures, clone_closures)]
79+
#![cfg_attr(stage0, feature(copy_closures, clone_closures))]
8080
#![feature(crate_visibility_modifier)]
8181
#![feature(from_ref)]
8282
#![feature(match_default_bindings)]

0 commit comments

Comments
 (0)