don't use a temp for addr [backport: 1.6] (#19503)

* don't use a temp for addr

fix #19497

* Update compiler/ccgcalls.nim

Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>

* add a test

Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
This commit is contained in:
flywind
2022-02-08 15:34:44 +08:00
committed by GitHub
parent 801c0f0369
commit 27e548140b
2 changed files with 24 additions and 2 deletions

View File

@@ -376,8 +376,8 @@ proc genParams(p: BProc, ri: PNode, typ: PType): Rope =
if not needTmp[i - 1]:
needTmp[i - 1] = potentialAlias(n, potentialWrites)
getPotentialWrites(ri[i], false, potentialWrites)
if ri[i].kind == nkHiddenAddr:
# Optimization: don't use a temp, if we would only take the adress anyway
if ri[i].kind in {nkHiddenAddr, nkAddr}:
# Optimization: don't use a temp, if we would only take the address anyway
needTmp[i - 1] = false
for i in 1..<ri.len:

22
tests/arc/tarc_orc.nim Normal file
View File

@@ -0,0 +1,22 @@
discard """
matrix: "--mm:arc; --mm:orc"
"""
block:
type
PublicKey = array[32, uint8]
PrivateKey = array[64, uint8]
proc ed25519_create_keypair(publicKey: ptr PublicKey; privateKey: ptr PrivateKey) =
publicKey[][0] = uint8(88)
type
KeyPair = object
public: PublicKey
private: PrivateKey
proc initKeyPair(): KeyPair =
ed25519_create_keypair(result.public.addr, result.private.addr)
let keys = initKeyPair()
doAssert keys.public[0] == 88