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]
|