diff options
author | Araq <rumpf_a@web.de> | 2014-09-03 22:00:23 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-09-03 22:00:23 +0200 |
commit | 4c870fc29374b89b1b61f0437c69166b7c400dfe (patch) | |
tree | 0f32e1e3268854c78fdf87c306fbdbfbb8f64cd6 | |
parent | c7116cc121b4e6344f3daf5f6c2823a4e7e51371 (diff) | |
download | Nim-4c870fc29374b89b1b61f0437c69166b7c400dfe.tar.gz |
fixes recently introduced regression
-rw-r--r-- | compiler/vmgen.nim | 5 |
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 |