rust/tests/ui/chalkify/builtin-copy-clone.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

46 lines
1.0 KiB
Rust
Raw Normal View History

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