From: Michael Wallner Date: Tue, 16 Feb 2016 10:13:46 +0000 (+0100) Subject: flush X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=9f42fcc5b2a31e074bebed0f0f906c1e54b51b95;p=m6w6%2Fext-psi flush --- diff --git a/src/context_validate.c b/src/context_validate.c index e34330d..897ae65 100644 --- a/src/context_validate.c +++ b/src/context_validate.c @@ -171,14 +171,28 @@ static inline int validate_decl_type(PSI_Data *data, decl_type *type) { } static inline int validate_decl_typedef(PSI_Data *data, decl_arg *def) { if (!validate_decl_type(data, def->type)) { + const char *pre; + + switch (def->type->type) { + case PSI_T_STRUCT: pre = "struct "; break; + case PSI_T_UNION: pre = "union "; break; + case PSI_T_ENUM: pre = "enum "; break; + default: pre = ""; break; + } data->error(data, def->token, PSI_WARNING, "Type '%s' cannot be aliased to %s'%s'", - def->type->name, def->type->type == PSI_T_STRUCT?"struct ":"", - def->var->name); + def->type->name, pre, def->var->name); return 0; } - if (def->type->type == PSI_T_VOID && def->var->pointer_level) { - def->type->type = PSI_T_POINTER; + if (def->type->type == PSI_T_VOID) { + if (def->var->pointer_level) { + def->type->type = PSI_T_POINTER; + } else { + data->error(data, def->token, PSI_WARNING, + "Type '%s' cannot be aliased to 'void'", + def->type->name); + return 0; + } } return 1; } @@ -194,6 +208,11 @@ static inline int validate_decl_arg(PSI_Data *data, decl_arg *arg) { "Cannot use '%s' as type for '%s'", arg->type->name, arg->var->name); return 0; + } else { + decl_type *real = real_decl_type(arg->type); + + if (real->type == PSI_T_FUNCTION) { + } } return 1; }