diff options
-rw-r--r-- | compiler/vm.nim | 4 | ||||
-rw-r--r-- | tests/vm/t20746.nim | 13 |
2 files changed, 16 insertions, 1 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index 1a41ce8a1..99d8c4d41 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -32,6 +32,8 @@ const when hasFFI: import evalffi +when not defined(nimHasCursor): + {.pragma: cursor.} proc stackTraceAux(c: PCtx; x: PStackFrame; pc: int; recursionLimit=100) = if x != nil: @@ -787,7 +789,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = of opcLdStrIdx: decodeBC(rkInt) let idx = regs[rc].intVal.int - let s = regs[rb].node.strVal + let s {.cursor.} = regs[rb].node.strVal if idx <% s.len: regs[ra].intVal = s[idx].ord else: diff --git a/tests/vm/t20746.nim b/tests/vm/t20746.nim new file mode 100644 index 000000000..bfad269ef --- /dev/null +++ b/tests/vm/t20746.nim @@ -0,0 +1,13 @@ +discard """ + timeout: 10 + joinable: false + output: "fine" +""" + +func addString(): string = + let x = newString(1000000) + for i in 0..<1000000: + discard x[i] + +const translationTable = addString() +echo "fine" |