123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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]
- block: # bug #22354
- type Object = object
- foo: int
- proc takeFoo(self: var Object): int =
- result = self.foo
- self.foo = 999
- proc doSomething(self: var Object; foo: int = self.takeFoo()) =
- discard
- proc main() =
- var obj = Object(foo: 2)
- obj.doSomething()
- doAssert obj.foo == 999
- main()
|