Skip to content

Commit

Permalink
fix term rewriting with sideeffect (#19410)
Browse files Browse the repository at this point in the history
* fix term rewriting with sideeffect

fix #6217

* add tests

* Update tests/template/template_various.nim
  • Loading branch information
ringabout committed Jan 19, 2022
1 parent 23c4bbe commit 5d34e81
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
7 changes: 5 additions & 2 deletions compiler/parampatterns.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions tests/template/t6217.nim
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit 5d34e81

Please sign in to comment.