diff options
| author | Bastian Kauschke <bastian_kauschke@hotmail.de> | 2020-05-30 19:42:22 +0200 |
|---|---|---|
| committer | Bastian Kauschke <bastian_kauschke@hotmail.de> | 2020-06-19 10:55:38 +0200 |
| commit | 0b5007e4b7c4ee9a3d0356e54f91ef3def094a0a (patch) | |
| tree | 44f17d41097bc8a7296c80e3294e53f33c2d6a8a | |
| parent | a39c7787ba246353178e099373b9240be0d9e603 (diff) | |
| download | rust-0b5007e4b7c4ee9a3d0356e54f91ef3def094a0a.tar.gz rust-0b5007e4b7c4ee9a3d0356e54f91ef3def094a0a.zip | |
merge coercion test folders
| -rw-r--r-- | src/test/ui/coerce/coerce-overloaded-autoderef.rs | 68 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-expect-unsized.rs (renamed from src/test/ui/coerce/coerce-expect-unsized.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-overloaded-autoderef-fail.rs | 32 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-overloaded-autoderef-fail.stderr (renamed from src/test/ui/coercion/coerce-overloaded-autoderef.stderr) | 8 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-overloaded-autoderef.rs | 78 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-imm-ptr-arg.rs (renamed from src/test/ui/coerce/coerce-reborrow-imm-ptr-arg.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-imm-ptr-rcvr.rs (renamed from src/test/ui/coerce/coerce-reborrow-imm-ptr-rcvr.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-imm-vec-arg.rs (renamed from src/test/ui/coerce/coerce-reborrow-imm-vec-arg.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-imm-vec-rcvr.rs (renamed from src/test/ui/coerce/coerce-reborrow-imm-vec-rcvr.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-mut-ptr-arg.rs (renamed from src/test/ui/coerce/coerce-reborrow-mut-ptr-arg.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-mut-ptr-rcvr.rs (renamed from src/test/ui/coerce/coerce-reborrow-mut-ptr-rcvr.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-mut-vec-arg.rs (renamed from src/test/ui/coerce/coerce-reborrow-mut-vec-arg.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-reborrow-mut-vec-rcvr.rs (renamed from src/test/ui/coerce/coerce-reborrow-mut-vec-rcvr.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-to-bang-cast.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-to-bang-cast.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-unify-return.rs (renamed from src/test/ui/coerce/coerce-unify-return.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-unify.rs (renamed from src/test/ui/coerce/coerce-unify.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/coercion/coerce-unsize-subtype.rs (renamed from src/test/ui/coerce/coerce-unsize-subtype.rs) | 0 |
18 files changed, 95 insertions, 97 deletions
diff --git a/src/test/ui/coerce/coerce-overloaded-autoderef.rs b/src/test/ui/coerce/coerce-overloaded-autoderef.rs deleted file mode 100644 index d5484607c8b..00000000000 --- a/src/test/ui/coerce/coerce-overloaded-autoderef.rs +++ /dev/null @@ -1,68 +0,0 @@ -// run-pass -#![allow(unused_braces)] -#![allow(dead_code)] -// pretty-expanded FIXME #23616 - -use std::rc::Rc; - -// Examples from the "deref coercions" RFC, at rust-lang/rfcs#241. - -fn use_ref<T>(_: &T) {} -fn use_mut<T>(_: &mut T) {} - -fn use_rc<T>(t: Rc<T>) { - use_ref(&*t); // what you have to write today - use_ref(&t); // what you'd be able to write - use_ref(&&&&&&t); - use_ref(&mut &&&&&t); - use_ref(&&&mut &&&t); -} - -fn use_mut_box<T>(mut t: &mut Box<T>) { - use_mut(&mut *t); // what you have to write today - use_mut(t); // what you'd be able to write - use_mut(&mut &mut &mut t); - - use_ref(&*t); // what you have to write today - use_ref(t); // what you'd be able to write - use_ref(&&&&&&t); - use_ref(&mut &&&&&t); - use_ref(&&&mut &&&t); -} - -fn use_nested<T>(t: &Box<T>) { - use_ref(&**t); // what you have to write today - use_ref(t); // what you'd be able to write (note: recursive deref) - use_ref(&&&&&&t); - use_ref(&mut &&&&&t); - use_ref(&&&mut &&&t); -} - -fn use_slice(_: &[u8]) {} -fn use_slice_mut(_: &mut [u8]) {} - -fn use_vec(mut v: Vec<u8>) { - use_slice_mut(&mut v[..]); // what you have to write today - use_slice_mut(&mut v); // what you'd be able to write - use_slice_mut(&mut &mut &mut v); - - use_slice(&v[..]); // what you have to write today - use_slice(&v); // what you'd be able to write - use_slice(&&&&&&v); - use_slice(&mut &&&&&v); - use_slice(&&&mut &&&v); -} - -fn use_vec_ref(v: &Vec<u8>) { - use_slice(&v[..]); // what you have to write today - use_slice(v); // what you'd be able to write - use_slice(&&&&&&v); - use_slice(&mut &&&&&v); - use_slice(&&&mut &&&v); -} - -fn use_op_rhs(s: &mut String) { - *s += {&String::from(" ")}; -} - -pub fn main() {} diff --git a/src/test/ui/coerce/coerce-expect-unsized.rs b/src/test/ui/coercion/coerce-expect-unsized.rs index d486fdf73ab..d486fdf73ab 100644 --- a/src/test/ui/coerce/coerce-expect-unsized.rs +++ b/src/test/ui/coercion/coerce-expect-unsized.rs diff --git a/src/test/ui/coercion/coerce-overloaded-autoderef-fail.rs b/src/test/ui/coercion/coerce-overloaded-autoderef-fail.rs new file mode 100644 index 00000000000..01d9c1e486a --- /dev/null +++ b/src/test/ui/coercion/coerce-overloaded-autoderef-fail.rs @@ -0,0 +1,32 @@ +fn borrow_mut<T>(x: &mut T) -> &mut T { x } +fn borrow<T>(x: &T) -> &T { x } + +fn borrow_mut2<T>(_: &mut T, _: &mut T) {} +fn borrow2<T>(_: &mut T, _: &T) {} + +fn double_mut_borrow<T>(x: &mut Box<T>) { + let y = borrow_mut(x); + let z = borrow_mut(x); + //~^ ERROR cannot borrow `*x` as mutable more than once at a time + drop((y, z)); +} + +fn double_imm_borrow(x: &mut Box<i32>) { + let y = borrow(x); + let z = borrow(x); + **x += 1; + //~^ ERROR cannot assign to `**x` because it is borrowed + drop((y, z)); +} + +fn double_mut_borrow2<T>(x: &mut Box<T>) { + borrow_mut2(x, x); + //~^ ERROR cannot borrow `*x` as mutable more than once at a time +} + +fn double_borrow2<T>(x: &mut Box<T>) { + borrow2(x, x); + //~^ ERROR cannot borrow `*x` as mutable because it is also borrowed as immutable +} + +pub fn main() {} diff --git a/src/test/ui/coercion/coerce-overloaded-autoderef.stderr b/src/test/ui/coercion/coerce-overloaded-autoderef-fail.stderr index 7cdfcb5f4fc..d067c3b3a18 100644 --- a/src/test/ui/coercion/coerce-overloaded-autoderef.stderr +++ b/src/test/ui/coercion/coerce-overloaded-autoderef-fail.stderr @@ -1,5 +1,5 @@ error[E0499]: cannot borrow `*x` as mutable more than once at a time - --> $DIR/coerce-overloaded-autoderef.rs:9:24 + --> $DIR/coerce-overloaded-autoderef-fail.rs:9:24 | LL | let y = borrow_mut(x); | - first mutable borrow occurs here @@ -10,7 +10,7 @@ LL | drop((y, z)); | - first borrow later used here error[E0506]: cannot assign to `**x` because it is borrowed - --> $DIR/coerce-overloaded-autoderef.rs:17:5 + --> $DIR/coerce-overloaded-autoderef-fail.rs:17:5 | LL | let y = borrow(x); | - borrow of `**x` occurs here @@ -22,7 +22,7 @@ LL | drop((y, z)); | - borrow later used here error[E0499]: cannot borrow `*x` as mutable more than once at a time - --> $DIR/coerce-overloaded-autoderef.rs:23:20 + --> $DIR/coerce-overloaded-autoderef-fail.rs:23:20 | LL | borrow_mut2(x, x); | ----------- - ^ second mutable borrow occurs here @@ -31,7 +31,7 @@ LL | borrow_mut2(x, x); | first borrow later used by call error[E0502]: cannot borrow `*x` as mutable because it is also borrowed as immutable - --> $DIR/coerce-overloaded-autoderef.rs:28:5 + --> $DIR/coerce-overloaded-autoderef-fail.rs:28:5 | LL | borrow2(x, x); | -------^^^^-^ diff --git a/src/test/ui/coercion/coerce-overloaded-autoderef.rs b/src/test/ui/coercion/coerce-overloaded-autoderef.rs index 01d9c1e486a..d5484607c8b 100644 --- a/src/test/ui/coercion/coerce-overloaded-autoderef.rs +++ b/src/test/ui/coercion/coerce-overloaded-autoderef.rs @@ -1,32 +1,68 @@ -fn borrow_mut<T>(x: &mut T) -> &mut T { x } -fn borrow<T>(x: &T) -> &T { x } +// run-pass +#![allow(unused_braces)] +#![allow(dead_code)] +// pretty-expanded FIXME #23616 -fn borrow_mut2<T>(_: &mut T, _: &mut T) {} -fn borrow2<T>(_: &mut T, _: &T) {} +use std::rc::Rc; -fn double_mut_borrow<T>(x: &mut Box<T>) { - let y = borrow_mut(x); - let z = borrow_mut(x); - //~^ ERROR cannot borrow `*x` as mutable more than once at a time - drop((y, z)); +// Examples from the "deref coercions" RFC, at rust-lang/rfcs#241. + +fn use_ref<T>(_: &T) {} +fn use_mut<T>(_: &mut T) {} + +fn use_rc<T>(t: Rc<T>) { + use_ref(&*t); // what you have to write today + use_ref(&t); // what you'd be able to write + use_ref(&&&&&&t); + use_ref(&mut &&&&&t); + use_ref(&&&mut &&&t); +} + +fn use_mut_box<T>(mut t: &mut Box<T>) { + use_mut(&mut *t); // what you have to write today + use_mut(t); // what you'd be able to write + use_mut(&mut &mut &mut t); + + use_ref(&*t); // what you have to write today + use_ref(t); // what you'd be able to write + use_ref(&&&&&&t); + use_ref(&mut &&&&&t); + use_ref(&&&mut &&&t); } -fn double_imm_borrow(x: &mut Box<i32>) { - let y = borrow(x); - let z = borrow(x); - **x += 1; - //~^ ERROR cannot assign to `**x` because it is borrowed - drop((y, z)); +fn use_nested<T>(t: &Box<T>) { + use_ref(&**t); // what you have to write today + use_ref(t); // what you'd be able to write (note: recursive deref) + use_ref(&&&&&&t); + use_ref(&mut &&&&&t); + use_ref(&&&mut &&&t); +} + +fn use_slice(_: &[u8]) {} +fn use_slice_mut(_: &mut [u8]) {} + +fn use_vec(mut v: Vec<u8>) { + use_slice_mut(&mut v[..]); // what you have to write today + use_slice_mut(&mut v); // what you'd be able to write + use_slice_mut(&mut &mut &mut v); + + use_slice(&v[..]); // what you have to write today + use_slice(&v); // what you'd be able to write + use_slice(&&&&&&v); + use_slice(&mut &&&&&v); + use_slice(&&&mut &&&v); } -fn double_mut_borrow2<T>(x: &mut Box<T>) { - borrow_mut2(x, x); - //~^ ERROR cannot borrow `*x` as mutable more than once at a time +fn use_vec_ref(v: &Vec<u8>) { + use_slice(&v[..]); // what you have to write today + use_slice(v); // what you'd be able to write + use_slice(&&&&&&v); + use_slice(&mut &&&&&v); + use_slice(&&&mut &&&v); } -fn double_borrow2<T>(x: &mut Box<T>) { - borrow2(x, x); - //~^ ERROR cannot borrow `*x` as mutable because it is also borrowed as immutable +fn use_op_rhs(s: &mut String) { + *s += {&String::from(" ")}; } pub fn main() {} diff --git a/src/test/ui/coerce/coerce-reborrow-imm-ptr-arg.rs b/src/test/ui/coercion/coerce-reborrow-imm-ptr-arg.rs index f033e1b5d2b..f033e1b5d2b 100644 --- a/src/test/ui/coerce/coerce-reborrow-imm-ptr-arg.rs +++ b/src/test/ui/coercion/coerce-reborrow-imm-ptr-arg.rs diff --git a/src/test/ui/coerce/coerce-reborrow-imm-ptr-rcvr.rs b/src/test/ui/coercion/coerce-reborrow-imm-ptr-rcvr.rs index 64a365229cb..64a365229cb 100644 --- a/src/test/ui/coerce/coerce-reborrow-imm-ptr-rcvr.rs +++ b/src/test/ui/coercion/coerce-reborrow-imm-ptr-rcvr.rs diff --git a/src/test/ui/coerce/coerce-reborrow-imm-vec-arg.rs b/src/test/ui/coercion/coerce-reborrow-imm-vec-arg.rs index c2aaae1c73e..c2aaae1c73e 100644 --- a/src/test/ui/coerce/coerce-reborrow-imm-vec-arg.rs +++ b/src/test/ui/coercion/coerce-reborrow-imm-vec-arg.rs diff --git a/src/test/ui/coerce/coerce-reborrow-imm-vec-rcvr.rs b/src/test/ui/coercion/coerce-reborrow-imm-vec-rcvr.rs index 9a5652acf87..9a5652acf87 100644 --- a/src/test/ui/coerce/coerce-reborrow-imm-vec-rcvr.rs +++ b/src/test/ui/coercion/coerce-reborrow-imm-vec-rcvr.rs diff --git a/src/test/ui/coerce/coerce-reborrow-mut-ptr-arg.rs b/src/test/ui/coercion/coerce-reborrow-mut-ptr-arg.rs index 76cd6793b3c..76cd6793b3c 100644 --- a/src/test/ui/coerce/coerce-reborrow-mut-ptr-arg.rs +++ b/src/test/ui/coercion/coerce-reborrow-mut-ptr-arg.rs diff --git a/src/test/ui/coerce/coerce-reborrow-mut-ptr-rcvr.rs b/src/test/ui/coercion/coerce-reborrow-mut-ptr-rcvr.rs index e6e7c3a51aa..e6e7c3a51aa 100644 --- a/src/test/ui/coerce/coerce-reborrow-mut-ptr-rcvr.rs +++ b/src/test/ui/coercion/coerce-reborrow-mut-ptr-rcvr.rs diff --git a/src/test/ui/coerce/coerce-reborrow-mut-vec-arg.rs b/src/test/ui/coercion/coerce-reborrow-mut-vec-arg.rs index 2635754f14d..2635754f14d 100644 --- a/src/test/ui/coerce/coerce-reborrow-mut-vec-arg.rs +++ b/src/test/ui/coercion/coerce-reborrow-mut-vec-arg.rs diff --git a/src/test/ui/coerce/coerce-reborrow-mut-vec-rcvr.rs b/src/test/ui/coercion/coerce-reborrow-mut-vec-rcvr.rs index c03336ea37a..c03336ea37a 100644 --- a/src/test/ui/coerce/coerce-reborrow-mut-vec-rcvr.rs +++ b/src/test/ui/coercion/coerce-reborrow-mut-vec-rcvr.rs diff --git a/src/test/ui/coercion/coerce-to-bang-cast.rs b/src/test/ui/coercion/coerce-to-bang-cast.rs index 8ef19480846..85598a42ecc 100644 --- a/src/test/ui/coercion/coerce-to-bang-cast.rs +++ b/src/test/ui/coercion/coerce-to-bang-cast.rs @@ -1,7 +1,5 @@ #![feature(never_type)] -fn foo(x: usize, y: !, z: usize) { } - fn cast_a() { let y = {return; 22} as !; //~^ ERROR non-primitive cast diff --git a/src/test/ui/coercion/coerce-to-bang-cast.stderr b/src/test/ui/coercion/coerce-to-bang-cast.stderr index d3adbd5158d..50e009aa25b 100644 --- a/src/test/ui/coercion/coerce-to-bang-cast.stderr +++ b/src/test/ui/coercion/coerce-to-bang-cast.stderr @@ -1,11 +1,11 @@ error[E0605]: non-primitive cast: `i32` as `!` - --> $DIR/coerce-to-bang-cast.rs:6:13 + --> $DIR/coerce-to-bang-cast.rs:4:13 | LL | let y = {return; 22} as !; | ^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object error[E0605]: non-primitive cast: `i32` as `!` - --> $DIR/coerce-to-bang-cast.rs:11:13 + --> $DIR/coerce-to-bang-cast.rs:9:13 | LL | let y = 22 as !; | ^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object diff --git a/src/test/ui/coerce/coerce-unify-return.rs b/src/test/ui/coercion/coerce-unify-return.rs index 95a7ee8fe0f..95a7ee8fe0f 100644 --- a/src/test/ui/coerce/coerce-unify-return.rs +++ b/src/test/ui/coercion/coerce-unify-return.rs diff --git a/src/test/ui/coerce/coerce-unify.rs b/src/test/ui/coercion/coerce-unify.rs index f1818f9bb5a..f1818f9bb5a 100644 --- a/src/test/ui/coerce/coerce-unify.rs +++ b/src/test/ui/coercion/coerce-unify.rs diff --git a/src/test/ui/coerce/coerce-unsize-subtype.rs b/src/test/ui/coercion/coerce-unsize-subtype.rs index 45b53300c5b..45b53300c5b 100644 --- a/src/test/ui/coerce/coerce-unsize-subtype.rs +++ b/src/test/ui/coercion/coerce-unsize-subtype.rs |
