Rollup merge of #78121 - LeSeulArtichaut:issue-78115, r=tmandry

Do not ICE on pattern that uses a binding multiple times in generator

Fixes #78115.
r? @tmandry
This commit is contained in:
Yuki Okushi 2020-10-20 12:11:13 +09:00 committed by GitHub
commit 21df410a62
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 4 deletions

View file

@ -250,10 +250,7 @@ impl<'a, 'tcx> Visitor<'tcx> for InteriorVisitor<'a, 'tcx> {
let mut scope_var_ids =
self.guard_bindings.pop().expect("should have pushed at least one earlier");
for var_id in scope_var_ids.drain(..) {
assert!(
self.guard_bindings_set.remove(&var_id),
"variable should be placed in scope earlier"
);
self.guard_bindings_set.remove(&var_id);
}
}
self.visit_expr(body);

View file

@ -0,0 +1,19 @@
// Regression test for issue #78115: "ICE: variable should be placed in scope earlier"
// check-pass
// edition:2018
#[allow(dead_code)]
struct Foo {
a: ()
}
async fn _bar() {
let foo = Foo { a: () };
match foo {
Foo { a: _a } | Foo { a: _a } if true => {}
_ => {}
}
}
fn main() {}