summary refs log tree commit diff stats
path: root/tests/destructor/tuse_result_prevents_sinks.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/destructor/tuse_result_prevents_sinks.nim')
-rw-r--r--tests/destructor/tuse_result_prevents_sinks.nim37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/destructor/tuse_result_prevents_sinks.nim b/tests/destructor/tuse_result_prevents_sinks.nim
new file mode 100644
index 000000000..e74c16da3
--- /dev/null
+++ b/tests/destructor/tuse_result_prevents_sinks.nim
@@ -0,0 +1,37 @@
+discard """
+  output: ""
+  targets: "c"
+"""
+
+# bug #9594
+
+type
+  Foo = object
+    i: int
+
+proc `=`(self: var Foo; other: Foo) =
+  self.i = other.i + 1
+
+proc `=sink`(self: var Foo; other: Foo) =
+  self.i = other.i
+
+proc `=destroy`(self: var Foo) = discard
+
+template preventCursorInference(x) =
+  let p = addr(x)
+
+proc test(): Foo =
+  result = Foo()
+  let temp = result
+  preventCursorInference temp
+  doAssert temp.i > 0
+  return result
+
+proc testB(): Foo =
+  result = Foo()
+  let temp = result
+  preventCursorInference temp
+  doAssert temp.i > 0
+
+discard test()
+discard testB()