aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorCalvin Rose <calsrose@gmail.com>2024-10-18 17:53:21 -0500
committerCalvin Rose <calsrose@gmail.com>2024-10-18 17:53:21 -0500
commit07155ce65728c2885afdff1a13e5cd04c450d48e (patch)
treedc3ebaa281c6bc66321d015fc40197119448c4b1
parentMerge pull request #1513 from sogaiu/add-nth-and-only-tags-to-changelog (diff)
Don't error on empty struct.
-rw-r--r--src/core/ffi.c1
-rw-r--r--test/suite-ffi.janet7
2 files changed, 7 insertions, 1 deletions
diff --git a/src/core/ffi.c b/src/core/ffi.c
index 9b149542..7cc1ae2f 100644
--- a/src/core/ffi.c
+++ b/src/core/ffi.c
@@ -424,6 +424,7 @@ static JanetFFIStruct *build_struct_type(int32_t argc, const Janet *argv) {
st->size += (uint32_t) el_size;
} else {
if (el_align > st->align) st->align = (uint32_t) el_align;
+ if (el_align <= 0) el_align = 1;
st->fields[i].offset = (uint32_t)(((st->size + el_align - 1) / el_align) * el_align);
st->size = (uint32_t)(el_size + st->fields[i].offset);
}
diff --git a/test/suite-ffi.janet b/test/suite-ffi.janet
index 0a810198..fb8d288c 100644
--- a/test/suite-ffi.janet
+++ b/test/suite-ffi.janet
@@ -52,5 +52,10 @@
(assert (= 26 (ffi/size [:char :pack :int @[:char 21]]))
"array struct size"))
-(end-suite)
+(compwhen has-ffi
+ (assert-no-error "bad struct issue #1512" (ffi/struct :void))
+ (def s (ffi/struct :void))
+ (assert (= 0 (ffi/size s)))
+ (assert (= 1 (ffi/align s))))
+(end-suite)