Rollup merge of #87673 - estebank:opaque-ty-mismatch, r=davidtwco
Tweak opaque type mismatch error
This commit is contained in:
commit
1b48f4d1ea
10 changed files with 114 additions and 82 deletions
|
@ -71,7 +71,7 @@ use rustc_middle::ty::{
|
||||||
subst::{GenericArgKind, Subst, SubstsRef},
|
subst::{GenericArgKind, Subst, SubstsRef},
|
||||||
Region, Ty, TyCtxt, TypeFoldable,
|
Region, Ty, TyCtxt, TypeFoldable,
|
||||||
};
|
};
|
||||||
use rustc_span::{sym, BytePos, DesugaringKind, Pos, Span};
|
use rustc_span::{sym, BytePos, DesugaringKind, MultiSpan, Pos, Span};
|
||||||
use rustc_target::spec::abi;
|
use rustc_target::spec::abi;
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
use std::{cmp, fmt, iter};
|
use std::{cmp, fmt, iter};
|
||||||
|
@ -1485,31 +1485,49 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||||
let count = values.len();
|
let count = values.len();
|
||||||
let kind = key.descr();
|
let kind = key.descr();
|
||||||
let mut returned_async_output_error = false;
|
let mut returned_async_output_error = false;
|
||||||
for sp in values {
|
for &sp in values {
|
||||||
err.span_label(
|
if sp.is_desugaring(DesugaringKind::Async) && !returned_async_output_error {
|
||||||
*sp,
|
if &[sp] != err.span.primary_spans() {
|
||||||
|
let mut span: MultiSpan = sp.into();
|
||||||
|
span.push_span_label(
|
||||||
|
sp,
|
||||||
format!(
|
format!(
|
||||||
"{}{}{} {}{}",
|
"checked the `Output` of this `async fn`, {}{} {}{}",
|
||||||
if sp.is_desugaring(DesugaringKind::Async)
|
if count > 1 { "one of the " } else { "" },
|
||||||
&& !returned_async_output_error
|
target,
|
||||||
{
|
kind,
|
||||||
"checked the `Output` of this `async fn`, "
|
pluralize!(count),
|
||||||
} else if count == 1 {
|
),
|
||||||
"the "
|
);
|
||||||
} else {
|
err.span_note(
|
||||||
""
|
span,
|
||||||
},
|
"while checking the return type of the `async fn`",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
err.span_label(
|
||||||
|
sp,
|
||||||
|
format!(
|
||||||
|
"checked the `Output` of this `async fn`, {}{} {}{}",
|
||||||
if count > 1 { "one of the " } else { "" },
|
if count > 1 { "one of the " } else { "" },
|
||||||
target,
|
target,
|
||||||
kind,
|
kind,
|
||||||
pluralize!(count),
|
pluralize!(count),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if sp.is_desugaring(DesugaringKind::Async)
|
|
||||||
&& returned_async_output_error == false
|
|
||||||
{
|
|
||||||
err.note("while checking the return type of the `async fn`");
|
err.note("while checking the return type of the `async fn`");
|
||||||
|
}
|
||||||
returned_async_output_error = true;
|
returned_async_output_error = true;
|
||||||
|
} else {
|
||||||
|
err.span_label(
|
||||||
|
sp,
|
||||||
|
format!(
|
||||||
|
"{}{} {}{}",
|
||||||
|
if count == 1 { "the " } else { "one of the " },
|
||||||
|
target,
|
||||||
|
kind,
|
||||||
|
pluralize!(count),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/dont-suggest-missing-await.rs:14:18
|
--> $DIR/dont-suggest-missing-await.rs:14:18
|
||||||
|
|
|
|
||||||
LL | async fn make_u32() -> u32 {
|
|
||||||
| --- checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | take_u32(x)
|
LL | take_u32(x)
|
||||||
| ^ expected `u32`, found opaque type
|
| ^ expected `u32`, found opaque type
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/dont-suggest-missing-await.rs:7:24
|
||||||
|
|
|
||||||
|
LL | async fn make_u32() -> u32 {
|
||||||
|
| ^^^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected type `u32`
|
= note: expected type `u32`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
|
|
@ -12,16 +12,19 @@ LL | fun(async {}, async {});
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/generator-desc.rs:12:16
|
--> $DIR/generator-desc.rs:12:16
|
||||||
|
|
|
|
||||||
LL | async fn one() {}
|
|
||||||
| - checked the `Output` of this `async fn`, expected opaque type
|
|
||||||
LL | async fn two() {}
|
|
||||||
| - checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | fun(one(), two());
|
LL | fun(one(), two());
|
||||||
| ^^^^^ expected opaque type, found a different opaque type
|
| ^^^^^ expected opaque type, found a different opaque type
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
= note: while checking the return type of the `async fn`
|
--> $DIR/generator-desc.rs:5:16
|
||||||
|
|
|
||||||
|
LL | async fn one() {}
|
||||||
|
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||||
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/generator-desc.rs:6:16
|
||||||
|
|
|
||||||
|
LL | async fn two() {}
|
||||||
|
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:5:16>)
|
= note: expected opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:5:16>)
|
||||||
found opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:6:16>)
|
found opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:6:16>)
|
||||||
= help: consider `await`ing on both `Future`s
|
= help: consider `await`ing on both `Future`s
|
||||||
|
|
|
@ -57,6 +57,8 @@ async fn struct_() -> Struct {
|
||||||
|
|
||||||
async fn tuple() -> Tuple {
|
async fn tuple() -> Tuple {
|
||||||
//~^ NOTE checked the `Output` of this `async fn`, expected opaque type
|
//~^ NOTE checked the `Output` of this `async fn`, expected opaque type
|
||||||
|
//~| NOTE while checking the return type of the `async fn`
|
||||||
|
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||||
Tuple(1i32)
|
Tuple(1i32)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +94,6 @@ async fn match_() {
|
||||||
Tuple(_) => {} //~ ERROR mismatched types
|
Tuple(_) => {} //~ ERROR mismatched types
|
||||||
//~^ NOTE expected opaque type, found struct `Tuple`
|
//~^ NOTE expected opaque type, found struct `Tuple`
|
||||||
//~| NOTE expected opaque type `impl Future`
|
//~| NOTE expected opaque type `impl Future`
|
||||||
//~| NOTE while checking the return type of the `async fn`
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ LL | foo().await?;
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0277]: the `?` operator can only be applied to values that implement `Try`
|
error[E0277]: the `?` operator can only be applied to values that implement `Try`
|
||||||
--> $DIR/issue-61076.rs:65:5
|
--> $DIR/issue-61076.rs:67:5
|
||||||
|
|
|
|
||||||
LL | t?;
|
LL | t?;
|
||||||
| ^^ the `?` operator cannot be applied to type `T`
|
| ^^ the `?` operator cannot be applied to type `T`
|
||||||
|
@ -33,7 +33,7 @@ LL | t.await?;
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0609]: no field `0` on type `impl Future`
|
error[E0609]: no field `0` on type `impl Future`
|
||||||
--> $DIR/issue-61076.rs:76:26
|
--> $DIR/issue-61076.rs:78:26
|
||||||
|
|
|
|
||||||
LL | let _: i32 = tuple().0;
|
LL | let _: i32 = tuple().0;
|
||||||
| ^ field not available in `impl Future`, but it is available in its `Output`
|
| ^ field not available in `impl Future`, but it is available in its `Output`
|
||||||
|
@ -44,7 +44,7 @@ LL | let _: i32 = tuple().await.0;
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0609]: no field `a` on type `impl Future`
|
error[E0609]: no field `a` on type `impl Future`
|
||||||
--> $DIR/issue-61076.rs:80:28
|
--> $DIR/issue-61076.rs:82:28
|
||||||
|
|
|
|
||||||
LL | let _: i32 = struct_().a;
|
LL | let _: i32 = struct_().a;
|
||||||
| ^ field not available in `impl Future`, but it is available in its `Output`
|
| ^ field not available in `impl Future`, but it is available in its `Output`
|
||||||
|
@ -55,7 +55,7 @@ LL | let _: i32 = struct_().await.a;
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0599]: no method named `method` found for opaque type `impl Future` in the current scope
|
error[E0599]: no method named `method` found for opaque type `impl Future` in the current scope
|
||||||
--> $DIR/issue-61076.rs:84:15
|
--> $DIR/issue-61076.rs:86:15
|
||||||
|
|
|
|
||||||
LL | struct_().method();
|
LL | struct_().method();
|
||||||
| ^^^^^^ method not found in `impl Future`
|
| ^^^^^^ method not found in `impl Future`
|
||||||
|
@ -66,15 +66,16 @@ LL | struct_().await.method();
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/issue-61076.rs:92:9
|
--> $DIR/issue-61076.rs:94:9
|
||||||
|
|
|
|
||||||
LL | async fn tuple() -> Tuple {
|
|
||||||
| ----- checked the `Output` of this `async fn`, expected opaque type
|
|
||||||
...
|
|
||||||
LL | Tuple(_) => {}
|
LL | Tuple(_) => {}
|
||||||
| ^^^^^^^^ expected opaque type, found struct `Tuple`
|
| ^^^^^^^^ expected opaque type, found struct `Tuple`
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/issue-61076.rs:58:21
|
||||||
|
|
|
||||||
|
LL | async fn tuple() -> Tuple {
|
||||||
|
| ^^^^^ checked the `Output` of this `async fn`, expected opaque type
|
||||||
= note: expected opaque type `impl Future`
|
= note: expected opaque type `impl Future`
|
||||||
found struct `Tuple`
|
found struct `Tuple`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/suggest-missing-await-closure.rs:16:18
|
--> $DIR/suggest-missing-await-closure.rs:16:18
|
||||||
|
|
|
|
||||||
LL | async fn make_u32() -> u32 {
|
|
||||||
| --- checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | take_u32(x)
|
LL | take_u32(x)
|
||||||
| ^ expected `u32`, found opaque type
|
| ^ expected `u32`, found opaque type
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/suggest-missing-await-closure.rs:8:24
|
||||||
|
|
|
||||||
|
LL | async fn make_u32() -> u32 {
|
||||||
|
| ^^^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected type `u32`
|
= note: expected type `u32`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/suggest-missing-await.rs:12:14
|
--> $DIR/suggest-missing-await.rs:12:14
|
||||||
|
|
|
|
||||||
LL | async fn make_u32() -> u32 {
|
|
||||||
| --- checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | take_u32(x)
|
LL | take_u32(x)
|
||||||
| ^ expected `u32`, found opaque type
|
| ^ expected `u32`, found opaque type
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/suggest-missing-await.rs:5:24
|
||||||
|
|
|
||||||
|
LL | async fn make_u32() -> u32 {
|
||||||
|
| ^^^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected type `u32`
|
= note: expected type `u32`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
@ -18,13 +19,14 @@ LL | take_u32(x.await)
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/suggest-missing-await.rs:22:5
|
--> $DIR/suggest-missing-await.rs:22:5
|
||||||
|
|
|
|
||||||
LL | async fn dummy() {}
|
|
||||||
| - checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | dummy()
|
LL | dummy()
|
||||||
| ^^^^^^^ expected `()`, found opaque type
|
| ^^^^^^^ expected `()`, found opaque type
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/suggest-missing-await.rs:18:18
|
||||||
|
|
|
||||||
|
LL | async fn dummy() {}
|
||||||
|
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected unit type `()`
|
= note: expected unit type `()`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
|
|
@ -14,12 +14,11 @@ LL | | _ => cx.answer_str("hi"),
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_____- `match` arms have incompatible types
|
| |_____- `match` arms have incompatible types
|
||||||
|
|
|
|
||||||
::: $DIR/auxiliary/issue-81839.rs:6:49
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/auxiliary/issue-81839.rs:6:49
|
||||||
|
|
|
|
||||||
LL | pub async fn answer_str(&self, _s: &str) -> Test {
|
LL | pub async fn answer_str(&self, _s: &str) -> Test {
|
||||||
| ---- checked the `Output` of this `async fn`, found opaque type
|
| ^^^^ checked the `Output` of this `async fn`, found opaque type
|
||||||
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
|
||||||
= note: expected type `()`
|
= note: expected type `()`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,14 @@ fn extra_semicolon() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn async_dummy() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
async fn async_dummy() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
||||||
|
//~| NOTE while checking the return type of the `async fn`
|
||||||
|
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||||
async fn async_dummy2() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
async fn async_dummy2() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
||||||
//~| NOTE checked the `Output` of this `async fn`, found opaque type
|
//~| NOTE checked the `Output` of this `async fn`, found opaque type
|
||||||
|
//~| NOTE while checking the return type of the `async fn`
|
||||||
|
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||||
|
//~| NOTE while checking the return type of the `async fn`
|
||||||
|
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||||
|
|
||||||
async fn async_extra_semicolon_same() {
|
async fn async_extra_semicolon_same() {
|
||||||
let _ = match true { //~ NOTE `match` arms have incompatible types
|
let _ = match true { //~ NOTE `match` arms have incompatible types
|
||||||
|
@ -26,7 +32,6 @@ async fn async_extra_semicolon_same() {
|
||||||
false => async_dummy(), //~ ERROR `match` arms have incompatible types
|
false => async_dummy(), //~ ERROR `match` arms have incompatible types
|
||||||
//~^ NOTE expected `()`, found opaque type
|
//~^ NOTE expected `()`, found opaque type
|
||||||
//~| NOTE expected type `()`
|
//~| NOTE expected type `()`
|
||||||
//~| NOTE while checking the return type of the `async fn`
|
|
||||||
//~| HELP consider `await`ing on the `Future`
|
//~| HELP consider `await`ing on the `Future`
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -40,7 +45,6 @@ async fn async_extra_semicolon_different() {
|
||||||
false => async_dummy2(), //~ ERROR `match` arms have incompatible types
|
false => async_dummy2(), //~ ERROR `match` arms have incompatible types
|
||||||
//~^ NOTE expected `()`, found opaque type
|
//~^ NOTE expected `()`, found opaque type
|
||||||
//~| NOTE expected type `()`
|
//~| NOTE expected type `()`
|
||||||
//~| NOTE while checking the return type of the `async fn`
|
|
||||||
//~| HELP consider `await`ing on the `Future`
|
//~| HELP consider `await`ing on the `Future`
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -53,7 +57,6 @@ async fn async_different_futures() {
|
||||||
//~^ NOTE expected opaque type, found a different opaque type
|
//~^ NOTE expected opaque type, found a different opaque type
|
||||||
//~| NOTE expected type `impl Future`
|
//~| NOTE expected type `impl Future`
|
||||||
//~| NOTE distinct uses of `impl Trait` result in different opaque types
|
//~| NOTE distinct uses of `impl Trait` result in different opaque types
|
||||||
//~| NOTE while checking the return type of the `async fn`
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
error[E0308]: `match` arms have incompatible types
|
error[E0308]: `match` arms have incompatible types
|
||||||
--> $DIR/match-prev-arm-needing-semi.rs:26:18
|
--> $DIR/match-prev-arm-needing-semi.rs:32:18
|
||||||
|
|
|
|
||||||
LL | async fn async_dummy() {}
|
|
||||||
| - checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | let _ = match true {
|
LL | let _ = match true {
|
||||||
| _____________-
|
| _____________-
|
||||||
LL | | true => {
|
LL | | true => {
|
||||||
|
@ -18,7 +15,11 @@ LL | |
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____- `match` arms have incompatible types
|
| |_____- `match` arms have incompatible types
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/match-prev-arm-needing-semi.rs:16:24
|
||||||
|
|
|
||||||
|
LL | async fn async_dummy() {}
|
||||||
|
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected type `()`
|
= note: expected type `()`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
@ -31,11 +32,8 @@ LL | async_dummy()
|
||||||
| --
|
| --
|
||||||
|
|
||||||
error[E0308]: `match` arms have incompatible types
|
error[E0308]: `match` arms have incompatible types
|
||||||
--> $DIR/match-prev-arm-needing-semi.rs:40:18
|
--> $DIR/match-prev-arm-needing-semi.rs:45:18
|
||||||
|
|
|
|
||||||
LL | async fn async_dummy2() {}
|
|
||||||
| - checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | let _ = match true {
|
LL | let _ = match true {
|
||||||
| _____________-
|
| _____________-
|
||||||
LL | | true => {
|
LL | | true => {
|
||||||
|
@ -50,7 +48,11 @@ LL | |
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____- `match` arms have incompatible types
|
| |_____- `match` arms have incompatible types
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/match-prev-arm-needing-semi.rs:19:25
|
||||||
|
|
|
||||||
|
LL | async fn async_dummy2() {}
|
||||||
|
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected type `()`
|
= note: expected type `()`
|
||||||
found opaque type `impl Future`
|
found opaque type `impl Future`
|
||||||
help: consider `await`ing on the `Future`
|
help: consider `await`ing on the `Future`
|
||||||
|
@ -66,11 +68,8 @@ LL | false => Box::new(async_dummy2()),
|
||||||
|
|
|
|
||||||
|
|
||||||
error[E0308]: `match` arms have incompatible types
|
error[E0308]: `match` arms have incompatible types
|
||||||
--> $DIR/match-prev-arm-needing-semi.rs:52:18
|
--> $DIR/match-prev-arm-needing-semi.rs:56:18
|
||||||
|
|
|
|
||||||
LL | async fn async_dummy2() {}
|
|
||||||
| - checked the `Output` of this `async fn`, found opaque type
|
|
||||||
...
|
|
||||||
LL | let _ = match true {
|
LL | let _ = match true {
|
||||||
| _____________-
|
| _____________-
|
||||||
LL | | true => async_dummy(),
|
LL | | true => async_dummy(),
|
||||||
|
@ -83,9 +82,13 @@ LL | |
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____- `match` arms have incompatible types
|
| |_____- `match` arms have incompatible types
|
||||||
|
|
|
|
||||||
= note: while checking the return type of the `async fn`
|
note: while checking the return type of the `async fn`
|
||||||
|
--> $DIR/match-prev-arm-needing-semi.rs:19:25
|
||||||
|
|
|
||||||
|
LL | async fn async_dummy2() {}
|
||||||
|
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||||
= note: expected type `impl Future` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:16:24>)
|
= note: expected type `impl Future` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:16:24>)
|
||||||
found opaque type `impl Future` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:17:25>)
|
found opaque type `impl Future` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:19:25>)
|
||||||
= note: distinct uses of `impl Trait` result in different opaque types
|
= note: distinct uses of `impl Trait` result in different opaque types
|
||||||
help: consider `await`ing on both `Future`s
|
help: consider `await`ing on both `Future`s
|
||||||
|
|
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue