+static inline int validate_struct(PSI_Validator *V, decl_struct *s) {
+ size_t i;
+
+ if (!validate_decl_args(V, s->args)) {
+ return 0;
+ }
+
+ s->layout = calloc(s->args->count, sizeof(*s->layout));
+ for (i = 0; i < s->args->count; ++i) {
+ decl_type *t = real_decl_type(s->args->args[i]->type);
+
+ if (i) {
+ decl_struct_layout *l = &s->layout[i-1];
+ s->layout[i].pos = psi_t_align(t->type, l->pos + l->size);
+ } else {
+ s->layout[i].pos = 0;
+ }
+ s->layout[i].len = psi_t_size(t->type);
+ }
+ return 1;
+}
+static inline int validate_structs(PSI_Validator *V) {
+ size_t i;
+
+ for (i = 0; i < V->structs->count; ++i) {
+ if (!validate_struct(V->structs->list[i])) {
+ return 0;
+ }
+ }
+ return 1;
+}