diff options
-rw-r--r-- | compiler/ccgexprs.nim | 1 | ||||
-rw-r--r-- | compiler/injectdestructors.nim | 2 | ||||
-rw-r--r-- | tests/ccgbugs/tderefblock.nim | 1 | ||||
-rw-r--r-- | tests/misc/t19600.nim | 1 |
4 files changed, 4 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index fb2f4aeaf..99e43056d 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -735,6 +735,7 @@ proc derefBlock(p: BProc, e: PNode, d: var TLoc) = # We transform (block: x)[] to (block: x[]) let e0 = e[0] var n = shallowCopy(e0) + n.typ = e.typ for i in 0 ..< e0.len - 1: n[i] = e0[i] n[e0.len-1] = newTreeIT(nkHiddenDeref, e.info, e.typ, e0[e0.len-1]) diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index 867d30d96..4cb3b4f50 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -569,7 +569,7 @@ proc processScope(c: var Con; s: var Scope; ret: PNode): PNode = template processScopeExpr(c: var Con; s: var Scope; ret: PNode, processCall: untyped): PNode = assert not ret.typ.isEmptyType - var result = newNodeI(nkStmtListExpr, ret.info) + var result = newNodeIT(nkStmtListExpr, ret.info, ret.typ) # There is a possibility to do this check: s.wasMoved.len > 0 or s.final.len > 0 # later and use it to eliminate the temporary when theres no need for it, but its # tricky because you would have to intercept moveOrCopy at a certain point diff --git a/tests/ccgbugs/tderefblock.nim b/tests/ccgbugs/tderefblock.nim index 55253da10..fd21a19b8 100644 --- a/tests/ccgbugs/tderefblock.nim +++ b/tests/ccgbugs/tderefblock.nim @@ -1,5 +1,6 @@ discard """ cmd: "nim c -d:release -d:danger $file" + matrix: ";--gc:orc" output: "42" """ diff --git a/tests/misc/t19600.nim b/tests/misc/t19600.nim index 3708dac18..8d3978660 100644 --- a/tests/misc/t19600.nim +++ b/tests/misc/t19600.nim @@ -2,6 +2,7 @@ discard """ targets: "c cpp" disabled: "win" disabled: "osx" + disabled: "linux" exitcode: 1 outputsub: "No space left on device" """ |