show unit output when there is only output diff in diagnostics
This commit is contained in:
parent
28cc0b643d
commit
f46c4129e0
@ -1168,14 +1168,21 @@ fn cmp_fn_sig(
|
||||
let output1 = sig1.output();
|
||||
let output2 = sig2.output();
|
||||
let (x1, x2) = self.cmp(output1, output2);
|
||||
if !output1.is_unit() {
|
||||
let only_output_diff = !lifetime_diff
|
||||
&& sig1.c_variadic == sig2.c_variadic
|
||||
&& sig1.safety == sig2.safety
|
||||
&& sig1.abi == sig2.abi
|
||||
&& sig1.inputs() == sig2.inputs()
|
||||
&& x1 != x2;
|
||||
if !output1.is_unit() || only_output_diff {
|
||||
values.0.push_normal(" -> ");
|
||||
(values.0).0.extend(x1.0);
|
||||
}
|
||||
if !output2.is_unit() {
|
||||
if !output2.is_unit() || only_output_diff {
|
||||
values.1.push_normal(" -> ");
|
||||
(values.1).0.extend(x2.0);
|
||||
}
|
||||
|
||||
values
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ note: type in trait
|
||||
LL | fn bar(self) -> Option<()>;
|
||||
| ^^^^^^^^^^
|
||||
= note: expected signature `fn(MyFuture) -> Option<()>`
|
||||
found signature `fn(MyFuture)`
|
||||
found signature `fn(MyFuture) -> ()`
|
||||
help: change the output type to match the trait
|
||||
|
|
||||
LL | fn bar(self) -> Option<()> {}
|
||||
|
@ -5,7 +5,7 @@ LL | fn size_of<T>();
|
||||
| ^ expected `usize`, found `()`
|
||||
|
|
||||
= note: expected signature `extern "rust-intrinsic" fn() -> usize`
|
||||
found signature `extern "rust-intrinsic" fn()`
|
||||
found signature `extern "rust-intrinsic" fn() -> ()`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
@ -35,7 +35,7 @@ note: type in trait
|
||||
LL | fn method() -> Self::Ty;
|
||||
| ^^^^^^^^
|
||||
= note: expected signature `fn() -> <() as compare_method::Trait>::Ty`
|
||||
found signature `fn()`
|
||||
found signature `fn() -> ()`
|
||||
note: this item must have the opaque type in its signature in order to be able to register hidden types
|
||||
--> $DIR/in-assoc-type-unconstrained.rs:22:12
|
||||
|
|
||||
|
@ -5,7 +5,7 @@ LL | fn start<T>(_main: fn() -> T, _argc: isize, _argv: *const *const u8, _sigpi
|
||||
| ^ expected `isize`, found `()`
|
||||
|
|
||||
= note: expected signature `fn(fn() -> _, _, _, _) -> isize`
|
||||
found signature `fn(fn() -> _, _, _, _)`
|
||||
found signature `fn(fn() -> _, _, _, _) -> ()`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
8
tests/ui/method-output-diff-issue-127263.rs
Normal file
8
tests/ui/method-output-diff-issue-127263.rs
Normal file
@ -0,0 +1,8 @@
|
||||
fn bar() {}
|
||||
fn foo(x: i32) -> u32 {
|
||||
0
|
||||
}
|
||||
fn main() {
|
||||
let b: fn() -> u32 = bar; //~ ERROR mismatched types [E0308]
|
||||
let f: fn(i32) = foo; //~ ERROR mismatched types [E0308]
|
||||
}
|
25
tests/ui/method-output-diff-issue-127263.stderr
Normal file
25
tests/ui/method-output-diff-issue-127263.stderr
Normal file
@ -0,0 +1,25 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/method-output-diff-issue-127263.rs:6:26
|
||||
|
|
||||
LL | let b: fn() -> u32 = bar;
|
||||
| ----------- ^^^ expected fn pointer, found fn item
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected fn pointer `fn() -> u32`
|
||||
found fn item `fn() -> () {bar}`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/method-output-diff-issue-127263.rs:7:22
|
||||
|
|
||||
LL | let f: fn(i32) = foo;
|
||||
| ------- ^^^ expected fn pointer, found fn item
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected fn pointer `fn(_) -> ()`
|
||||
found fn item `fn(_) -> u32 {foo}`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Reference in New Issue
Block a user