* fixes #8202

* make tests green
This commit is contained in:
Andreas Rumpf
2019-03-23 14:49:21 +01:00
committed by GitHub
parent f8146dfd84
commit 0cc6e12425
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"

18
tests/cpp/tevalorder.nim Normal file
View File

@@ -0,0 +1,18 @@
discard """
output: '''0
1
2'''
target: "cpp"
"""
# bug #8202
var current: int = 0
proc gen(): string = current.inc; $(current - 1)
proc allOut(a, b, c: string) =
echo a
echo b
echo c
allOut(gen(), gen(), gen())