X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fdecl_union.c;h=71e70eb378b2bf5b7bfd7141037f1d4f94b7038a;hp=f3299976d53eaf9c3e393a5fbf512ac7769622d6;hb=b09850fb2c28c23547fed5ac83faf0fa2d3e6b8b;hpb=370510d04a5e22140e1e7f90f5d1f0002e6dbee6 diff --git a/src/types/decl_union.c b/src/types/decl_union.c index f329997..71e70eb 100644 --- a/src/types/decl_union.c +++ b/src/types/decl_union.c @@ -92,7 +92,7 @@ bool psi_decl_union_validate(struct psi_data *data, struct psi_decl_union *u) return false; } - if (darg->layout) { + if (darg->layout && darg->layout->len) { pos = darg->layout->pos; align = psi_decl_arg_align(darg, &pos, &len); @@ -114,7 +114,18 @@ bool psi_decl_union_validate(struct psi_data *data, struct psi_decl_union *u) pos = 0; align = psi_decl_arg_align(darg, &pos, &len); - darg->layout = psi_layout_init(pos, len); + + if (darg->layout) { + if (darg->layout->pos != 0) { + data->error(data, darg->token, PSI_WARNING, + "Offset of %s.%s should be 0", u->name, + darg->var->name); + darg->layout->pos = 0; + } + darg->layout->len = len; + } else { + darg->layout = psi_layout_init(pos, len, NULL); + } } if (len > size) { size = len;