* fixes #8202

* make tests green
This commit is contained in:
Andreas Rumpf 2019-03-23 14:49:21 +01:00 • committed by GitHub
commit 0cc6e12425
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

View file

@ -534,7 +534,15 @@ proc initLocExpr(p: BProc, e: PNode, result: var TLoc) =
proc initLocExprSingleUse(p: BProc, e: PNode, result: var TLoc) =
initLoc(result, locNone, e, OnUnknown)
result.flags.incl lfSingleUse
if e.kind in nkCallKinds and (e[0].kind != nkSym or e[0].sym.magic == mNone):
# We cannot check for tfNoSideEffect here because of mutable parameters.
discard "bug #8202; enforce evaluation order for nested calls for C++ too"
# We may need to consider that 'f(g())' cannot be rewritten to 'tmp = g(); f(tmp)'
# if 'tmp' lacks a move/assignment operator.
if e[0].kind == nkSym and sfConstructor in e[0].sym.flags:
result.flags.incl lfSingleUse
else:
result.flags.incl lfSingleUse
expr(p, e, result)
include ccgcalls, "ccgstmts.nim"