Eagerly return ExprKind::Err on yield/await in wrong coroutine context
This commit is contained in:
parent
5facb422f8
commit
a76d2e1fd1
@ -778,10 +778,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
match self.coroutine_kind {
|
match self.coroutine_kind {
|
||||||
Some(hir::CoroutineKind::Async(_)) => {}
|
Some(hir::CoroutineKind::Async(_)) => {}
|
||||||
Some(hir::CoroutineKind::Coroutine) | Some(hir::CoroutineKind::Gen(_)) | None => {
|
Some(hir::CoroutineKind::Coroutine) | Some(hir::CoroutineKind::Gen(_)) | None => {
|
||||||
self.tcx.sess.emit_err(AwaitOnlyInAsyncFnAndBlocks {
|
return hir::ExprKind::Err(self.tcx.sess.emit_err(AwaitOnlyInAsyncFnAndBlocks {
|
||||||
await_kw_span,
|
await_kw_span,
|
||||||
item_span: self.current_item,
|
item_span: self.current_item,
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let span = self.mark_span_with_reason(DesugaringKind::Await, await_kw_span, None);
|
let span = self.mark_span_with_reason(DesugaringKind::Await, await_kw_span, None);
|
||||||
@ -1500,7 +1500,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||||||
match self.coroutine_kind {
|
match self.coroutine_kind {
|
||||||
Some(hir::CoroutineKind::Gen(_)) => {}
|
Some(hir::CoroutineKind::Gen(_)) => {}
|
||||||
Some(hir::CoroutineKind::Async(_)) => {
|
Some(hir::CoroutineKind::Async(_)) => {
|
||||||
self.tcx.sess.emit_err(AsyncCoroutinesNotSupported { span });
|
return hir::ExprKind::Err(self.tcx.sess.emit_err(AsyncCoroutinesNotSupported { span }));
|
||||||
}
|
}
|
||||||
Some(hir::CoroutineKind::Coroutine) | None => {
|
Some(hir::CoroutineKind::Coroutine) | None => {
|
||||||
if !self.tcx.features().coroutines {
|
if !self.tcx.features().coroutines {
|
||||||
|
@ -3,9 +3,6 @@
|
|||||||
async fn fun() {
|
async fn fun() {
|
||||||
[1; ().await];
|
[1; ().await];
|
||||||
//~^ error: `await` is only allowed inside `async` functions and blocks
|
//~^ error: `await` is only allowed inside `async` functions and blocks
|
||||||
//~| error: `.await` is not allowed in a `const`
|
|
||||||
//~| error: `.await` is not allowed in a `const`
|
|
||||||
//~| error: `()` is not a future
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -11,5 +11,4 @@ fn main() {
|
|||||||
//~^ ERROR `await` is only allowed inside `async` functions and blocks
|
//~^ ERROR `await` is only allowed inside `async` functions and blocks
|
||||||
(|_| 2333).await;
|
(|_| 2333).await;
|
||||||
//~^ ERROR `await` is only allowed inside `async` functions and blocks
|
//~^ ERROR `await` is only allowed inside `async` functions and blocks
|
||||||
//~| ERROR is not a future
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user