summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2019-11-20 19:08:16 +0100
committerGitHub <noreply@github.com>2019-11-20 19:08:16 +0100
commit78e02d174d0269ac9c0c6f7568405471883a78fa (patch)
tree090cf47bc367184a8295772de9fb22051d9f6d15
parentc98e0e22ad7bf7772eb0ef3f50b7f67f33ec8905 (diff)
downloadNim-78e02d174d0269ac9c0c6f7568405471883a78fa.tar.gz
fixes #12670 [backport] (#12693)
-rw-r--r--compiler/vm.nim3
-rw-r--r--tests/vm/tmisc_vm.nim20
2 files changed, 22 insertions, 1 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim
index ae8cc25af..52faeaf38 100644
--- a/compiler/vm.nim
+++ b/compiler/vm.nim
@@ -471,7 +471,8 @@ template handleJmpBack() {.dirty.} =
   dec(c.loopIterations)
 
 proc recSetFlagIsRef(arg: PNode) =
-  arg.flags.incl(nfIsRef)
+  if arg.kind notin {nkStrLit..nkTripleStrLit}:
+    arg.flags.incl(nfIsRef)
   for i in 0 ..< arg.safeLen:
     arg.sons[i].recSetFlagIsRef
 
diff --git a/tests/vm/tmisc_vm.nim b/tests/vm/tmisc_vm.nim
index 57dc526c5..a9a30568d 100644
--- a/tests/vm/tmisc_vm.nim
+++ b/tests/vm/tmisc_vm.nim
@@ -12,6 +12,9 @@ main:end
 (width: 0, height: 0, path: "")
 @[(width: 0, height: 0, path: ""), (width: 0, height: 0, path: "")]
 Done!
+foo4
+foo4
+foo4
 '''
 """
 
@@ -214,3 +217,20 @@ static:
   someTransform(state)
 
   doAssert state[1] == 13087528040916209671'u64
+
+import macros
+# bug #12670
+
+macro fooImpl(arg: untyped) =
+  result = quote do:
+    `arg`
+
+proc foo(): string {.compileTime.} =
+  fooImpl:
+    result = "foo"
+    result.addInt 4
+
+static:
+  echo foo()
+  echo foo()
+  echo foo()