summary refs log tree commit diff stats
path: root/tests/destructor/tv2_cast.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/destructor/tv2_cast.nim')
-rw-r--r--tests/destructor/tv2_cast.nim87
1 files changed, 71 insertions, 16 deletions
diff --git a/tests/destructor/tv2_cast.nim b/tests/destructor/tv2_cast.nim
index 5502cb38d..917cf0eb3 100644
--- a/tests/destructor/tv2_cast.nim
+++ b/tests/destructor/tv2_cast.nim
@@ -1,48 +1,81 @@
 discard """
   output: '''@[1]
 @[116, 101, 115, 116]
-@[1953719668, 875770417]'''
+@[1953719668, 875770417]
+destroying O1'''
   cmd: '''nim c --gc:arc --expandArc:main --expandArc:main1 --expandArc:main2 --expandArc:main3 --hints:off --assertions:off $file'''
   nimout: '''--expandArc: main
 
 var
   data
   :tmpD
-`=copy`(data, cast[string](encode(cast[seq[byte]](
-  :tmpD = newString(100)
-  :tmpD))))
-`=destroy`(:tmpD)
-`=destroy`(data)
+  :tmpD_1
+  :tmpD_2
+data =
+  wasMoved(:tmpD)
+  `=copy`(:tmpD, cast[string](
+    :tmpD_2 = encode(cast[seq[byte]](
+      :tmpD_1 = newString(100)
+      :tmpD_1))
+    :tmpD_2))
+  :tmpD
+`=destroy`(:tmpD_2)
+`=destroy_1`(:tmpD_1)
+`=destroy_1`(data)
 -- end of expandArc ------------------------
 --expandArc: main1
 
 var
   s
   data
+  :tmpD
+  :tmpD_1
 s = newString(100)
-`=copy`(data, cast[string](encode(toOpenArrayByte(s, 0, len(s) - 1))))
-`=destroy`(data)
-`=destroy`(s)
+data =
+  wasMoved(:tmpD)
+  `=copy`(:tmpD, cast[string](
+    :tmpD_1 = encode(toOpenArrayByte(s, 0, len(s) - 1))
+    :tmpD_1))
+  :tmpD
+`=destroy`(:tmpD_1)
+`=destroy_1`(data)
+`=destroy_1`(s)
 -- end of expandArc ------------------------
 --expandArc: main2
 
 var
   s
   data
+  :tmpD
+  :tmpD_1
 s = newSeq(100)
-`=copy`(data, cast[string](encode(s)))
-`=destroy`(data)
-`=destroy_1`(s)
+data =
+  wasMoved(:tmpD)
+  `=copy`(:tmpD, cast[string](
+    :tmpD_1 = encode(s)
+    :tmpD_1))
+  :tmpD
+`=destroy`(:tmpD_1)
+`=destroy_1`(data)
+`=destroy`(s)
 -- end of expandArc ------------------------
 --expandArc: main3
 
 var
   data
   :tmpD
-`=copy`(data, cast[string](encode do:
-  :tmpD = newSeq(100)
-  :tmpD))
-`=destroy`(:tmpD)
+  :tmpD_1
+  :tmpD_2
+data =
+  wasMoved(:tmpD)
+  `=copy`(:tmpD, cast[string](
+    :tmpD_2 = encode do:
+      :tmpD_1 = newSeq(100)
+      :tmpD_1
+    :tmpD_2))
+  :tmpD
+`=destroy`(:tmpD_2)
+`=destroy`(:tmpD_1)
 `=destroy_1`(data)
 -- end of expandArc ------------------------'''
 """
@@ -89,3 +122,25 @@ echo a
 #issue 11204
 var ac {.compileTime.} = @["a", "b"]
 const bc = ac.len
+
+
+type
+  O = object of RootRef
+    i: int
+
+  O1 = object of O
+  O2 = object of O
+
+proc `=destroy`(o: var O) =
+  echo "destroying O"
+
+proc `=destroy`(o: var O1) =
+  echo "destroying O1"
+
+proc `=destroy`(o: var O2) =
+  echo "destroying O2"
+
+proc test =
+  let o3 = cast[ref O2]((ref O1)())
+
+test()