Skip to content

Commit d49bb02

Browse files
keithc-capshipton
authored andcommitted
Correct padding of struct layouts
Signed-off-by: Keith W. Campbell <[email protected]>
1 parent f1ba03e commit d49bb02

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

test/jdk/java/foreign/CallGeneratorHelper.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
/*
2626
* ===========================================================================
27-
* (c) Copyright IBM Corp. 2021, 2022 All Rights Reserved
27+
* (c) Copyright IBM Corp. 2021, 2023 All Rights Reserved
2828
* ===========================================================================
2929
*/
3030

@@ -148,21 +148,24 @@ MemoryLayout layout(List<StructFieldType> fields) {
148148
long align = 0;
149149
for (StructFieldType field : fields) {
150150
MemoryLayout l = field.layout();
151-
/* Follow the calculation of padding in JDK19 which is based on
152-
* the alignment of layout rather than the bit size.
151+
/* Use the padding calculation from JDK19+ which is based
152+
* on the alignment of the layout rather than its bit size.
153153
*/
154-
long padding = offset % l.bitAlignment();
155-
if (padding != 0) {
154+
long alignment = l.bitAlignment();
155+
long padding = alignment - (offset % alignment);
156+
if (padding != alignment) {
156157
layouts.add(MemoryLayout.paddingLayout(padding));
157158
offset += padding;
158159
}
159160
layouts.add(l.withName("field" + offset));
160161
align = Math.max(align, l.bitAlignment());
161162
offset += l.bitSize();
162163
}
163-
long padding = offset % align;
164-
if (padding != 0) {
165-
layouts.add(MemoryLayout.paddingLayout(padding));
164+
if (align != 0) {
165+
long padding = align - (offset % align);
166+
if (padding != align) {
167+
layouts.add(MemoryLayout.paddingLayout(padding));
168+
}
166169
}
167170
return MemoryLayout.structLayout(layouts.toArray(new MemoryLayout[0]));
168171
} else {

0 commit comments

Comments
 (0)