aboutsummaryrefslogtreecommitdiff
path: root/decl.c
diff options
context:
space:
mode:
Diffstat (limited to 'decl.c')
-rw-r--r--decl.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/decl.c b/decl.c
index 31eb0b9..235c975 100644
--- a/decl.c
+++ b/decl.c
@@ -660,8 +660,14 @@ structdecl(struct scope *s, struct type *t)
if (align < m->type->align)
align = m->type->align;
t->size = ALIGNUP(t->size, align);
- m->offset = t->size;
- t->size += m->type->size;
+ if (t->kind == TYPESTRUCT) {
+ m->offset = t->size;
+ t->size += m->type->size;
+ } else {
+ m->offset = 0;
+ if (t->size < m->type->size)
+ t->size = m->type->size;
+ }
if (t->align < align)
t->align = align;
}