about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Brüschweiler <blei42@gmail.com>2013-06-07 22:07:19 +0200
committerPhilipp Brüschweiler <blei42@gmail.com>2013-06-07 22:09:01 +0200
commit080a46205086f479112afa37e86d3255ce5f9bee (patch)
tree442116ae668d567f25b56e290cf97df5b3634c05 /src
parent320995198c5700479723776b93171fc62b53ab1d (diff)
downloadrust-080a46205086f479112afa37e86d3255ce5f9bee.tar.gz
rust-080a46205086f479112afa37e86d3255ce5f9bee.zip
rustc::typeck: fix array out of bounds
Fixes #6155
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/typeck/check/mod.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs
index 1e5f8970448..9241fb6da90 100644
--- a/src/librustc/middle/typeck/check/mod.rs
+++ b/src/librustc/middle/typeck/check/mod.rs
@@ -2728,8 +2728,13 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
         });
         let mut bot_field = false;
         let mut err_field = false;
+
         let elt_ts = do elts.mapi |i, e| {
-            check_expr_with_opt_hint(fcx, *e, flds.map(|fs| fs[i]));
+            let opt_hint = match flds {
+                Some(ref fs) if i < fs.len() => Some(fs[i]),
+                _ => None
+            };
+            check_expr_with_opt_hint(fcx, *e, opt_hint);
             let t = fcx.expr_ty(*e);
             err_field = err_field || ty::type_is_error(t);
             bot_field = bot_field || ty::type_is_bot(t);