diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/builtin-superkinds/builtin-superkinds-capabilities-xc.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/ui/builtin-superkinds/builtin-superkinds-capabilities-xc.rs b/src/test/ui/builtin-superkinds/builtin-superkinds-capabilities-xc.rs new file mode 100644 index 000000000..8416bb3a3 --- /dev/null +++ b/src/test/ui/builtin-superkinds/builtin-superkinds-capabilities-xc.rs @@ -0,0 +1,27 @@ +// run-pass +// aux-build:trait_superkinds_in_metadata.rs + +// Tests "capabilities" granted by traits with super-builtin-kinds, +// even when using them cross-crate. + + +extern crate trait_superkinds_in_metadata; + +use std::sync::mpsc::{channel, Sender, Receiver}; +use trait_superkinds_in_metadata::{RequiresRequiresShareAndSend, RequiresShare}; + +#[derive(PartialEq, Debug)] +struct X<T>(T); + +impl <T: Sync> RequiresShare for X<T> { } +impl <T: Sync+Send> RequiresRequiresShareAndSend for X<T> { } + +fn foo<T: RequiresRequiresShareAndSend + 'static>(val: T, chan: Sender<T>) { + chan.send(val).unwrap(); +} + +pub fn main() { + let (tx, rx): (Sender<X<isize>>, Receiver<X<isize>>) = channel(); + foo(X(31337), tx); + assert_eq!(rx.recv().unwrap(), X(31337)); +} |