Skip to content

v3.2.1

Choose a tag to compare

@doracawl doracawl released this 28 Sep 11:50
· 76 commits to master since this release

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 for and 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 a while inside a
    for could return from the function early.
  • A math call 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.