Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* close nim-lang#11142

* fix nim-lang#12636

* undo unwanted changes

* fix illegal recursion case
  • Loading branch information
cooldome authored Nov 5, 2020
1 parent 3aab6a4 commit 3af7818
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
8 changes: 6 additions & 2 deletions compiler/sizealignoffsetimpl.nim
Original file line number Diff line number Diff line change
Expand Up @@ -258,12 +258,16 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) =

of tyArray:
computeSizeAlign(conf, typ[1])
let elemSize = typ[1].size
let elemSize = typ[1].size
let len = lengthOrd(conf, typ[0])
if elemSize < 0:
typ.size = elemSize
typ.align = int16(elemSize)
elif len < 0:
typ.size = szUnknownSize
typ.align = szUnknownSize
else:
typ.size = toInt64Checked(lengthOrd(conf, typ[0]) * int32(elemSize), szTooBigSize)
typ.size = toInt64Checked(len * int32(elemSize), szTooBigSize)
typ.align = typ[1].align

of tyUncheckedArray:
Expand Down
14 changes: 13 additions & 1 deletion tests/misc/tsizeof.nim
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,16 @@ testinstance:
y: int32
z: AnotherEnum

Stack[N: static int, T: object] = object
pad: array[128 - sizeof(array[N, ptr T]) - sizeof(int) - sizeof(pointer), byte]
stack: array[N, ptr T]
len*: int
rawMem: ptr array[N, T]

Stack2[T: object] = object
pad: array[128 - sizeof(array[sizeof(T), ptr T]), byte]


const trivialSize = sizeof(TrivialType) # needs to be able to evaluate at compile time

proc main(): void =
Expand All @@ -377,6 +387,8 @@ testinstance:
var po : PaddingOfSetEnum33
var capo: MyCustomAlignPackedObject
var issue15516: MyObject
var issue12636_1: Stack[5, MyObject]
var issue12636_2: Stack2[MyObject]

var
e1: Enum1
Expand All @@ -395,7 +407,7 @@ testinstance:
else:
doAssert sizeof(SimpleAlignment) > 10

testSizeAlignOf(t,a,b,c,d,e,f,g,ro,go,po, e1, e2, e4, e8, eoa, eob, capo, issue15516)
testSizeAlignOf(t,a,b,c,d,e,f,g,ro,go,po, e1, e2, e4, e8, eoa, eob, capo, issue15516, issue12636_1, issue12636_2)

type
WithBitsize {.objectconfig.} = object
Expand Down

0 comments on commit 3af7818

Please sign in to comment.