From 66ac5a2d6380778e6ca29924e1c7f8287cb851a9 Mon Sep 17 00:00:00 2001 From: LeSeulArtichaut Date: Mon, 19 Oct 2020 23:14:28 +0200 Subject: [PATCH 1/2] Do not ICE on pattern that uses a binding multiple times in generator --- compiler/rustc_typeck/src/check/generator_interior.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/compiler/rustc_typeck/src/check/generator_interior.rs b/compiler/rustc_typeck/src/check/generator_interior.rs index 3fc5f02a4a47d..4473aa2081f23 100644 --- a/compiler/rustc_typeck/src/check/generator_interior.rs +++ b/compiler/rustc_typeck/src/check/generator_interior.rs @@ -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); From 334c6c54337b2cfd367f1dd9f696ecacd9369d8d Mon Sep 17 00:00:00 2001 From: LeSeulArtichaut Date: Mon, 19 Oct 2020 23:32:07 +0200 Subject: [PATCH 2/2] Add regression test --- src/test/ui/issues/issue-78115.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/ui/issues/issue-78115.rs diff --git a/src/test/ui/issues/issue-78115.rs b/src/test/ui/issues/issue-78115.rs new file mode 100644 index 0000000000000..ac18470c62113 --- /dev/null +++ b/src/test/ui/issues/issue-78115.rs @@ -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() {}