summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--tests/ccgbugs2/tcodegen.nim28
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]