Cold-cache reproduction (any tree, main @ 21a3d00):
rm -rf target/perry-auto-* && rm -rf /private/tmp/node_modules/.cache/perry
target/release/perry test-files/test_gap_zlib_4917_level.ts -o /tmp/zl
Link fails with:
Undefined symbols for architecture arm64:
"__RNvCs4SDFJOLwvtW_7___rustc17___rust_drop_panic", referenced from:
panic_unwind ... in __libperry_ext_zlib.a_nosharedeps.lib_trimmed.lib
"_js_zlib_deflate_raw_sync", referenced from: _main
The auto-optimize pipeline pairs the ext-zlib provider archive with an auto-opt stdlib rebuild that lacks the zlib native symbols, and the provider archive carries panic_unwind runtime objects the panic=abort link cannot satisfy. PERRY_NO_AUTO_OPTIMIZE=1 compiles and links the same test fine.
Why this went unnoticed: the compile-object cache under /private/tmp/node_modules/.cache/perry held pre-breakage objects with the old routing baked in; any machine with a warm cache (dev boxes, CI with restored caches) sails past the broken codegen path. A reboot (cleared /tmp) exposed it — six gap tests now compile_fail cold: test_gap_zlib_4917_level, test_gap_zlib_3285_params, test_gap_zlib_fs_assert_2935_2752_2971, test_gap_3662_node_argvalidation, test_gap_constants_tail_3683plus, test_gap_handle_band_object_ops.
Related fragility worth fixing while in here: the compile-object cache living under /private/tmp makes every reboot a cold start and couples cache identity to a world-writable path.
Cold-cache reproduction (any tree, main @ 21a3d00):
Link fails with:
The auto-optimize pipeline pairs the ext-zlib provider archive with an auto-opt stdlib rebuild that lacks the zlib native symbols, and the provider archive carries panic_unwind runtime objects the panic=abort link cannot satisfy.
PERRY_NO_AUTO_OPTIMIZE=1compiles and links the same test fine.Why this went unnoticed: the compile-object cache under
/private/tmp/node_modules/.cache/perryheld pre-breakage objects with the old routing baked in; any machine with a warm cache (dev boxes, CI with restored caches) sails past the broken codegen path. A reboot (cleared /tmp) exposed it — six gap tests now compile_fail cold: test_gap_zlib_4917_level, test_gap_zlib_3285_params, test_gap_zlib_fs_assert_2935_2752_2971, test_gap_3662_node_argvalidation, test_gap_constants_tail_3683plus, test_gap_handle_band_object_ops.Related fragility worth fixing while in here: the compile-object cache living under /private/tmp makes every reboot a cold start and couples cache identity to a world-writable path.