diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 3c9fb1f76240c..b6ad584c30305 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -517,26 +517,29 @@ pub fn eval_const_expr_partial(tcx: &T, e: &Expr) match ty::get(ety).sty { ty::ty_float(_) => { match val { + const_bool(b) => Ok(const_float(b as f64)), const_uint(u) => Ok(const_float(u as f64)), const_int(i) => Ok(const_float(i as f64)), const_float(f) => Ok(const_float(f)), - _ => Err("can't cast float to str".to_string()), + _ => Err("can't cast this type to float".to_string()), } } ty::ty_uint(_) => { match val { + const_bool(b) => Ok(const_uint(b as u64)), const_uint(u) => Ok(const_uint(u)), const_int(i) => Ok(const_uint(i as u64)), const_float(f) => Ok(const_uint(f as u64)), - _ => Err("can't cast str to uint".to_string()), + _ => Err("can't cast this type to uint".to_string()), } } - ty::ty_int(_) | ty::ty_bool => { + ty::ty_int(_) => { match val { + const_bool(b) => Ok(const_int(b as i64)), const_uint(u) => Ok(const_int(u as i64)), const_int(i) => Ok(const_int(i)), const_float(f) => Ok(const_int(f as i64)), - _ => Err("can't cast str to int".to_string()), + _ => Err("can't cast this type to int".to_string()), } } _ => Err("can't cast this type".to_string()) diff --git a/src/test/run-pass/cast-in-array-size.rs b/src/test/run-pass/cast-in-array-size.rs index ce5fb672b2141..13e5b89b84e04 100644 --- a/src/test/run-pass/cast-in-array-size.rs +++ b/src/test/run-pass/cast-in-array-size.rs @@ -16,4 +16,5 @@ fn main() { let _a: [bool, ..1 as uint]; let _b: [int, ..SIZE as uint] = [1, ..SIZE as uint]; let _c: [bool, ..'\n' as uint] = [true, ..'\n' as uint]; + let _d: [bool, ..true as uint] = [true, ..true as uint]; }