diff options
| author | Drew DeVault <[email protected]> | 2021-08-17 15:18:00 +0200 |
|---|---|---|
| committer | Quentin Carbonneaux <[email protected]> | 2021-08-23 10:03:13 +0200 |
| commit | f3414a492bf4623731f3850aaae5b4a7a2a83a4d (patch) | |
| tree | b2846c060327a421e5894527ca10225112daacf2 /parse.c | |
| parent | 2bbfcf61b38edfe3c347cd270380e5117454c0cf (diff) | |
parsefields: fix padding calculation
This was causing issues with aggregate types. A simple reproduction is:
type :type.1 = align 8 { 24 }
type :type.2 = align 8 { w 1, :type.1 1 }
The size of type.2 should be 32, adding only 4 bytes of padding between
the first and second field. Prior to this patch, 20 bytes of padding was
added instead, causing the type to have a size of 48.
Signed-off-by: Drew DeVault <[email protected]>
Diffstat (limited to 'parse.c')
| -rw-r--r-- | parse.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -867,9 +867,9 @@ parsefields(Field *fld, Typ *ty, int t) } if (a > al) al = a; - a = sz & (s-1); + a = (1 << a) - 1; + a = ((sz + a) & ~a) - sz; if (a) { - a = s - a; if (n < NField) { /* padding */ fld[n].type = FPad; |
