summary refs log tree commit diff stats
path: root/tests/ccgbugs2/tcodegen.nim
blob: 84cd76e2fdf3e190e0c0808316ef69965b1af14b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
discard """
  targets: "c cpp"
"""

# bug #19094
type
  X = object
    filler: array[2048, int]
    innerAddress: uint

proc initX(): X =
  result.innerAddress = cast[uint](result.addr)

proc initXInPlace(x: var X) =
  x.innerAddress = cast[uint](x.addr)

block: # NRVO1
  var x = initX()
  let innerAddress = x.innerAddress
  let outerAddress = cast[uint](x.addr)
  doAssert(innerAddress == outerAddress) # [OK]

block: # NRVO2
  var x: X
  initXInPlace(x)
  let innerAddress = x.innerAddress
  let outerAddress = cast[uint](x.addr)
  doAssert(innerAddress == outerAddress) # [OK]