diff options
Diffstat (limited to 'tests/destructor/tuse_result_prevents_sinks.nim')
-rw-r--r-- | tests/destructor/tuse_result_prevents_sinks.nim | 37 |
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() |