Rollup merge of #70367 - nikomatsakis:issue-69307, r=Aaron1011
save/restore `pessimistic_yield` when entering bodies This flag is used to make the execution order around `+=` operators pessimistic. Failure to save/restore the flag was causing independent async blocks to effect one another, leading to strange ICEs and failed assumptions. Fixes #69307 r? @Zoxc
This commit is contained in:
commit
ba50bc588e
3 changed files with 62 additions and 0 deletions
30
src/test/ui/async-await/issues/issue-69307-nested.rs
Normal file
30
src/test/ui/async-await/issues/issue-69307-nested.rs
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
// Regression test for #69307
|
||||
//
|
||||
// Having a `async { .. foo.await .. }` block appear inside of a `+=`
|
||||
// expression was causing an ICE due to a failure to save/restore
|
||||
// state in the AST numbering pass when entering a nested body.
|
||||
//
|
||||
// check-pass
|
||||
// edition:2018
|
||||
|
||||
fn block_on<F>(_: F) -> usize {
|
||||
0
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
async fn bar() {
|
||||
let mut sum = 0;
|
||||
sum += {
|
||||
block_on(async {
|
||||
baz().await;
|
||||
let mut inner = 1;
|
||||
inner += block_on(async {
|
||||
baz().await;
|
||||
0
|
||||
})
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
async fn baz() {}
|
||||
23
src/test/ui/async-await/issues/issue-69307.rs
Normal file
23
src/test/ui/async-await/issues/issue-69307.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// Regression test for #69307
|
||||
//
|
||||
// Having a `async { .. foo.await .. }` block appear inside of a `+=`
|
||||
// expression was causing an ICE due to a failure to save/restore
|
||||
// state in the AST numbering pass when entering a nested body.
|
||||
//
|
||||
// check-pass
|
||||
// edition:2018
|
||||
|
||||
fn block_on<F>(_: F) -> usize {
|
||||
0
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
async fn bar() {
|
||||
let mut sum = 0;
|
||||
sum += block_on(async {
|
||||
baz().await;
|
||||
});
|
||||
}
|
||||
|
||||
async fn baz() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue