diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
commit | 698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch) | |
tree | 173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/kindck/kindck-copy.rs | |
parent | Initial commit. (diff) | |
download | rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip |
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/kindck/kindck-copy.rs')
-rw-r--r-- | src/test/ui/kindck/kindck-copy.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/test/ui/kindck/kindck-copy.rs b/src/test/ui/kindck/kindck-copy.rs new file mode 100644 index 000000000..6df98c230 --- /dev/null +++ b/src/test/ui/kindck/kindck-copy.rs @@ -0,0 +1,71 @@ +// Test which of the builtin types are considered POD. + +use std::rc::Rc; + +fn assert_copy<T:Copy>() { } + +trait Dummy { } + +#[derive(Copy, Clone)] +struct MyStruct { + x: isize, + y: isize, +} + +struct MyNoncopyStruct { + x: Box<char>, +} + +fn test<'a,T,U:Copy>(_: &'a isize) { + // lifetime pointers are ok... + assert_copy::<&'static isize>(); + assert_copy::<&'a isize>(); + assert_copy::<&'a str>(); + assert_copy::<&'a [isize]>(); + + // ...unless they are mutable + assert_copy::<&'static mut isize>(); //~ ERROR : Copy` is not satisfied + assert_copy::<&'a mut isize>(); //~ ERROR : Copy` is not satisfied + + // boxes are not ok + assert_copy::<Box<isize>>(); //~ ERROR : Copy` is not satisfied + assert_copy::<String>(); //~ ERROR : Copy` is not satisfied + assert_copy::<Vec<isize> >(); //~ ERROR : Copy` is not satisfied + assert_copy::<Box<&'a mut isize>>(); //~ ERROR : Copy` is not satisfied + + // borrowed object types are generally ok + assert_copy::<&'a dyn Dummy>(); + assert_copy::<&'a (dyn Dummy + Send)>(); + assert_copy::<&'static (dyn Dummy + Send)>(); + + // owned object types are not ok + assert_copy::<Box<dyn Dummy>>(); //~ ERROR : Copy` is not satisfied + assert_copy::<Box<dyn Dummy + Send>>(); //~ ERROR : Copy` is not satisfied + + // mutable object types are not ok + assert_copy::<&'a mut (dyn Dummy + Send)>(); //~ ERROR : Copy` is not satisfied + + // unsafe ptrs are ok + assert_copy::<*const isize>(); + assert_copy::<*const &'a mut isize>(); + + // regular old ints and such are ok + assert_copy::<isize>(); + assert_copy::<bool>(); + assert_copy::<()>(); + + // tuples are ok + assert_copy::<(isize,isize)>(); + + // structs of POD are ok + assert_copy::<MyStruct>(); + + // structs containing non-POD are not ok + assert_copy::<MyNoncopyStruct>(); //~ ERROR : Copy` is not satisfied + + // ref counted types are not ok + assert_copy::<Rc<isize>>(); //~ ERROR : Copy` is not satisfied +} + +pub fn main() { +} |