fix #20972 fixes invalid and UB codegen case object transitions for both refc and ORC [backport] (#21611)

fix #20972 fixes invalid and UB codegen case object transitions for refc and ORC
This commit is contained in:
ringabout
2023-04-04 18:18:43 +08:00
committed by GitHub
parent 31d3606fe8
commit 3575f2bf9c
2 changed files with 20 additions and 3 deletions

View File

@@ -275,10 +275,12 @@ proc genericReset(dest: pointer, mt: PNimType) =
proc selectBranch(discVal, L: int,
a: ptr array[0x7fff, ptr TNimNode]): ptr TNimNode =
result = a[L] # a[L] contains the ``else`` part (but may be nil)
if discVal <% L:
let x = a[discVal]
if x != nil: result = x
result = a[discVal]
if result == nil:
result = a[L]
else:
result = a[L] # a[L] contains the ``else`` part (but may be nil)
proc FieldDiscriminantCheck(oldDiscVal, newDiscVal: int,
a: ptr array[0x7fff, ptr TNimNode],