summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-09-03 22:00:23 +0200
committerAraq <rumpf_a@web.de>2014-09-03 22:00:23 +0200
commit4c870fc29374b89b1b61f0437c69166b7c400dfe (patch)
tree0f32e1e3268854c78fdf87c306fbdbfbb8f64cd6
parentc7116cc121b4e6344f3daf5f6c2823a4e7e51371 (diff)
downloadNim-4c870fc29374b89b1b61f0437c69166b7c400dfe.tar.gz
fixes recently introduced regression
-rw-r--r--compiler/vmgen.nim5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim
index 718c07243..d7af7c2e2 100644
--- a/compiler/vmgen.nim
+++ b/compiler/vmgen.nim
@@ -1057,7 +1057,7 @@ proc genAddrDeref(c: PCtx; n: PNode; dest: var TDest; opc: TOpcode;
   # nkAddr we must not use 'unneededIndirection', but for deref we use it.
   if not isAddr and unneededIndirection(n.sons[0]):
     gen(c, n.sons[0], dest, newflags)
-  elif isGlobal(n.sons[0]):
+  elif isAddr and isGlobal(n.sons[0]):
     gen(c, n.sons[0], dest, flags+{gfAddrOf})
   else:
     let tmp = c.genx(n.sons[0], newflags)
@@ -1137,6 +1137,9 @@ proc isTemp(c: PCtx; dest: TDest): bool =
 template needsAdditionalCopy(n): expr =
   not c.isTemp(dest) and not fitsRegister(n.typ)
 
+proc skipDeref(n: PNode): PNode =
+  result = if n.kind in {nkDerefExpr, nkHiddenDeref}: n.sons[0] else n
+
 proc preventFalseAlias(c: PCtx; n: PNode; opc: TOpcode;
                        dest, idx, value: TRegister) =
   # opcLdObj et al really means "load address". We sometimes have to create a