use fresh vars in place of _|_ when incorrect # of params supplied

This commit is contained in:
Niko Matsakis 2012-03-28 17:01:42 -07:00
parent 23f92ea370
commit fe610f04d8
2 changed files with 19 additions and 5 deletions

View File

@ -2362,11 +2362,13 @@ fn check_expr_with_unifier(fcx: @fn_ctxt, expr: @ast::expr, unify: unifier,
} else {
"s were"
}]);
// HACK: build an arguments list with dummy arguments to
// check against
let dummy = {mode: ast::expl(ast::by_ref),
ty: ty::mk_bot(fcx.ccx.tcx)};
arg_tys = vec::from_elem(supplied_arg_count, dummy);
// Just use fresh type variables for the types,
// since we don't know them.
arg_tys = vec::from_fn(supplied_arg_count) {|_i|
{mode: ast::expl(ast::by_ref),
ty: next_ty_var(fcx)}
};
}
// Check the arguments.

View File

@ -0,0 +1,12 @@
// Check that the only error msg we report is the
// mismatch between the # of params, and not other
// unrelated errors.
fn foo(a: int, b: int, c: int, d:int) {
fail;
}
fn main() {
foo(1, 2, 3);
//!^ ERROR this function takes 4 parameters but 3
}