Skip to content

Commit

Permalink
Rollup merge of #78121 - LeSeulArtichaut:issue-78115, r=tmandry
Browse files Browse the repository at this point in the history
Do not ICE on pattern that uses a binding multiple times in generator

Fixes #78115.
r? @tmandry
  • Loading branch information
JohnTitor authored Oct 20, 2020
2 parents 3f1c637 + 334c6c5 commit 21df410
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
5 changes: 1 addition & 4 deletions compiler/rustc_typeck/src/check/generator_interior.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
19 changes: 19 additions & 0 deletions src/test/ui/issues/issue-78115.rs
Original file line number Diff line number Diff line change
@@ -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() {}

0 comments on commit 21df410

Please sign in to comment.