summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorflywind <xzsflywind@gmail.com>2022-01-19 19:37:30 +0800
committerGitHub <noreply@github.com>2022-01-19 12:37:30 +0100
commit5d34e81f2363e1de97916ac60b028b9a8b287a4b (patch)
tree12424f719874f262a415263b859963fee30f55b8 /compiler
parent23c4bbedcbf12a7ab87baefe589b472837d89dbf (diff)
downloadNim-5d34e81f2363e1de97916ac60b028b9a8b287a4b.tar.gz
fix term rewriting with sideeffect (#19410)
* fix term rewriting with sideeffect

fix #6217

* add tests

* Update tests/template/template_various.nim
Diffstat (limited to 'compiler')
-rw-r--r--compiler/parampatterns.nim7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/parampatterns.nim b/compiler/parampatterns.nim
index eb99004ab..bfbc72675 100644
--- a/compiler/parampatterns.nim
+++ b/compiler/parampatterns.nim
@@ -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