| // run-pass |
| // compile-flags: -Z chalk |
| |
| // Test that `Clone` is correctly implemented for builtin types. |
| |
| #[derive(Copy, Clone)] |
| struct S(i32); |
| |
| fn test_clone<T: Clone>(arg: T) { |
| let _ = arg.clone(); |
| } |
| |
| fn test_copy<T: Copy>(arg: T) { |
| let _ = arg; |
| let _ = arg; |
| } |
| |
| fn test_copy_clone<T: Copy + Clone>(arg: T) { |
| test_copy(arg); |
| test_clone(arg); |
| } |
| |
| fn foo() { } |
| |
| fn main() { |
| test_copy_clone(foo); |
| let f: fn() = foo; |
| test_copy_clone(f); |
| // FIXME: add closures when they're considered WF |
| test_copy_clone([1; 56]); |
| test_copy_clone((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); |
| test_copy_clone((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, 'a', 1.1)); |
| test_copy_clone(()); |
| test_copy_clone(((1, 1), (1, 1, 1), (1.1, 1, 1, 'a'), ())); |
| |
| let a = ( |
| (S(1), S(0)), |
| ( |
| (S(0), S(0), S(1)), |
| S(0) |
| ) |
| ); |
| test_copy_clone(a); |
| } |