Skip to content

v0.33.1 — call_indirect bounds+type guards, i64 globals (#642/#643)

Choose a tag to compare

@avrabe avrabe released this 08 Jul 14:08
· 547 commits to main since this release
5f8c24c

Two gale-filed silent miscompiles fixed same-day.

Fixed

  • call_indirect emitted no bounds-check and no type-check (#642, PR #646, both ISAs). OOB/wrong-typed indices performed an uncontrolled indirect branch — the differential's decoy function actually got called on ≤v0.33.0. Now: runtime bounds guard (CMP idx, #table_size; BLO; UDF — sound immediate: table.grow/set loud-skip so the table is provably fixed-size) + compile-time closed-world type verification (structural signature equality over every slot; anything unverifiable → loud decline). New CI oracle job.
  • i64 global.set/get truncated to 32 bits (#643, PR #645). Width-aware slot layout (i32-only modules bit-identical by construction), pair lowering on the direct path, honest decline routing elsewhere, i32-after-i64 layout-shift canary in the differential. RV32 already sound.

Platform binaries attach ~10 min after the tag.

🤖 Generated with Claude Code