fix term rewriting with sideeffect (#19410)
* fix term rewriting with sideeffect fix #6217 * add tests * Update tests/template/template_various.nim
This commit is contained in:
parent
23c4bbedcb
commit
5d34e81f23
2 changed files with 24 additions and 2 deletions
|
|
@ -143,8 +143,11 @@ proc checkForSideEffects*(n: PNode): TSideEffectAnalysis =
|
||||||
let s = op.sym
|
let s = op.sym
|
||||||
if sfSideEffect in s.flags:
|
if sfSideEffect in s.flags:
|
||||||
return seSideEffect
|
return seSideEffect
|
||||||
# assume no side effect:
|
elif tfNoSideEffect in op.typ.flags:
|
||||||
result = seNoSideEffect
|
result = seNoSideEffect
|
||||||
|
else:
|
||||||
|
# assume side effect:
|
||||||
|
result = seSideEffect
|
||||||
elif tfNoSideEffect in op.typ.flags:
|
elif tfNoSideEffect in op.typ.flags:
|
||||||
# indirect call without side effects:
|
# indirect call without side effects:
|
||||||
result = seNoSideEffect
|
result = seNoSideEffect
|
||||||
|
|
|
||||||
19
tests/template/t6217.nim
Normal file
19
tests/template/t6217.nim
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
discard """
|
||||||
|
output: '''
|
||||||
|
start
|
||||||
|
side effect!
|
||||||
|
end
|
||||||
|
'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #6217
|
||||||
|
|
||||||
|
template optMul{`*`(a, 2)}(a: int{noSideEffect}): int = a+a
|
||||||
|
|
||||||
|
proc f(): int =
|
||||||
|
echo "side effect!"
|
||||||
|
result = 55
|
||||||
|
|
||||||
|
echo "start"
|
||||||
|
doAssert f() * 2 == 110
|
||||||
|
echo "end"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue