diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-05-24 06:20:28 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-05-24 06:20:28 -0700 |
commit | 2262860404bad7755c6a8adb10f167439037f3fa (patch) | |
tree | d2c46acda2a935d4f835084b37bceec0be6cb3e0 /tests/017 | |
parent | 6357ea31bd2755d29a1643b71e15da5b8facc779 (diff) | |
download | txr-2262860404bad7755c6a8adb10f167439037f3fa.tar.gz txr-2262860404bad7755c6a8adb10f167439037f3fa.tar.bz2 txr-2262860404bad7755c6a8adb10f167439037f3fa.zip |
ffi: couple of tests; assertion.
* ffi.c (make_ffi_type_struct): Add check for impossible condition.
The bits_alloc variable could only exceed bits_type (and thus
cause the room variable to have a nonsensical, large value)
if the bitfield allocation tried to continue allocating bits into
an aligned unit, whose alignment exceeds the size of the underlying
type. But in that case, tft->aligned would have to be true, and
so the offset would have been aligned prior to this code, rendering
bits_alloc zero.
* tests/017/bitfields.tl: New tests.
Diffstat (limited to 'tests/017')
-rw-r--r-- | tests/017/bitfields.tl | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/017/bitfields.tl b/tests/017/bitfields.tl index 0dbb459d..dd0aab3c 100644 --- a/tests/017/bitfields.tl +++ b/tests/017/bitfields.tl @@ -585,3 +585,16 @@ (b0 (bit 8 (pack 1 (align 1 (bit 8 le-uint32))))))) (conv-test #S(s13 x #x7f b0 #xff) #b'7fff0000') + +(typedef s14 (pack (struct s14 + (a (bit 9 le-uint32)) + (b (bit 7 le-uint32))))) + +(conv-test #S(s14 a #x1ff b #x7f) #b'ffff') + +(typedef s15 (pack (struct s15 + (x uint8) + (a (bit 9 le-uint32)) + (b (bit 7 le-uint32))))) + +(conv-test #S(s15 x 0 a #x1ff b #x7f) #b'00ffff') |