X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=parser.c;h=e0a7cc44f0eaa00ea3eb1480d6ea7a0645adbea0;hb=2235ffe28664cc838d8c476aae18ab79df96916b;hp=5189da8fbf1aa7763437f9c338208b650161854c;hpb=b7cb3f88e8f9dfb20dae9458c8023d7894b39a0b;p=cparser diff --git a/parser.c b/parser.c index 5189da8..e0a7cc4 100644 --- a/parser.c +++ b/parser.c @@ -7421,8 +7421,21 @@ static void handle_builtin_argument_restrictions(call_expression_t *call) { } break; } - case bk_gnu_builtin_prefetch: { + case bk_gnu_builtin_object_size: + if (call->arguments == NULL) + break; + + call_argument_t *arg = call->arguments->next; + if (arg != NULL && ! is_constant_expression(arg->expression)) { + errorf(&call->base.source_position, + "second argument of '%Y' must be a constant expression", + call->function->reference.entity->base.symbol); + } + break; + case bk_gnu_builtin_prefetch: /* second and third argument must be constant if existent */ + if (call->arguments == NULL) + break; call_argument_t *rw = call->arguments->next; call_argument_t *locality = NULL; @@ -7443,7 +7456,6 @@ static void handle_builtin_argument_restrictions(call_expression_t *call) { locality = rw->next; } break; - } default: break; } @@ -7520,6 +7532,10 @@ static expression_t *parse_call_expression(expression_t *expression) /* do default promotion for other arguments */ for (; argument != NULL; argument = argument->next) { type_t *type = argument->expression->base.type; + if (!is_type_object(skip_typeref(type))) { + errorf(&argument->expression->base.source_position, + "call argument '%E' must not be void", argument->expression); + } type = get_default_promoted_type(type);