diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-10-20 12:11:13 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-20 12:11:13 +0900 |
| commit | 21df410a621950ee8ef50afd96a599c82c952882 (patch) | |
| tree | 5515dc5c35c4fcc502f0e9a3b3b3d478e65935a7 | |
| parent | 3f1c637db4ba835a7a79a84566dae4a1b1e4a1ac (diff) | |
| parent | 334c6c54337b2cfd367f1dd9f696ecacd9369d8d (diff) | |
| download | rust-21df410a621950ee8ef50afd96a599c82c952882.tar.gz rust-21df410a621950ee8ef50afd96a599c82c952882.zip | |
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
| -rw-r--r-- | compiler/rustc_typeck/src/check/generator_interior.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-78115.rs | 19 |
2 files changed, 20 insertions, 4 deletions
diff --git a/compiler/rustc_typeck/src/check/generator_interior.rs b/compiler/rustc_typeck/src/check/generator_interior.rs index 3fc5f02a4a4..4473aa2081f 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); diff --git a/src/test/ui/issues/issue-78115.rs b/src/test/ui/issues/issue-78115.rs new file mode 100644 index 00000000000..ac18470c621 --- /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() {} |
