fixes #9794: sizeof tuple is incorrect if contains imported object (#9795)

* fixes #9794

* Fix linux test
This commit is contained in:
cooldome
2018-11-26 08:46:19 +00:00
committed by Andreas Rumpf
parent 2ac7f52388
commit ea5fc9f204
2 changed files with 21 additions and 4 deletions

View File

@@ -310,9 +310,9 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) =
for i in countup(0, sonsLen(typ) - 1):
let child = typ.sons[i]
computeSizeAlign(conf, child)
if child.size == szIllegalRecursion:
typ.size = szIllegalRecursion
typ.align = szIllegalRecursion
if child.size < 0:
typ.size = child.size
typ.align = child.align
return
maxAlign = max(maxAlign, child.align)
sizeAccum = align(sizeAccum, child.align) + child.size

View File

@@ -1,5 +1,6 @@
discard """
output: "abc"
output: '''abc
16 == 16'''
"""
type
@@ -14,3 +15,19 @@ doAssert TA.sizeof == string.sizeof
echo a.x
##########################################
# bug #9794
##########################################
type
imported_double {.importc: "double".} = object
Pod = object
v* : imported_double
seed*: int32
Pod2 = tuple[v: imported_double, seed: int32]
proc test() =
echo sizeof(Pod), " == ",sizeof(Pod2)
test()