Summary
Windows CI still avoids the normal optimized and cross-target qir_to_qis path because the LLVM 21 Windows lane can hard-crash during optimized codegen / target-machine work.
Current workaround
Windows validation is intentionally reduced to conservative host-target smoke coverage:
opt_level=0
- host-target conversion (
target="native" in the Windows smoke test)
- conversion + bitcode parse smoke coverage instead of exact snapshot matching
- no equivalent optimized
aarch64 conversion coverage like Linux and macOS
This is a stability workaround, not the desired steady state.
Evidence
Historical repro from earlier CI rollout:
- CI run: 23202614680
- job: 67428980077
- failure: process abort with
0xc0000005 (Invalid access to memory location)
Recent local Windows Arm64 repros still show that the optimized path is unstable:
cargo run -- tests/data/base.ll -> 0xc0000005
cargo run -- -O1 -t native tests/data/base.ll -> 0xc0000005
By contrast, the conservative workaround remains stable:
cargo test test_snapshot_conversion_windows_smoke -- --nocapture passes
cargo test -q passes on the Windows O0 path
We also observed earlier that, on Windows, even touching the module triple in the opt_level=0 path could reproduce similar crashes, so src/opt.rs intentionally keeps the Windows O0 path as a no-op after target validation.
Goal
Restore at least one stable Windows test that exercises the real optimized conversion path, ideally matching the non-Windows qir_to_qis(..., opt_level=2, target="aarch64") flow.
Good next steps
- identify the smallest optimized Windows repro that still crashes
- determine whether the fault is target-machine creation, triple/data-layout mutation, pass execution, or teardown
- add a stable Windows optimized regression test if a narrower safe path exists
- remove the platform split in
src/convert.rs once Windows can reliably run the optimized path
Done when
- Windows can run at least one stable end-to-end conversion test on the real optimized path
- the host-target
O0 workaround is no longer required for CI confidence
- the limitation note can be removed from CI and code comments
Summary
Windows CI still avoids the normal optimized and cross-target
qir_to_qispath because the LLVM 21 Windows lane can hard-crash during optimized codegen / target-machine work.Current workaround
Windows validation is intentionally reduced to conservative host-target smoke coverage:
opt_level=0target="native"in the Windows smoke test)aarch64conversion coverage like Linux and macOSThis is a stability workaround, not the desired steady state.
Evidence
Historical repro from earlier CI rollout:
0xc0000005(Invalid access to memory location)Recent local Windows Arm64 repros still show that the optimized path is unstable:
cargo run -- tests/data/base.ll->0xc0000005cargo run -- -O1 -t native tests/data/base.ll->0xc0000005By contrast, the conservative workaround remains stable:
cargo test test_snapshot_conversion_windows_smoke -- --nocapturepassescargo test -qpasses on the WindowsO0pathWe also observed earlier that, on Windows, even touching the module triple in the
opt_level=0path could reproduce similar crashes, sosrc/opt.rsintentionally keeps the WindowsO0path as a no-op after target validation.Goal
Restore at least one stable Windows test that exercises the real optimized conversion path, ideally matching the non-Windows
qir_to_qis(..., opt_level=2, target="aarch64")flow.Good next steps
src/convert.rsonce Windows can reliably run the optimized pathDone when
O0workaround is no longer required for CI confidence