summary refs log tree commit diff stats
path: root/tests/destructor/tobjfield_analysis.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2019-04-25 07:59:34 +0200
committerGitHub <noreply@github.com>2019-04-25 07:59:34 +0200
commiteb9043c0e9f835cb42b83d3a954058cdde01a72b (patch)
treedcf2b20ce7f3e63e58a4493be5057a16d86d088e /tests/destructor/tobjfield_analysis.nim
parenta644f443bcd2d969cbd2349d25f992309526373d (diff)
downloadNim-eb9043c0e9f835cb42b83d3a954058cdde01a72b.tar.gz
fixes #11095 (#11104)
* fixes #11095
Diffstat (limited to 'tests/destructor/tobjfield_analysis.nim')
-rw-r--r--tests/destructor/tobjfield_analysis.nim34
1 files changed, 25 insertions, 9 deletions
diff --git a/tests/destructor/tobjfield_analysis.nim b/tests/destructor/tobjfield_analysis.nim
index 24cf02aee..83f394c3b 100644
--- a/tests/destructor/tobjfield_analysis.nim
+++ b/tests/destructor/tobjfield_analysis.nim
@@ -2,30 +2,46 @@ discard """
   output: '''works'''
 """
 
+#  bug #11095
+
 type
-  MyVal = object
-    f: ptr float
+  MyVal[T] = object
+    f: ptr T
 
-proc `=destroy`(x: var MyVal) =
+proc `=destroy`[T](x: var MyVal[T]) =
   if x.f != nil:
     dealloc(x.f)
 
-proc `=sink`(x1: var MyVal, x2: Myval) =
+proc `=sink`[T](x1: var MyVal[T], x2: MyVal[T]) =
   if x1.f != x2.f:
     `=destroy`(x1)
     x1.f = x2.f
 
-proc `=`(x1: var MyVal, x2: Myval) {.error.}
+proc `=`[T](x1: var MyVal[T], x2: MyVal[T]) {.error.}
 
-proc newVal(x: float): MyVal =
-  result.f = create(float)
+proc newVal[T](x: sink T): MyVal[T] =
+  result.f = create(T)
   result.f[] = x
 
-proc sinkMe(x: sink MyVal) =
+proc set[T](x: var MyVal[T], val: T) =
+  x.f[] = val
+
+proc sinkMe[T](x: sink MyVal[T]) =
   discard
 
+var flag = false
+
 proc main =
-  var y = (newVal(3.0), newVal(4.0))
+  var y = case flag
+    of true:
+      var x1 = newVal[float](1.0)
+      var x2 = newVal[float](2.0)
+      (newVal(x1), newVal(x2))
+
+    of false:
+      var x1 = newVal[float](1.0)
+      var x2 = newVal[float](2.0)
+      (newVal(x1), newVal(x2))
 
   sinkMe y[0]
   sinkMe y[1]