From 6a75e3555f4a0b0a459eb10c52b3848ec143d68f Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Sun, 20 Sep 2020 21:19:08 +0900 Subject: [PATCH] check the number of function arguments --- parse.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/parse.c b/parse.c index ba6a915..3f20c24 100644 --- a/parse.c +++ b/parse.c @@ -633,6 +633,9 @@ static Type *func_params(Token **rest, Token *tok, Type *ty) { cur = cur->next = copy_type(ty2); } + if (cur == &head) + is_variadic = true; + ty = func_type(ty); ty->params = head.next; ty->is_variadic = is_variadic; @@ -2849,6 +2852,9 @@ static Node *funcall(Token **rest, Token *tok, Node *fn) { Node *arg = assign(&tok, tok); add_type(arg); + if (!param_ty && !ty->is_variadic) + error_tok(tok, "too many arguments to function call"); + if (param_ty) { if (param_ty->kind != TY_STRUCT && param_ty->kind != TY_UNION) arg = new_cast(arg, param_ty);