diff options
-rw-r--r-- | compiler/sizealignoffsetimpl.nim | 2 | ||||
-rw-r--r-- | tests/misc/tsizeof3.nim | 30 |
2 files changed, 31 insertions, 1 deletions
diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim index bc9e3812d..34384fa1f 100644 --- a/compiler/sizealignoffsetimpl.nim +++ b/compiler/sizealignoffsetimpl.nim @@ -169,7 +169,7 @@ proc computeObjectOffsetsFoldFunction(conf: ConfigRef; n: PNode, align = n.sym.typ.align.int result.align = align - if initialOffset == szUnknownSize or size == szUnknownSize: + if initialOffset == szUnknownSize or size == szUnknownSize or align == szUnknownSize: n.sym.offset = szUnknownSize result.offset = szUnknownSize else: diff --git a/tests/misc/tsizeof3.nim b/tests/misc/tsizeof3.nim index e41e0a268..4f8bdb21e 100644 --- a/tests/misc/tsizeof3.nim +++ b/tests/misc/tsizeof3.nim @@ -17,3 +17,33 @@ proc toByteArrayBE*[T: SomeInteger](num: T): ByteArrayBE[sizeof(T)]= let a = 12345.toByteArrayBE echo a[^2 .. ^1] # to make it work on both 32-bit and 64-bit + + +#----------------------------------------------------------------- + +# bug #11792 +type + m256d {.importc: "__m256d", header: "immintrin.h".} = object + + MyKind = enum + k1, k2, k3 + + MyTypeObj = object + kind: MyKind + x: int + amount: UncheckedArray[m256d] + + +# The sizeof(MyTypeObj) is not equal to (sizeof(int) + sizeof(MyKind)) due to +# alignment requirement of m256d, make sure Nim understands that +doAssert(sizeof(MyTypeObj) > sizeof(int) + sizeof(MyKind)) + +#--------------------------------------------------------------------- + +type + Payload = object + something: int + vals: UncheckedArray[int] + +static: + doAssert(compiles(offsetOf(Payload, vals))) |