Repository navigation
Conversation
There was a problem hiding this comment.
Reviewed the full diff with four review passes (quality, performance, security, documentation). This is a tightly scoped, well-executed PR; all three fixes are minimal and correct, each backed by a targeted regression test.
Verified correct:
- AArch64 ELF bridge (
libffi.c): the naked trampolineldr x16,[x18]; ldr x15,[x18,#8]; br x16correctly moves libffi's X18-delivered static chain into LLVM's X15nestregister before a tail branch. The stack-allocatedllgo_ffi_call_contextis live for the synchronousffi_call_gocall; X16 (IP0) is corruptible scratch and X15 is the intended nest reg, so argument registers, LR, and SP pass through untouched. The X18-source assumption holds on the guarded ELF targets (not Apple/Android/Windows), matching libffi's own Go-closure ABI. The#errorguard still enforces exactly one final-hop path. - Caller cache invalidation (
caller.go): clearingframe.capturedbefore the field overwrites is correct, and the added|| frame.File != fileis exactly what fixes the line-directive-with-same-line case. The compare is short-circuited behindframe.Line == lineand runs at most once per call, so the hot-path cost is a bounded, allocation-free constant factor — an acceptable trade for the correctness fix. - WASI PATH injection (
wasm_profile_test.go):args[1:]correctly drops only the leading"run", the[]string{"run", "--env=PATH="+path}literal has len==cap so the subsequent append reallocates (no aliasing), and the unit test's expected args confirm the ordering. Values go throughexec.Commandwith no shell — no host injection.
Only minor comment/wording nits below; nothing blocking.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
LLGo baseline benchmarks
Program measurements
Core language and compiler benchmarks
Timer runtime benchmarks
Compared with |
LLGo WebAssembly build benchmarks
WebAssembly output sizes
LLGo WebAssembly build measurements
Compared with |
visualfc
left a comment
There was a problem hiding this comment.
Approve. The ARM64 nest bridge, GNU unwind X30 register, Caller/gopanic frames, entry-slack gate, address waits, and occupied-metadata skip all look correct, and the new regressions pin those contracts.
Two P2 follow-ups below. Neither blocks merge.
… sites Reuse resolved Caller PCs before shared-library entry-anchor guesses. Keep the full Intel ABI stress case with a bounded hosted-runner budget.
a9bfaf0 to
53c1207
Compare
Fix incorrect results, crashes, and excessive allocation exposed by native and Wasm compatibility tests.
Add executable regressions to existing native/Wasm jobs, including callback exit statuses, worker panic/recover with and without GC, caller lines, and allocation counts. Fix WASI GOROOT filesystem preopens and dependency mirror setup; retain complete stress tests with measured, bounded resource budgets.
Validation: compiler tests pass; the original JS timer/callback case and WASI concurrent panic case each passed 50 runs; worker startup/recovery passed 10 runs in each GC mode; 54 JS host-boundary cases passed across GoJS, Emscripten32, and Emscripten64; optimized Node/Chrome acceptance passed, including browser filesystem initialization. Full external qualification runs in llgo-compat/ci #37.