- "Cannot use '%s' as type for '%s'",
- arg->type->name, arg->var->name);
- return 0;
+ "Cannot use '%s' as type for '%s': %s", arg->type->name,
+ arg->var->name, data->last_error);
+ return false;
+ }
+ return true;
+}
+
+bool psi_decl_arg_validate_typedef(struct psi_data *data, struct psi_decl_arg *def)
+{
+ if (!psi_decl_type_validate(data, def->type, def)) {
+ 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': %s", def->var->name, pre,
+ def->type->name, data->last_error);
+ return false;