Auto merge of #86041 - bstrie:unmagic-array-copy, r=jackh726

Replace Copy/Clone compiler magic on arrays with library impls

With const generics the compiler no longer needs to fake these impls.
This commit is contained in:
bors 2021-11-09 17:13:44 +00:00
commit d6082292a6
12 changed files with 35 additions and 195 deletions

View file

@ -53,7 +53,7 @@ fn main() {
].clone();
});
assert!(result.is_err());
assert!(child.is_err());
assert_eq!(
1,
Rc::strong_count(&counter)

View file

@ -23,11 +23,12 @@ fn test_copy_clone<T: Copy + Clone>(arg: T) {
fn foo() { }
fn main() {
// FIXME: add closures when they're considered WF
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]);
// FIXME(#86252): reinstate array test after chalk upgrade
//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(());

View file

@ -1,9 +1,3 @@
type Foo = [u8; 256];
impl Copy for Foo { }
//~^ ERROR the trait `Copy` may not be implemented for this type
//~| ERROR only traits defined in the current crate can be implemented for arbitrary types
#[derive(Copy, Clone)]
struct Bar;

View file

@ -1,27 +1,9 @@
error[E0206]: the trait `Copy` may not be implemented for this type
--> $DIR/E0206.rs:3:15
|
LL | impl Copy for Foo { }
| ^^^ type is not a structure or enumeration
error[E0206]: the trait `Copy` may not be implemented for this type
--> $DIR/E0206.rs:10:15
--> $DIR/E0206.rs:4:15
|
LL | impl Copy for &'static mut Bar { }
| ^^^^^^^^^^^^^^^^ type is not a structure or enumeration
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
--> $DIR/E0206.rs:3:1
|
LL | impl Copy for Foo { }
| ^^^^^^^^^^^^^^---
| | |
| | this is not defined in the current crate because arrays are always foreign
| impl doesn't use only types from inside the current crate
|
= note: define and implement a trait or new type instead
error: aborting due to previous error
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0117, E0206.
For more information about an error, try `rustc --explain E0117`.
For more information about this error, try `rustc --explain E0206`.