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:
commit
d6082292a6
12 changed files with 35 additions and 195 deletions
|
|
@ -53,7 +53,7 @@ fn main() {
|
|||
].clone();
|
||||
});
|
||||
|
||||
assert!(result.is_err());
|
||||
assert!(child.is_err());
|
||||
assert_eq!(
|
||||
1,
|
||||
Rc::strong_count(&counter)
|
||||
|
|
|
|||
|
|
@ -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(());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue