Skip to content

Commit d568488

Browse files
authored
fixes #13119 (#13128)
* fixes #13119 * fixes a regression
1 parent 49d1822 commit d568488

File tree

5 files changed

+25
-5
lines changed

5 files changed

+25
-5
lines changed

compiler/injectdestructors.nim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,8 @@ proc passCopyToSink(n: PNode; c: var Con): PNode =
352352
("passing '$1' to a sink parameter introduces an implicit copy; " &
353353
"use 'move($1)' to prevent it") % $n)
354354
else:
355+
if c.graph.config.selectedGC in {gcArc, gcOrc}:
356+
assert(not containsGarbageCollectedRef(n.typ))
355357
result.add newTree(nkAsgn, tmp, p(n, c, normal))
356358
result.add tmp
357359

compiler/liftdestructors.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ proc fillBody(c: var TLiftCtx; t: PType; body, x, y: PNode) =
656656
of tyTuple:
657657
fillBodyTup(c, t, body, x, y)
658658
of tyVarargs, tyOpenArray:
659-
if c.kind == attachedDestructor:
659+
if c.kind == attachedDestructor and (tfHasAsgn in t.flags or useNoGc(c, t)):
660660
forallElements(c, t, body, x, y)
661661
else:
662662
discard "cannot copy openArray"

compiler/sempass2.nim

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -907,9 +907,15 @@ proc track(tracked: PEffects, n: PNode) =
907907
nkMacroDef, nkTemplateDef, nkLambda, nkDo, nkFuncDef:
908908
discard
909909
of nkCast, nkHiddenStdConv, nkHiddenSubConv, nkConv:
910-
if n.len == 2: track(tracked, n[1])
910+
if n.len == 2:
911+
track(tracked, n[1])
912+
if tracked.owner.kind != skMacro:
913+
createTypeBoundOps(tracked, n.typ, n.info)
911914
of nkObjUpConv, nkObjDownConv, nkChckRange, nkChckRangeF, nkChckRange64:
912-
if n.len == 1: track(tracked, n[0])
915+
if n.len == 1:
916+
track(tracked, n[0])
917+
if tracked.owner.kind != skMacro:
918+
createTypeBoundOps(tracked, n.typ, n.info)
913919
of nkBracket:
914920
for i in 0..<n.safeLen: track(tracked, n[i])
915921
if tracked.owner.kind != skMacro:

tests/destructor/tarc.nim

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ discard """
33
@[1, 2, 3]
44
Success
55
@["a", "b", "c"]
6+
Hello
67
0'''
78
cmd: '''nim c --gc:arc $file'''
89
"""
@@ -114,4 +115,15 @@ proc bug12964*() =
114115

115116
bug12964()
116117

118+
# bug #13119
119+
import streams
120+
121+
proc bug13119 =
122+
var m = newStringStream("Hello world")
123+
let buffer = m.readStr(5)
124+
echo buffer
125+
m.close
126+
127+
bug13119()
128+
117129
echo getOccupiedMem() - startMem

tests/js/tcopying.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type MyArray = array[1, int]
1414
proc changeArray(a: var MyArray) =
1515
a = [123]
1616

17-
var a : MyArray
17+
var a: MyArray
1818
changeArray(a)
1919
echo a[0]
2020

@@ -34,7 +34,7 @@ block:
3434
ary2: array[3, int]
3535

3636
let ary1 = [1, 2, 3]
37-
var obj = TestObj(ary2:ary1)
37+
var obj = TestObj(ary2: ary1)
3838

3939
obj.ary2[1] = 9
4040

0 commit comments

Comments
 (0)