diff --git a/compiler/vm.nim b/compiler/vm.nim index ae8cc25af6927..52faeaf381502 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 57dc526c550d8..a9a30568df805 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()