Skip to content

Commit

Permalink
Rollup merge of rust-lang#70640 - jonas-schievink:async-ice, r=cramertj
Browse files Browse the repository at this point in the history
Hide `task_context` when lowering body

Fixes rust-lang#70594
  • Loading branch information
Dylan-DPC authored Apr 3, 2020
2 parents 3c326d5 + c7d9d89 commit 0b4f8fc
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/librustc_ast_lowering/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -972,8 +972,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
f: impl FnOnce(&mut Self) -> (&'hir [hir::Param<'hir>], hir::Expr<'hir>),
) -> hir::BodyId {
let prev_gen_kind = self.generator_kind.take();
let task_context = self.task_context.take();
let (parameters, result) = f(self);
let body_id = self.record_body(parameters, result);
self.task_context = task_context;
self.generator_kind = prev_gen_kind;
body_id
}
Expand Down
12 changes: 12 additions & 0 deletions src/test/ui/async-await/issue-70594.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// edition:2018

async fn fun() {
[1; ().await];
//~^ error: `await` is only allowed inside `async` functions and blocks
//~| error: `.await` is not allowed in a `const`
//~| error: `loop` is not allowed in a `const`
//~| error: `.await` is not allowed in a `const`
//~| error: the trait bound `(): std::future::Future` is not satisfied
}

fn main() {}
44 changes: 44 additions & 0 deletions src/test/ui/async-await/issue-70594.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
error[E0728]: `await` is only allowed inside `async` functions and blocks
--> $DIR/issue-70594.rs:4:9
|
LL | async fn fun() {
| --- this is not `async`
LL | [1; ().await];
| ^^^^^^^^ only allowed inside `async` functions and blocks

error[E0744]: `.await` is not allowed in a `const`
--> $DIR/issue-70594.rs:4:9
|
LL | [1; ().await];
| ^^^^^^^^

error[E0658]: `loop` is not allowed in a `const`
--> $DIR/issue-70594.rs:4:9
|
LL | [1; ().await];
| ^^^^^^^^
|
= note: see issue #52000 <https://github.com/rust-lang/rust/issues/52000> for more information
= help: add `#![feature(const_loop)]` to the crate attributes to enable

error[E0744]: `.await` is not allowed in a `const`
--> $DIR/issue-70594.rs:4:9
|
LL | [1; ().await];
| ^^^^^^^^

error[E0277]: the trait bound `(): std::future::Future` is not satisfied
--> $DIR/issue-70594.rs:4:9
|
LL | [1; ().await];
| ^^^^^^^^ the trait `std::future::Future` is not implemented for `()`
|
::: $SRC_DIR/libcore/future/mod.rs:LL:COL
|
LL | F: Future,
| ------ required by this bound in `std::future::poll_with_context`

error: aborting due to 5 previous errors

Some errors have detailed explanations: E0277, E0658, E0728, E0744.
For more information about an error, try `rustc --explain E0277`.

0 comments on commit 0b4f8fc

Please sign in to comment.