From ae460fc1a0351f3ae85ac7a69dab94554706366c Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Thu, 13 Dec 2007 08:48:33 +0000 Subject: [PATCH] Generate an error, if argument and parameter type are incompatible. [r18725] --- parser.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/parser.c b/parser.c index 4a583da..a99ad87 100644 --- a/parser.c +++ b/parser.c @@ -3806,8 +3806,16 @@ static expression_t *parse_call_expression(unsigned precedence, parameter = parameter->next, argument = argument->next) { type_t *expected_type = parameter->type; /* TODO report context in error messages */ - argument->expression = create_implicit_cast(argument->expression, - expected_type); + expression_t *const arg_expr = argument->expression; + type_t *const res_type = semantic_assign(expected_type, arg_expr, "function call"); + if (res_type == NULL) { + /* TODO improve error message */ + errorf(arg_expr->base.source_position, + "Cannot call function with argument '%E' of type '%T' where type '%T' is expected", + arg_expr, arg_expr->base.datatype, expected_type); + } else { + argument->expression = create_implicit_cast(argument->expression, expected_type); + } } /* too few parameters */ if(parameter != NULL) { -- 2.20.1