diff options
Diffstat (limited to 'tests/ui/regions/regions-bounded-by-trait-requiring-static.rs')
-rw-r--r-- | tests/ui/regions/regions-bounded-by-trait-requiring-static.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/ui/regions/regions-bounded-by-trait-requiring-static.rs b/tests/ui/regions/regions-bounded-by-trait-requiring-static.rs new file mode 100644 index 000000000..7d02a4619 --- /dev/null +++ b/tests/ui/regions/regions-bounded-by-trait-requiring-static.rs @@ -0,0 +1,69 @@ +// Test which of the builtin types are considered sendable. The tests +// in this file all test region bound and lifetime violations that are +// detected during type check. + +trait Dummy : 'static { } +fn assert_send<T:'static>() { } + +// lifetime pointers with 'static lifetime are ok + +fn static_lifime_ok<'a,T,U:Send>(_: &'a isize) { + assert_send::<&'static isize>(); + assert_send::<&'static str>(); + assert_send::<&'static [isize]>(); + + // whether or not they are mutable + assert_send::<&'static mut isize>(); +} + +// otherwise lifetime pointers are not ok + +fn param_not_ok<'a>(x: &'a isize) { + assert_send::<&'a isize>(); + //~^ ERROR lifetime may not live long enough +} + +fn param_not_ok1<'a>(_: &'a isize) { + assert_send::<&'a str>(); + //~^ ERROR lifetime may not live long enough +} + +fn param_not_ok2<'a>(_: &'a isize) { + assert_send::<&'a [isize]>(); + //~^ ERROR lifetime may not live long enough +} + +// boxes are ok + +fn box_ok() { + assert_send::<Box<isize>>(); + assert_send::<String>(); + assert_send::<Vec<isize>>(); +} + +// but not if they own a bad thing + +fn box_with_region_not_ok<'a>() { + assert_send::<Box<&'a isize>>(); + //~^ ERROR lifetime may not live long enough +} + +// raw pointers are ok unless they point at unsendable things + +fn unsafe_ok1<'a>(_: &'a isize) { + assert_send::<*const isize>(); + assert_send::<*mut isize>(); +} + +fn unsafe_ok2<'a>(_: &'a isize) { + assert_send::<*const &'a isize>(); + //~^ ERROR lifetime may not live long enough +} + +fn unsafe_ok3<'a>(_: &'a isize) { + assert_send::<*mut &'a isize>(); + //~^ ERROR lifetime may not live long enough +} + +fn main() { +} |