diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim index 009acf6eb2..987bcde99f 100644 --- a/compiler/sizealignoffsetimpl.nim +++ b/compiler/sizealignoffsetimpl.nim @@ -319,10 +319,10 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) = typ.align = int16(conf.floatInt64Align) elif align(length, 8) mod 8 == 0: typ.size = align(length, 8) div 8 - typ.align = int16(conf.floatInt64Align) + typ.align = 1 else: typ.size = align(length, 8) div 8 + 1 - typ.align = int16(conf.floatInt64Align) + typ.align = 1 of tyRange: computeSizeAlign(conf, typ[0]) typ.size = typ[0].size diff --git a/tests/misc/tsizeof3.nim b/tests/misc/tsizeof3.nim index 1215b4bcda..f0ba8c4d0a 100644 --- a/tests/misc/tsizeof3.nim +++ b/tests/misc/tsizeof3.nim @@ -27,3 +27,32 @@ type static: doAssert(compiles(offsetOf(Payload, vals))) + + +type + GoodboySave* {.bycopy.} = object + saveCount: uint8 + savePoint: uint16 + shards: uint32 + friendCount: uint8 + friendCards: set[0..255] + locationsKnown: set[0..127] + locationsUnlocked: set[0..127] + pickupsObtained: set[0..127] + pickupsUsed: set[0..127] + pickupCount: uint8 + +block: # bug #20914 + block: + proc csizeof[T](a: T): int {.importc:"sizeof", nodecl.} + + var s: GoodboySave + doAssert sizeof(s) == 108 + doAssert csizeof(s) == static(sizeof(s)) + + block: + proc calignof[T](a: T): int {.importc:"alignof", header: "".} + + var s: set[0..256] + doAssert alignof(s) == 1 + doAssert calignof(s) == static(alignof(s))