2020-03-03 10:25:03 -06:00
|
|
|
// run-pass
|
2023-01-02 17:18:00 -06:00
|
|
|
// compile-flags: -Z trait-solver=chalk
|
2020-03-03 10:25:03 -06:00
|
|
|
|
|
|
|
// Test that `Clone` is correctly implemented for builtin types.
|
|
|
|
|
|
|
|
#[derive(Copy, Clone)]
|
2022-07-25 15:36:03 -05:00
|
|
|
struct S(#[allow(unused_tuple_struct_fields)] i32);
|
2020-03-03 10:25:03 -06:00
|
|
|
|
|
|
|
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() {
|
2021-06-05 16:17:35 -05:00
|
|
|
// FIXME: add closures when they're considered WF
|
2020-03-03 10:25:03 -06:00
|
|
|
test_copy_clone(foo);
|
|
|
|
let f: fn() = foo;
|
|
|
|
test_copy_clone(f);
|
2021-06-05 16:17:35 -05:00
|
|
|
// FIXME(#86252): reinstate array test after chalk upgrade
|
|
|
|
//test_copy_clone([1; 56]);
|
2020-03-03 10:25:03 -06:00
|
|
|
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);
|
|
|
|
}
|