Conversation
9ba1e90 to
e79eba5
Compare
65b7d19 to
5ae575d
Compare
e79eba5 to
ecd2e88
Compare
5ae575d to
671e903
Compare
671e903 to
622addb
Compare
f3ed85d to
7ccc420
Compare
60f1d3b to
41bde95
Compare
5f659cb to
03abd35
Compare
|
4685f7d validation update: all five profile sentinels, browser acceptance, and the standard-library reference workflow passed. Full test/ and GOROOT shards are still running. The two completed reference failures are test/go/memprofile: the assertion incorrectly applied LLGo’s pointer-width-scaled block size to official Go wasm, whose tiny allocator still uses 16-byte blocks. Local e305bad restricts that implementation-specific assertion to runtime.Compiler == "llgo"; official Go GJS/GWASI, native Go, and the LLGo GJS regression all pass. Holding this small test-only fix for the next batch while the current matrix collects other evidence. The new Wasm size benchmark completed: versus 03abd35, cprintf is approximately +0.6 KiB and fmtprintf +2 KiB; the total R4 size target is not yet met. Compile-phase diagnostics for the two known resource failures are isolated in fork run34260202320 (one job, unchanged per-case limits), currently waiting for a runner. SetGCPercent/GOGC collector integration is being validated separately; no claim of full R4 completion or full-matrix success. |
|
Moving the consolidated R4 contribution and further CI to xgo-dev/llgo, as requested. The active fork acceptance run has been cancelled; completed evidence and discussion remain here. The fork branch is retained, and the replacement upstream PR will be linked shortly. This is a migration, not a claim of completed R4 acceptance. |
|
Continuing R4 CI in cpunion/llgo per the updated runner-capacity decision. No replacement R4 PR was created upstream. The branch now includes e305bad, which fixes the official-Go wasm tiny-allocation assertion; focused official-Go GJS/GWASI, native Go, and LLGo GJS checks pass. The previous full acceptance run was cancelled during the attempted migration and is not claimed as completed. A fresh fork CI run will validate this head; pending GC-pacing and caller-stack experiments are not included yet. |
js.FuncOf queued every callback and ran it later on a new goroutine. syscall.fsCall waits on a buffered channel after fs.write, so that path parked, fiber-swapped, and aborted with Asyncify unreachable. Keep host events such as setTimeout queued, but run the callback on the current goroutine when Go is still inside Value.Call/Invoke.
Copy targets/wasm_fs.js next to emcc glue for .html, .js, and .mjs executables, and insert the script tag into generated HTML so syscall/fs_js.go has a browser fs/process/path host. Map Emscripten errno 13 to ECONNABORTED. Skip a same-path copy and close the source before replace so Windows rebuilds do not fail with Access is denied. Do not os.Remove a directory after a failed rename; that replaced occupied/ with a regular file and broke TestWindowsLinkObjFilesExactOutput/copy_error. Skip the 0555 CreateTemp probe on Windows, where directory mode bits do not block new files.
a4afd6c to
05e962d
Compare
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 |
|
R1-R3 are now merged and the profile model has been simplified. This oversized R4 aggregate is superseded by W1 in #246. The branch is retained as a migration source; only re-audited necessary changes will be ported. |
Scope
Consolidated R4 development PR for xgo-dev#2152. R4 raises WebAssembly completeness in two high-priority areas:
llgo run,build, andtesttoolchain completeness.js/wasmandwasip1/wasmprofiles, standard-library behavior, and executabletest//GOROOT acceptance.The required LLGo profiles are EC32, EC64, WC32, GJS, and GWASI. Official-Go GJS/GWASI rows are used as reference executions. Multi-worker/parallel goroutines, WasmGC, exception handling, and JSPI/stack switching remain later work and are not claimed by this PR.
Design references: parent proposal xgo-dev/llgo#2152, typed reflection bridge sub-proposal #2556, and Emscripten host sub-proposal #2557.
Current R4 head:
05e962ddf, rebased on upstream main309f75c5e(LLVM 22).What this adds
Toolchain and profile completeness
GOOS=js GOARCH=wasmand single-workerGOOS=wasip1 GOARCH=wasmbuilds select LLGo's linear-memory collector by default. Unsupported raw WASI threads are rejected instead of silently selectingnogc.syscall/jsimplementation; LLGo supplies the host import/event bridge and follows the samewasm_exec.jscontract.go_wasip1_wasm_exec. LLGo GWASI/WC32 run through Wasmtime with matching filesystem, working-directory, and feature configuration.run,build, andtestare exercised through real profile acceptance, not compile-only probes.Runtime and standard-library completeness
issue14646,issue5856, andissue22662cases.net.DNSErrorfor optional localhost records rather than skipping the supported test.Linear GC correctness
uintptr, lets another goroutine perform two collections, then verifies the object survives. This specifically covers WASI's heap-allocated logical main stack..rodatais not scanned. The marker adds only one pointer-sized boundary object and preserves LTO/GlobalDCE.Acceptance policy
test/cases run in two shards per profile. Runnable GOROOT directives run in four shards per profile, with retained logs and JSON reports.notapplicableclassifications are distinct from expected failures, failures, incomplete execution, source exclusion, and cases that never ran. Top-level test skips fail acceptance; only intentional skipped subtests inside a passing test are accepted.test/cgoremains explicitly outside GOARCH=wasm because Go's cgo frontend rejects that architecture, even for LLGo's named C ABI targets. In contrast, every LLGo Wasm profile now executes the compatibleruntime/cgo.Handletests; only official-Go reference profiles exclude them.genmeth1.goSSA assertion is tracked separately in go/ssa: Go 1.27 genmeth1.go panics while instantiating generic method expressions xgo-dev/llgo#2526 with one exact xfail entry.llvm-nmare errors, not silent skips.Current validation
test/and GOROOT matrices are running with no observed failure.309f75c5e,cprintfadds 35,526 bytes on EC32 and 37,096 bytes on EC64;fmtprintfshrinks by 136–175 KiB on the C-ABI profiles, while GJS/GWASI include the larger Go-compatible runtime and host surface.Local post-rebase checks pass:
Remaining merge gates
issue30116*timeout cases.cprintf,println, andfmtprintfsizes against the rebased main baseline; investigate any material increase.