From 320995198c5700479723776b93171fc62b53ab1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Br=C3=BCschweiler?= Date: Fri, 7 Jun 2013 22:06:36 +0200 Subject: [PATCH 1/2] Add test for #6155 --- src/test/compile-fail/tuple-arity-mismatch.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/test/compile-fail/tuple-arity-mismatch.rs diff --git a/src/test/compile-fail/tuple-arity-mismatch.rs b/src/test/compile-fail/tuple-arity-mismatch.rs new file mode 100644 index 000000000000..517b3cb59232 --- /dev/null +++ b/src/test/compile-fail/tuple-arity-mismatch.rs @@ -0,0 +1,17 @@ +// Copyright 2013 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. + +// Issue #6155 + +fn first((value, _): (int, float)) -> int { value } + +fn main() { + let y = first ((1,2,3)); //~ ERROR expected a tuple with 2 elements but found one with 3 elements +} From 080a46205086f479112afa37e86d3255ce5f9bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Br=C3=BCschweiler?= Date: Fri, 7 Jun 2013 22:07:19 +0200 Subject: [PATCH 2/2] rustc::typeck: fix array out of bounds Fixes #6155 --- src/librustc/middle/typeck/check/mod.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 1e5f8970448a..9241fb6da908 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);