summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/ccgexprs.nim3
-rw-r--r--tests/destructor/tv2_cast.nim11
2 files changed, 14 insertions, 0 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim
index cc054b33a..58a45f1f5 100644
--- a/compiler/ccgexprs.nim
+++ b/compiler/ccgexprs.nim
@@ -1839,6 +1839,9 @@ proc genSomeCast(p: BProc, e: PNode, d: var TLoc) =
     if srcTyp.kind in {tyPtr, tyPointer} and etyp.kind in IntegralTypes:
       putIntoDest(p, d, e, "(($1) (ptrdiff_t) ($2))" %
           [getTypeDesc(p.module, e.typ), rdCharLoc(a)], a.storage)
+    elif p.config.selectedGc == gcDestructors and etyp.kind == tySequence:
+      putIntoDest(p, d, e, "(*($1*) (&$2))" %
+          [getTypeDesc(p.module, e.typ), rdCharLoc(a)], a.storage)
     else:
       putIntoDest(p, d, e, "(($1) ($2))" %
           [getTypeDesc(p.module, e.typ), rdCharLoc(a)], a.storage)
diff --git a/tests/destructor/tv2_cast.nim b/tests/destructor/tv2_cast.nim
new file mode 100644
index 000000000..1430b7521
--- /dev/null
+++ b/tests/destructor/tv2_cast.nim
@@ -0,0 +1,11 @@
+discard """
+  cmd: '''nim c --newruntime $file'''
+  output: '''@[1]
+@[116, 101, 115, 116]'''
+"""
+
+# bug #11018
+discard cast[seq[uint8]](@[1])
+discard cast[seq[uint8]]("test")
+echo cast[seq[uint8]](@[1])
+echo cast[seq[uint8]]("test")