summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/sizealignoffsetimpl.nim2
-rw-r--r--lib/system.nim4
-rw-r--r--tests/errmsgs/tuncheckedarrayvar.nim4
-rw-r--r--tests/misc/tsizeof.nim13
4 files changed, 17 insertions, 6 deletions
diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim
index 66fb3dc5b..cf8f296b4 100644
--- a/compiler/sizealignoffsetimpl.nim
+++ b/compiler/sizealignoffsetimpl.nim
@@ -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:
diff --git a/lib/system.nim b/lib/system.nim
index 256410522..d0149a118 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -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)
diff --git a/tests/errmsgs/tuncheckedarrayvar.nim b/tests/errmsgs/tuncheckedarrayvar.nim
index 17965914a..9376a0150 100644
--- a/tests/errmsgs/tuncheckedarrayvar.nim
+++ b/tests/errmsgs/tuncheckedarrayvar.nim
@@ -4,6 +4,4 @@ invalid type: 'UncheckedArray[uint8]' for var
 '''
 """
 
-var
-  rawMem = alloc0(20)
-  byteUA = cast[UncheckedArray[uint8]](rawMem)
+var byteUA: UncheckedArray[uint8]
diff --git a/tests/misc/tsizeof.nim b/tests/misc/tsizeof.nim
index 50d1c645a..f3d946a56 100644
--- a/tests/misc/tsizeof.nim
+++ b/tests/misc/tsizeof.nim
@@ -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()