summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorcooldome <ariabushenko@gmail.com>2020-11-20 13:58:16 +0000
committerGitHub <noreply@github.com>2020-11-20 14:58:16 +0100
commitfcb2ec4ed69fe924e7e3899e0084f534124255d4 (patch)
tree27f848f60dfe7e2a93f69362419e78b93e0c2a00 /tests
parent07ad608fb2a9387fefc61a8eef9e0777660516a9 (diff)
downloadNim-fcb2ec4ed69fe924e7e3899e0084f534124255d4.tar.gz
fix #15958 (#15970) [backport:1.4]
* fix #15958

* also cover openArray and VarArgs

* more tests

* cover even more types

* cover even more types

* Trigger build

* Trigger build

* cover sets passed as arrays
Diffstat (limited to 'tests')
-rw-r--r--tests/lent/tbasic_lent_check.nim39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/lent/tbasic_lent_check.nim b/tests/lent/tbasic_lent_check.nim
index 4389cbc6e..e22f7bb50 100644
--- a/tests/lent/tbasic_lent_check.nim
+++ b/tests/lent/tbasic_lent_check.nim
@@ -1,4 +1,5 @@
 discard """
+  targets: "c cpp"
   output: "1"
 """
 
@@ -14,3 +15,41 @@ proc main =
   doAssert(not compiles(passToVar(viewInto(x))))
 
 main()
+
+
+#------------------------------------------------------------------------------
+# issue #15958
+
+block:
+  proc byLent[T](a: T): lent T = a
+  let a = [11,12]
+  let b = @[21,23]  
+  let ss = {1, 2, 3, 5}
+  doAssert byLent(a) == [11,12]
+  doAssert byLent(a).unsafeAddr == a.unsafeAddr
+  doAssert byLent(b) == @[21,23]
+  doAssert byLent(b).unsafeAddr == b.unsafeAddr
+  doAssert byLent(ss) == {1, 2, 3, 5}
+  doAssert byLent(ss).unsafeAddr == ss.unsafeAddr
+
+  let r = new(float)
+  r[] = 10.0
+  doAssert byLent(r)[] == 10.0
+
+  let p = create(float)
+  p[] = 20.0
+  doAssert byLent(p)[] == 20.0
+
+  proc byLent2[T](a: openarray[T]): lent T = a[0]
+  doAssert byLent2(a) == 11
+  doAssert byLent2(a).unsafeAddr == a[0].unsafeAddr
+  doAssert byLent2(b) == 21
+  doAssert byLent2(b).unsafeAddr == b[0].unsafeAddr
+
+  proc byLent3[T](a: varargs[T]): lent T = a[1]
+  let 
+    x = 10
+    y = 20
+    z = 30
+  doAssert byLent3(x, y, z) == 20
+