Add tests for autoderef on block tail
This commit is contained in:
parent
8be3ce9056
commit
3e90419795
10 changed files with 149 additions and 0 deletions
11
src/test/ui/coercion/coerce-block-tail-26978.rs
Normal file
11
src/test/ui/coercion/coerce-block-tail-26978.rs
Normal file
|
@ -0,0 +1,11 @@
|
|||
// check-fail
|
||||
fn f(_: &i32) {}
|
||||
|
||||
fn main() {
|
||||
let x = Box::new(1i32);
|
||||
|
||||
f(&x);
|
||||
f(&(x));
|
||||
f(&{x});
|
||||
//~^ ERROR mismatched types
|
||||
}
|
16
src/test/ui/coercion/coerce-block-tail-26978.stderr
Normal file
16
src/test/ui/coercion/coerce-block-tail-26978.stderr
Normal file
|
@ -0,0 +1,16 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/coerce-block-tail-26978.rs:9:9
|
||||
|
|
||||
LL | f(&{x});
|
||||
| ^ expected `i32`, found struct `Box`
|
||||
|
|
||||
= note: expected type `i32`
|
||||
found struct `Box<i32>`
|
||||
help: consider unboxing the value
|
||||
|
|
||||
LL | f(&{*x});
|
||||
| +
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
35
src/test/ui/coercion/coerce-block-tail-57749.rs
Normal file
35
src/test/ui/coercion/coerce-block-tail-57749.rs
Normal file
|
@ -0,0 +1,35 @@
|
|||
// check-fail
|
||||
use std::ops::Deref;
|
||||
|
||||
fn main() {
|
||||
fn save(who: &str) {
|
||||
println!("I'll save you, {}!", who);
|
||||
}
|
||||
|
||||
struct Madoka;
|
||||
|
||||
impl Deref for Madoka {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
"Madoka"
|
||||
}
|
||||
}
|
||||
|
||||
save(&{ Madoka });
|
||||
|
||||
fn reset(how: &u32) {
|
||||
println!("Reset {} times", how);
|
||||
}
|
||||
|
||||
struct Homura;
|
||||
|
||||
impl Deref for Homura {
|
||||
type Target = u32;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&42
|
||||
}
|
||||
}
|
||||
|
||||
reset(&{ Homura });
|
||||
//~^ ERROR mismatched types
|
||||
}
|
14
src/test/ui/coercion/coerce-block-tail-57749.stderr
Normal file
14
src/test/ui/coercion/coerce-block-tail-57749.stderr
Normal file
|
@ -0,0 +1,14 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/coerce-block-tail-57749.rs:33:14
|
||||
|
|
||||
LL | reset(&{ Homura });
|
||||
| ^^^^^^ expected `u32`, found struct `Homura`
|
||||
|
|
||||
help: consider dereferencing the type
|
||||
|
|
||||
LL | reset(&{ *Homura });
|
||||
| +
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
13
src/test/ui/coercion/coerce-block-tail-83783.rs
Normal file
13
src/test/ui/coercion/coerce-block-tail-83783.rs
Normal file
|
@ -0,0 +1,13 @@
|
|||
// check-fail
|
||||
// edition:2018
|
||||
fn _consume_reference<T: ?Sized>(_: &T) {}
|
||||
|
||||
async fn _foo() {
|
||||
_consume_reference::<i32>(&Box::new(7_i32));
|
||||
_consume_reference::<i32>(&async { Box::new(7_i32) }.await);
|
||||
//~^ ERROR mismatched types
|
||||
_consume_reference::<[i32]>(&vec![7_i32]);
|
||||
_consume_reference::<[i32]>(&async { vec![7_i32] }.await);
|
||||
}
|
||||
|
||||
fn main() { }
|
12
src/test/ui/coercion/coerce-block-tail-83783.stderr
Normal file
12
src/test/ui/coercion/coerce-block-tail-83783.stderr
Normal file
|
@ -0,0 +1,12 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/coerce-block-tail-83783.rs:7:32
|
||||
|
|
||||
LL | _consume_reference::<i32>(&async { Box::new(7_i32) }.await);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found struct `Box`
|
||||
|
|
||||
= note: expected type `i32`
|
||||
found struct `Box<i32>`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
7
src/test/ui/coercion/coerce-block-tail-83850.rs
Normal file
7
src/test/ui/coercion/coerce-block-tail-83850.rs
Normal file
|
@ -0,0 +1,7 @@
|
|||
// check-fail
|
||||
fn f(_: &[i32]) {}
|
||||
|
||||
fn main() {
|
||||
f(&Box::new([1, 2]));
|
||||
//~^ ERROR mismatched types
|
||||
}
|
19
src/test/ui/coercion/coerce-block-tail-83850.stderr
Normal file
19
src/test/ui/coercion/coerce-block-tail-83850.stderr
Normal file
|
@ -0,0 +1,19 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/coerce-block-tail-83850.rs:5:7
|
||||
|
|
||||
LL | f(&Box::new([1, 2]));
|
||||
| - ^^^^^^^^^^^^^^^^^ expected slice `[i32]`, found struct `Box`
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&[i32]`
|
||||
found reference `&Box<[{integer}; 2]>`
|
||||
note: function defined here
|
||||
--> $DIR/coerce-block-tail-83850.rs:2:4
|
||||
|
|
||||
LL | fn f(_: &[i32]) {}
|
||||
| ^ ---------
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
6
src/test/ui/coercion/coerce-block-tail.rs
Normal file
6
src/test/ui/coercion/coerce-block-tail.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
// check-fail
|
||||
fn main() {
|
||||
let _: &str = & { String::from("hahah")};
|
||||
let _: &i32 = & { Box::new(1i32) };
|
||||
//~^ ERROR mismatched types
|
||||
}
|
16
src/test/ui/coercion/coerce-block-tail.stderr
Normal file
16
src/test/ui/coercion/coerce-block-tail.stderr
Normal file
|
@ -0,0 +1,16 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/coerce-block-tail.rs:4:23
|
||||
|
|
||||
LL | let _: &i32 = & { Box::new(1i32) };
|
||||
| ^^^^^^^^^^^^^^ expected `i32`, found struct `Box`
|
||||
|
|
||||
= note: expected type `i32`
|
||||
found struct `Box<i32>`
|
||||
help: consider unboxing the value
|
||||
|
|
||||
LL | let _: &i32 = & { *Box::new(1i32) };
|
||||
| +
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Add table
Reference in a new issue