diff options
-rw-r--r-- | compiler/sizealignoffsetimpl.nim | 6 | ||||
-rw-r--r-- | 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 |