Skip to content
Closed
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/librustc/middle/check_const.rs
Original file line number Diff line number Diff line change
Expand Up @@ -251,9 +251,10 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckCrateVisitor<'a, 'tcx> {
b: &'v ast::Block,
s: Span,
fn_id: ast::NodeId) {
assert!(self.mode == Mode::Var);
self.with_euv(Some(fn_id), |euv| euv.walk_fn(fd, b));
visit::walk_fn(self, fk, fd, b, s);
self.with_mode(Mode::Var, |v| {
v.with_euv(Some(fn_id), |euv| euv.walk_fn(fd, b));
visit::walk_fn(v, fk, fd, b, s);
})
}

fn visit_pat(&mut self, p: &ast::Pat) {
Expand Down
30 changes: 30 additions & 0 deletions src/test/run-pass/issue-25180.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// 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.

// pretty-expanded FIXME #25180
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The failure was in pretty tests, which I don't you can do if you're using macros like println! which use unstable items in their expansions.


const EMPTY: &'static Fn() = &|| println!("ICE here");

const ONE_ARGUMENT: &'static Fn(u32) = &|y| println!("{}", y);

const PLUS_21: &'static (Fn(u32) -> u32) = &|y| y + 21;

const MULTI_AND_LOCAL: &'static (Fn(u32, u32) -> u32) = &|x, y| {
let tmp = x + y;
tmp * 2
};

pub fn main() {
EMPTY();
ONE_ARGUMENT(42);
assert!(PLUS_21(21) == 42);
assert!(MULTI_AND_LOCAL(1, 2) == 6);
}