Repository navigation
OctoGo v0.56.2 (preview)
Pre-releaseOctoGo v0.56.2 (preview) - prebuilt binaries for linux (amd64, arm64), windows/amd64 and macOS (arm64, amd64). Unzip and put ogo on PATH; the C backend and the board loader are embedded, so there is nothing else to install. ogo help starts you off.
A correction to v0.56.1, released a few hours earlier: its notes say a 64-bit value handed to a function value arrives right. That fix was partial. v0.56.1 bound the operations and constants the fault was found with, and a widening conversion or a call's result handed there still arrived wrong, in silence. This release finishes that fix, and fixes an older silent wrong answer the fuzzer found on the way. Upgrade if a program passes int64 or uint64 values to callbacks or calls with 64-bit constants. 3 commits; every entry is in CHANGELOG.md.
Fixed
- Wrong answers, all of them silent, measured on a P2-EDGE:
- A widening conversion or a call's result handed to a function value as a 64-bit argument arrived with garbage in its high word:
cv(int64(i32))printed 1623844961 for 9, andcv(id(3))andu(uint64(x))the same, in v0.56.1 and before. Every 64-bit argument of a call through a function value is bound to a variable first now, but one that is a variable already. - A 64-bit constant beside an argument that does something was cut to its low word:
take(1<<40, side())printed 1 for Go's 1099511627777, through a method, an interface and a deferred call too, on the host as on the board, in every release.
- A widening conversion or a call's result handed to a function value as a 64-bit argument arrived with garbage in its high word:
- A function value's 64-bit result reads in an operation,
w(x) + 1,w(x) >> 32,u(x) % 7, which the C compiler refused.
Toolchain and verification
ogo smithcalls through function values held in package variables, the form a checked build calls through its nil check, hands them a single 64-bit argument of every shape, and reads their 64-bit results in operations. Built by v0.56.1, every seed of the first seven carrying the new shapes fails on the board.- Under this release's compiler the host suite passes, and so does
make boardon a P2-EDGE: 1012 tests, the 971 run cases among them; fuzzer seeds 1-2000 pass on the host, and seeds 1-200 on the board but 13 that outgrow a cog's registers. p2-11, the PDP-11/40 emulator written in OctoGo, builds byte for byte as v0.56.0 built it, and its 72 tests pass on the board.
The five zips are cross-compiled from one host; see SHA256SUMS. As before, only the linux/amd64 binary has been run before publishing.