diff --git a/src/librustc/middle/check_rvalues.rs b/src/librustc/middle/check_rvalues.rs index 21023986e1c2e..2a2655cc49c66 100644 --- a/src/librustc/middle/check_rvalues.rs +++ b/src/librustc/middle/check_rvalues.rs @@ -32,13 +32,16 @@ struct RvalueContext<'a, 'tcx: 'a> { impl<'a, 'tcx, 'v> visit::Visitor<'v> for RvalueContext<'a, 'tcx> { fn visit_fn(&mut self, - _: visit::FnKind<'v>, + fk: visit::FnKind<'v>, fd: &'v ast::FnDecl, b: &'v ast::Block, - _: Span, + s: Span, _: ast::NodeId) { - let mut euv = euv::ExprUseVisitor::new(self, self.tcx); - euv.walk_fn(fd, b); + { + let mut euv = euv::ExprUseVisitor::new(self, self.tcx); + euv.walk_fn(fd, b); + } + visit::walk_fn(self, fk, fd, b, s) } } diff --git a/src/test/compile-fail/issue-17651.rs b/src/test/compile-fail/issue-17651.rs new file mode 100644 index 0000000000000..ef8174a26aa82 --- /dev/null +++ b/src/test/compile-fail/issue-17651.rs @@ -0,0 +1,17 @@ +// Copyright 2014 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test that moves of unsized values within closures are caught +// and rejected. + +fn main() { + (|| box *[0u].as_slice())(); + //~^ ERROR cannot move a value of type [uint] +}