Skip to content

auto-opt: ext-zlib provider link failure on cold object cache (undefined js_zlib_deflate_raw_sync + panic_unwind symbols) #6847

Description

@proggeramlug

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugConfirmed defect or regression

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions