diff options
| author | bors <bors@rust-lang.org> | 2015-07-26 17:51:30 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-07-26 17:51:30 +0000 |
| commit | cf7e825ecdb00023f481e5648b356d40b606fa35 (patch) | |
| tree | 4944b6b9cbff720d9bbb8fb34ffcc2469fa69508 /src | |
| parent | a42e21d66e78ff821602beb521bc942d1c722f6c (diff) | |
| parent | eefeba08f8702481fdb38b915389d5470bc874d0 (diff) | |
| download | rust-cf7e825ecdb00023f481e5648b356d40b606fa35.tar.gz rust-cf7e825ecdb00023f481e5648b356d40b606fa35.zip | |
Auto merge of #27272 - eefriedman:closure-const-crash, r=nikomatsakis
Fixes issue #27268. r? @nikomatsakis
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/check/upvar.rs | 32 | ||||
| -rw-r--r-- | src/test/run-pass/issue-27268.rs | 13 |
2 files changed, 20 insertions, 25 deletions
diff --git a/src/librustc_typeck/check/upvar.rs b/src/librustc_typeck/check/upvar.rs index 0e3fa654efa..f9b7a330816 100644 --- a/src/librustc_typeck/check/upvar.rs +++ b/src/librustc_typeck/check/upvar.rs @@ -93,22 +93,8 @@ impl<'a, 'tcx, 'v> Visitor<'v> for SeedBorrowKind<'a, 'tcx> { visit::walk_expr(self, expr); } - fn visit_fn(&mut self, - fn_kind: visit::FnKind<'v>, - decl: &'v ast::FnDecl, - block: &'v ast::Block, - span: Span, - _id: ast::NodeId) - { - match fn_kind { - visit::FkItemFn(..) | visit::FkMethod(..) => { - // ignore nested fn items - } - visit::FkFnBlock => { - visit::walk_fn(self, fn_kind, decl, block, span); - } - } - } + // Skip all items; they aren't in the same context. + fn visit_item(&mut self, _: &'v ast::Item) { } } impl<'a,'tcx> SeedBorrowKind<'a,'tcx> { @@ -515,16 +501,12 @@ impl<'a, 'tcx, 'v> Visitor<'v> for AdjustBorrowKind<'a, 'tcx> { span: Span, id: ast::NodeId) { - match fn_kind { - visit::FkItemFn(..) | visit::FkMethod(..) => { - // ignore nested fn items - } - visit::FkFnBlock => { - visit::walk_fn(self, fn_kind, decl, body, span); - self.analyze_closure(id, span, decl, body); - } - } + visit::walk_fn(self, fn_kind, decl, body, span); + self.analyze_closure(id, span, decl, body); } + + // Skip all items; they aren't in the same context. + fn visit_item(&mut self, _: &'v ast::Item) { } } impl<'a,'tcx> euv::Delegate<'tcx> for AdjustBorrowKind<'a,'tcx> { diff --git a/src/test/run-pass/issue-27268.rs b/src/test/run-pass/issue-27268.rs new file mode 100644 index 00000000000..8af850bbada --- /dev/null +++ b/src/test/run-pass/issue-27268.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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. + +fn main() { + const _C: &'static Fn() = &||{}; +} |
