diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2018-01-28 19:49:48 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2018-01-29 10:02:03 +0100 |
| commit | dd3fa07a522cb4f059a96f5e8d82f8d82c33d238 (patch) | |
| tree | 90a4a184bc2dc6c06e6a9dc21e52d973c5a47b82 | |
| parent | ad058cfafe584e1848276a05c2b7b5d3fcc965ff (diff) | |
| download | rust-dd3fa07a522cb4f059a96f5e8d82f8d82c33d238.tar.gz rust-dd3fa07a522cb4f059a96f5e8d82f8d82c33d238.zip | |
Make `yield_in_scope_for_expr` work with patterns. Fixes #47758
| -rw-r--r-- | src/librustc/middle/region.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/generator/pattern-borrow.rs | 23 | ||||
| -rw-r--r-- | src/test/ui/generator/pattern-borrow.stderr | 10 |
3 files changed, 36 insertions, 0 deletions
diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 9d6b29adb04..cbc061478f8 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -471,6 +471,9 @@ impl<'tcx> Visitor<'tcx> for ExprLocatorVisitor { self.expr_and_pat_count += 1; + if pat.id == self.id { + self.result = Some(self.expr_and_pat_count); + } } fn visit_expr(&mut self, expr: &'tcx Expr) { diff --git a/src/test/ui/generator/pattern-borrow.rs b/src/test/ui/generator/pattern-borrow.rs new file mode 100644 index 00000000000..557a5e62f7e --- /dev/null +++ b/src/test/ui/generator/pattern-borrow.rs @@ -0,0 +1,23 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(generators)] + +enum Test { A(i32), B, } + +fn main() { } + +fn fun(test: Test) { + move || { + if let Test::A(ref _a) = test { //~ ERROR borrow may still be in use when generator yields + yield (); + } + }; +} diff --git a/src/test/ui/generator/pattern-borrow.stderr b/src/test/ui/generator/pattern-borrow.stderr new file mode 100644 index 00000000000..6b39b272d0e --- /dev/null +++ b/src/test/ui/generator/pattern-borrow.stderr @@ -0,0 +1,10 @@ +error[E0626]: borrow may still be in use when generator yields + --> $DIR/pattern-borrow.rs:19:24 + | +19 | if let Test::A(ref _a) = test { //~ ERROR borrow may still be in use when generator yields + | ^^^^^^ +20 | yield (); + | -------- possible yield occurs here + +error: aborting due to previous error + |
