diff options
author | Araq <rumpf_a@web.de> | 2013-05-26 01:53:24 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2013-05-26 01:53:24 +0200 |
commit | c0931394947c4c325ae6a833eb6b0c9b410d29e5 (patch) | |
tree | 73ba562525b0c97bd2a3a5702c33585b2a810c22 /compiler | |
parent | 0715496d72401697cb8de2adaec18be30e78bdaf (diff) | |
download | Nim-c0931394947c4c325ae6a833eb6b0c9b410d29e5.tar.gz |
fixes #411
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgexprs.nim | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index a5c4a8de7..bb1035ab6 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -1934,14 +1934,18 @@ proc expr(p: BProc, n: PNode, d: var TLoc) = of nkProcDef, nkMethodDef, nkConverterDef: if (n.sons[genericParamsPos].kind == nkEmpty): var prc = n.sons[namePos].sym - 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: - genProc(p.module, prc) + # 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.owner.kind == skModule: + 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: + genProc(p.module, prc) of nkParForStmt: genParForStmt(p, n) of nkState: genState(p, n) of nkGotoState: genGotoState(p, n) |