From 9d1c38d69547d835f7228651e71e8a7d744c456d Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Sat, 8 Apr 2017 21:11:33 -0400 Subject: fix bug in union size computation The size of a union is the size of the largest element aligned with the largest alignment. For example, the size of the following union is 16, not 13 (as returned before this patch). union { char c[13]; int i; }; --- parse.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/parse.c b/parse.c index edb6c29..b393fc2 100644 --- a/parse.c +++ b/parse.c @@ -960,9 +960,9 @@ parseseg(Seg *seg, Typ *ty, int t) err(", or } expected"); seg[n].type = SEnd; a = 1 << al; - sz = (sz + a - 1) & -a; - if (sz >= ty->size) - ty->size = sz; + if (sz < ty->size) + sz = ty->size; + ty->size = (sz + a - 1) & -a; ty->align = al; } -- cgit 1.4.1