Repository navigation
v3.2.1
No breaking change. A bug-fix release.
Compiler
An assignment b = a right after a statement that assigned a (for
example a = a + 1) dropped that assignment: a kept its old value. Every
dialect was affected, with or without the JIT.
Trace JIT
- A trace ending at a call left a table it built unallocated
(s[#s + 1] = {f()}), and the process could crash. - A trace recorded from a loop nested in a
forand closed at the outer
loop's back edge skipped the code before the inner loop. - A side trace recorded where another side trace left was wired to the
parent trace's exit with the same number, so leaving awhileinside a
forcould return from the function early. - A
mathcall checked once before the loop made debug builds panic.
Memory
The machine code the JIT compiled for a Vm was never freed. It is now
freed when the Vm drops (on Windows Cranelift still keeps the pages).
Testing
A new fuzz target, fuzz_jit_diff, runs generated hot loops with the JIT
on and off in all five dialects and compares the output; it found the bugs
above and now runs weekly.
See CHANGELOG.md.