summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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()