Skip to content
Permalink
Browse files

fixes #9403

  • Loading branch information...
Araq committed May 5, 2019
1 parent e42c304 commit 0ecaaa85e9395dc7ae947d6466698cef66f48f5c
Showing with 21 additions and 2 deletions.
  1. +1 −1 compiler/ccgexprs.nim
  2. +20 −1 tests/ccgbugs/tunsafeaddr.nim
@@ -1912,7 +1912,7 @@ proc genOrd(p: BProc, e: PNode, d: var TLoc) =

proc genSomeCast(p: BProc, e: PNode, d: var TLoc) =
const
ValueTypes = {tyTuple, tyObject, tyArray, tyOpenArray, tyVarargs}
ValueTypes = {tyTuple, tyObject, tyArray, tyOpenArray, tyVarargs, tyUncheckedArray}
# we use whatever C gives us. Except if we have a value-type, we need to go
# through its address:
var a: TLoc
@@ -1,5 +1,6 @@
discard """
output: '''12'''
output: '''12
4'''
"""

{.emit: """
@@ -26,3 +27,21 @@ p(@[1])
q(@[1])
main()
# bug #9403
type
MyObj = ref object
len: int
val: UncheckedArray[uint64]
proc spot(x: MyObj): int64 =
result = cast[UncheckedArray[int64]](x.val)[0]
proc newMyObj(len: int): MyObj =
unsafeNew(result, sizeof(result[]) + len * sizeof(uint64))
result.len = len
result.val[0] = 4u64
result.val[1] = 8u64
echo spot(newMyObj(2))

0 comments on commit 0ecaaa8

Please sign in to comment.
You can’t perform that action at this time.