mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +00:00
@@ -330,7 +330,7 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) =
|
||||
sym.offset = accum.offset
|
||||
accum.inc(int(child.size))
|
||||
typ.paddingAtEnd = int16(accum.finish())
|
||||
typ.size = accum.offset
|
||||
typ.size = if accum.offset == 0: 1 else: accum.offset
|
||||
typ.align = int16(accum.maxAlign)
|
||||
except IllegalTypeRecursionError:
|
||||
typ.paddingAtEnd = szIllegalRecursion
|
||||
@@ -388,7 +388,7 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) =
|
||||
typ.align = szUnknownSize
|
||||
typ.paddingAtEnd = szUnknownSize
|
||||
else:
|
||||
typ.size = accum.offset
|
||||
typ.size = if accum.offset == 0: 1 else: accum.offset
|
||||
typ.align = int16(accum.maxAlign)
|
||||
typ.paddingAtEnd = paddingAtEnd
|
||||
except IllegalTypeRecursionError:
|
||||
|
||||
@@ -78,7 +78,7 @@ macro c_offsetof(fieldAccess: typed): int32 =
|
||||
## Bullet proof implementation that works on actual offsetof operator
|
||||
## in the c backend. Assuming of course this implementation is
|
||||
## correct.
|
||||
let s = if fieldAccess.kind == nnkCheckedFieldExpr: fieldAccess[0]
|
||||
let s = if fieldAccess.kind == nnkCheckedFieldExpr: fieldAccess[0]
|
||||
else: fieldAccess
|
||||
let a = s[0].getTypeInst
|
||||
let b = s[1]
|
||||
@@ -686,3 +686,11 @@ reject:
|
||||
|
||||
reject:
|
||||
const off8 = offsetof(MyPackedCaseObject, val5)
|
||||
|
||||
|
||||
type
|
||||
O0 = object
|
||||
T0 = tuple[]
|
||||
|
||||
doAssert sizeof(O0) == 1
|
||||
doAssert sizeof(T0) == 1
|
||||
|
||||
Reference in New Issue
Block a user