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
|
||||
if sfSideEffect in s.flags:
|
||||
return seSideEffect
|
||||
# assume no side effect:
|
||||
result = seNoSideEffect
|
||||
elif tfNoSideEffect in op.typ.flags:
|
||||
result = seNoSideEffect
|
||||
else:
|
||||
# assume side effect:
|
||||
result = seSideEffect
|
||||
elif tfNoSideEffect in op.typ.flags:
|
||||
# indirect call without side effects:
|
||||
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