From ea5fc9f2040715788449e9031607eab0a1a4d8e7 Mon Sep 17 00:00:00 2001 From: cooldome Date: Mon, 26 Nov 2018 08:46:19 +0000 Subject: [PATCH] fixes #9794: sizeof tuple is incorrect if contains imported object (#9795) * fixes #9794 * Fix linux test --- compiler/sizealignoffsetimpl.nim | 6 +++--- tests/types/tfinalobj.nim | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim index f5ecc04b1..c8da18cf9 100644 --- a/compiler/sizealignoffsetimpl.nim +++ b/compiler/sizealignoffsetimpl.nim @@ -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 diff --git a/tests/types/tfinalobj.nim b/tests/types/tfinalobj.nim index 2fda73363..6a1c8c2ce 100644 --- a/tests/types/tfinalobj.nim +++ b/tests/types/tfinalobj.nim @@ -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() \ No newline at end of file