From 1ec5c6fdf5fc62c182fcd32d502dca4ce5ac6771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20D=C3=B6ring?= Date: Tue, 30 Oct 2018 16:41:06 +0100 Subject: [PATCH] Sizeof alignof fixes (#9568) fixes #9545 --- compiler/sizealignoffsetimpl.nim | 2 +- tests/misc/tsizeof.nim | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim index dcff992a18..573b27094c 100644 --- a/compiler/sizealignoffsetimpl.nim +++ b/compiler/sizealignoffsetimpl.nim @@ -122,7 +122,7 @@ proc computeObjectOffsetsFoldFunction(conf: ConfigRef; n: PNode, initialOffset: let size = n.sym.typ.size let align = n.sym.typ.align result.align = align - if initialOffset == szUnknownSize: + if initialOffset == szUnknownSize or size == szUnknownSize: n.sym.offset = szUnknownSize result.offset = szUnknownSize else: diff --git a/tests/misc/tsizeof.nim b/tests/misc/tsizeof.nim index ecdd44fcaa..2830a545f4 100644 --- a/tests/misc/tsizeof.nim +++ b/tests/misc/tsizeof.nim @@ -350,5 +350,19 @@ testinstance: main() +{.emit: """/*TYPESECTION*/ +typedef struct{ + float a; float b; +} Foo; +""".} + +type + Foo {.importc.} = object + + Bar = object + b: byte + foo: Foo + +assert sizeof(Bar) == 12 echo "OK"