Skip to content

Commit 22c8832

Browse files
committed
Add tests for the removal of the 'static superbound from Send.
1 parent 35ca50b commit 22c8832

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![feature(core, std_misc)]
12+
use std::thread::Thread;
13+
14+
fn main() {
15+
let bad = {
16+
let x = 1;
17+
let y = &x;
18+
19+
Thread::scoped(|| { //~ ERROR cannot infer an appropriate lifetime
20+
let _z = y;
21+
})
22+
};
23+
24+
bad.join().ok().unwrap();
25+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![feature(core, std_misc)]
12+
use std::thread::Thread;
13+
use std::sync::Mutex;
14+
15+
fn par_for<I, F>(iter: I, f: F)
16+
where I: Iterator,
17+
<I as Iterator>::Item: Send,
18+
F: Fn(<I as Iterator>::Item) + Sync
19+
{
20+
let f = &f;
21+
let _guards: Vec<_> = iter.map(|elem| {
22+
Thread::scoped(move || {
23+
f(elem)
24+
})
25+
}).collect();
26+
27+
}
28+
29+
fn sum(x: &[i32]) {
30+
let sum_lengths = Mutex::new(0);
31+
par_for(x.windows(4), |x| {
32+
*sum_lengths.lock().unwrap() += x.len()
33+
});
34+
35+
assert_eq!(*sum_lengths.lock().unwrap(), (x.len() - 3) * 4);
36+
}
37+
38+
fn main() {
39+
let mut elements = [0; 20];
40+
41+
// iterators over references into this stack frame
42+
par_for(elements.iter_mut().enumerate(), |(i, x)| {
43+
*x = i as i32
44+
});
45+
46+
sum(&elements)
47+
}

0 commit comments

Comments
 (0)