summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2013-05-26 01:53:24 +0200
committerAraq <rumpf_a@web.de>2013-05-26 01:53:24 +0200
commitc0931394947c4c325ae6a833eb6b0c9b410d29e5 (patch)
tree73ba562525b0c97bd2a3a5702c33585b2a810c22 /compiler
parent0715496d72401697cb8de2adaec18be30e78bdaf (diff)
downloadNim-c0931394947c4c325ae6a833eb6b0c9b410d29e5.tar.gz
fixes #411
Diffstat (limited to 'compiler')
-rw-r--r--compiler/ccgexprs.nim20
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)