From c0db1705dcd6e797bcb09bcf30d25a4c8140712e Mon Sep 17 00:00:00 2001 From: Araq Date: Wed, 3 Jul 2019 12:53:56 +0200 Subject: [PATCH] fixes #11510 --- compiler/injectdestructors.nim | 10 +++++++++- .../{t6434.nim => tmisc_destructors.nim} | 18 ++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) rename tests/destructor/{t6434.nim => tmisc_destructors.nim} (64%) diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index ef65e788f4..0ea04c6382 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -150,6 +150,7 @@ type graph: ModuleGraph emptyNode: PNode otherRead: PNode + inLoop: int uninit: IntSet # set of uninit'ed vars uninitComputed: bool @@ -750,7 +751,7 @@ proc p(n: PNode; c: var Con): PNode = for i in 0.. 0: + ri = genDefaultCall(v.typ, c, v.info) if ri.kind != nkEmpty: let r = moveOrCopy(v, ri, c) result.add r @@ -826,6 +829,11 @@ proc p(n: PNode; c: var Con): PNode = else: result = copyNode(n) recurse(n, result) + of nkForStmt, nkParForStmt, nkWhileStmt: + inc c.inLoop + result = copyNode(n) + recurse(n, result) + dec c.inLoop else: result = copyNode(n) recurse(n, result) diff --git a/tests/destructor/t6434.nim b/tests/destructor/tmisc_destructors.nim similarity index 64% rename from tests/destructor/t6434.nim rename to tests/destructor/tmisc_destructors.nim index 4e78d04698..3549383925 100644 --- a/tests/destructor/t6434.nim +++ b/tests/destructor/tmisc_destructors.nim @@ -1,9 +1,13 @@ discard """ - exitcode: 0 - output: "" + output: '''@[0] +@[1] +@[2] +@[3]''' joinable: false """ +# bug #6434 + type Foo* = object boo: int @@ -25,3 +29,13 @@ var (a, b, _) = test() doAssert assign_counter == 0 doAssert sink_counter == 12 # + 3 because of the conservative tuple unpacking transformation + +# bug #11510 +proc main = + for i in 0 ..< 4: + var buffer: seq[int] # = @[] # uncomment to make it work + # var buffer: string # also this is broken + buffer.add i + echo buffer + +main()