mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-21 16:31:39 +00:00
@@ -154,12 +154,17 @@ proc computePackedObjectOffsetsFoldFunction(conf: ConfigRef; n: PNode, initialOf
|
||||
if result == szIllegalRecursion:
|
||||
break
|
||||
of nkSym:
|
||||
var size = szUnknownSize
|
||||
if n.sym.bitsize == 0:
|
||||
computeSizeAlign(conf, n.sym.typ)
|
||||
n.sym.offset = initialOffset.int
|
||||
result = n.sym.offset + n.sym.typ.size
|
||||
else:
|
||||
size = n.sym.typ.size.int
|
||||
|
||||
if initialOffset == szUnknownSize or size == szUnknownSize:
|
||||
n.sym.offset = szUnknownSize
|
||||
result = szUnknownSize
|
||||
else:
|
||||
n.sym.offset = int(initialOffset)
|
||||
result = initialOffset + n.sym.typ.size
|
||||
else:
|
||||
result = szUnknownSize
|
||||
|
||||
|
||||
@@ -402,6 +402,18 @@ type
|
||||
|
||||
assert sizeof(C) == 3
|
||||
|
||||
|
||||
type
|
||||
MixedBitsize = object {.packed.}
|
||||
a: uint32
|
||||
b {.bitsize: 8.}: uint8
|
||||
c {.bitsize: 1.}: uint8
|
||||
d {.bitsize: 7.}: uint8
|
||||
e {.bitsize: 16.}: uint16
|
||||
f: uint32
|
||||
|
||||
doAssert sizeof(MixedBitsize) == 12
|
||||
|
||||
if failed:
|
||||
quit("FAIL")
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user