diff --git a/src/librustc_trans/lib.rs b/src/librustc_trans/lib.rs index 2421b39b8bb..05b1a86b72b 100644 --- a/src/librustc_trans/lib.rs +++ b/src/librustc_trans/lib.rs @@ -25,6 +25,7 @@ #![feature(default_type_params, globs, import_shadowing, macro_rules, phase, quote)] #![feature(slicing_syntax, unsafe_destructor)] #![feature(rustc_diagnostic_macros)] +#![feature(unboxed_closures)] extern crate arena; extern crate flate; diff --git a/src/librustc_trans/trans/_match.rs b/src/librustc_trans/trans/_match.rs index 1ed06938e95..7a7a708fcc5 100644 --- a/src/librustc_trans/trans/_match.rs +++ b/src/librustc_trans/trans/_match.rs @@ -771,7 +771,7 @@ fn pick_column_to_specialize(def_map: &DefMap, m: &[Match]) -> Option { } }; - let column_contains_any_nonwild_patterns: |&uint| -> bool = |&col| { + let column_contains_any_nonwild_patterns = |&: &col: &uint| -> bool { m.iter().any(|row| match row.pats[col].node { ast::PatWild(_) => false, _ => true diff --git a/src/librustc_trans/trans/basic_block.rs b/src/librustc_trans/trans/basic_block.rs index 1bd29038fdf..dca106a3897 100644 --- a/src/librustc_trans/trans/basic_block.rs +++ b/src/librustc_trans/trans/basic_block.rs @@ -17,7 +17,12 @@ pub struct BasicBlock(pub BasicBlockRef); impl Copy for BasicBlock {} -pub type Preds<'a> = Map, fn(Value) -> BasicBlock>; +pub type Preds = Map< + Value, + BasicBlock, + Filter bool>, + fn(Value) -> BasicBlock, +>; /// Wrapper for LLVM BasicBlockRef impl BasicBlock { @@ -31,11 +36,12 @@ impl BasicBlock { } } - pub fn pred_iter(self) -> Preds<'static> { + pub fn pred_iter(self) -> Preds { + fn is_a_terminator_inst(user: &Value) -> bool { user.is_a_terminator_inst() } fn get_parent(user: Value) -> BasicBlock { user.get_parent().unwrap() } self.as_value().user_iter() - .filter(|user| user.is_a_terminator_inst()) + .filter(is_a_terminator_inst) .map(get_parent) }