[backport] fix #11320 (#11538)

* [backport] fix #11320
* fix test for 32 bit test
This commit is contained in:
Arne Döring
2019-07-03 08:00:40 +02:00
committed by Andreas Rumpf
parent 0a1cb631a2
commit 20d0ef8afb
4 changed files with 17 additions and 6 deletions

View File

@@ -291,7 +291,7 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) =
of tyUncheckedArray:
let base = typ.lastSon
computeSizeAlign(conf, base)
typ.size = szUnknownSize
typ.size = 0
typ.align = base.align
of tyEnum:
if firstOrd(conf, typ) < 0:

View File

@@ -877,8 +877,8 @@ when defined(nimHasalignOf):
proc offsetOfDotExpr(typeAccess: typed): int {.magic: "OffsetOf", noSideEffect, compileTime.}
template offsetOf*[T](t: typedesc[T]; member: untyped): int =
var tmp: T
offsetOfDotExpr(tmp.member)
var tmp {.noinit.}: ptr T
offsetOfDotExpr(tmp[].member)
template offsetOf*[T](value: T; member: untyped): int =
offsetOfDotExpr(value.member)

View File

@@ -4,6 +4,4 @@ invalid type: 'UncheckedArray[uint8]' for var
'''
"""
var
rawMem = alloc0(20)
byteUA = cast[UncheckedArray[uint8]](rawMem)
var byteUA: UncheckedArray[uint8]

View File

@@ -536,3 +536,16 @@ proc main() =
typeProcessing(mylocal)
main()
# issue #11320 use UncheckedArray
type
Payload = object
something: int8
vals: UncheckedArray[int32]
proc payloadCheck() =
doAssert offsetOf(Payload, vals) == 4
doAssert sizeOf(Payload) == 4
payloadCheck()