mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 21:40:32 +00:00
Fixes #1642.
This commit is contained in:
@@ -2095,14 +2095,18 @@ proc expr(p: BProc, n: PNode, d: var TLoc) =
|
||||
# due to a bug/limitation in the lambda lifting, unused inner procs
|
||||
# are not transformed correctly. We work around this issue (#411) here
|
||||
# by ensuring it's no inner proc (owner is a module):
|
||||
if prc.skipGenericOwner.kind == skModule:
|
||||
#
|
||||
# We also check whether the proc captures its environment here to
|
||||
# prevent issue #1642.
|
||||
if prc.skipGenericOwner.kind == skModule and
|
||||
tfCapturesEnv in prc.typ.flags:
|
||||
if (optDeadCodeElim notin gGlobalOptions and
|
||||
sfDeadCodeElim notin getModule(prc).flags) or
|
||||
({sfExportc, sfCompilerProc} * prc.flags == {sfExportc}) or
|
||||
(sfExportc in prc.flags and lfExportLib in prc.loc.flags) or
|
||||
(prc.kind == skMethod):
|
||||
# we have not only the header:
|
||||
if prc.getBody.kind != nkEmpty or lfDynamicLib in prc.loc.flags:
|
||||
if prc.getBody.kind != nkEmpty or lfDynamicLib in prc.loc.flags:
|
||||
genProc(p.module, prc)
|
||||
of nkParForStmt: genParForStmt(p, n)
|
||||
of nkState: genState(p, n)
|
||||
|
||||
6
tests/closure/tissue1642.nim
Normal file
6
tests/closure/tissue1642.nim
Normal file
@@ -0,0 +1,6 @@
|
||||
discard """
|
||||
file: "tissue1642.nim"
|
||||
"""
|
||||
block:
|
||||
var i = 0
|
||||
proc p() = inc(i)
|
||||
Reference in New Issue
Block a user