diff options
author | flywind <xzsflywind@gmail.com> | 2022-01-29 21:06:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-29 14:06:54 +0100 |
commit | 33cd883e27f7ba7564cbeb59d2d38fe02bb507bf (patch) | |
tree | 8761da8fbaf0c5a2a486c256a5c93f38f0e9aa63 /tests/ccgbugs2/tcodegen.nim | |
parent | cb894c7094fb49014f85815a9dafc38b5dda743e (diff) | |
download | Nim-33cd883e27f7ba7564cbeb59d2d38fe02bb507bf.tar.gz |
[add testcase] NRVO does not occur with init procedures (#19462)
* [add testcase] NRVO does not occur with init procedures close #19094 * Update tests/ccgbugs2/tcodegen.nim
Diffstat (limited to 'tests/ccgbugs2/tcodegen.nim')
-rw-r--r-- | tests/ccgbugs2/tcodegen.nim | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/ccgbugs2/tcodegen.nim b/tests/ccgbugs2/tcodegen.nim new file mode 100644 index 000000000..84cd76e2f --- /dev/null +++ b/tests/ccgbugs2/tcodegen.nim @@ -0,0 +1,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] |