You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
native_proof / typed_shape_descriptors: four lowering-independent failures (numeric-coerce on a proven read, missing typed-array fallback record, negative-divisor frem, missing layout-note marker) #7494
Four perry-codegen integration-test failures on main (f05ae3b), arm64 macOS, debug, that are independent of the root-lowering default — they fail identically with and without PERRY_RS4GC=0, so they are not part of the #7370 native-roots family tracked in #7493:
tests/native_proof_buffer_views.rs
proven_buffer_and_typed_array_reads_are_numeric_operands (:915) proven native numeric reads should not force JS number coercion — the emitted IR now contains call double @js_number_coerce for a read the test proves is native-numeric.
reassigned_typed_array_store_records_runtime_fallback (:1942) expected reassigned typed-array store to record runtime fallback — no artifact record with expr_kind == "TypedArraySet", consumer == "TypedArraySet.slow_path", access_mode == "dynamic_fallback" and a non-null fallback_reason.
tests/native_proof_regressions/integer_modulo.rs
integer_modulo::i32_counter_mod_unsafe_or_nonliteral_divisors_keep_frem (:75) negative divisor must remain on floating remainder.
tests/typed_shape_descriptors.rs
integer_arithmetic_array_push_omits_inbounds_layout_note_and_barrier (:141) IR should contain block marker ….
All four reproduce when run alone, so this is not order dependence — unrelated to #7490 (poisoned mutex in typed_feedback.rs, fixed in #7492).
Why they went unnoticed
Integration suites under crates/*/tests/*.rs do not run per-PR (nightly/tag only — the CLAUDE.md pitfall), and cargo test without --no-fail-fast stops at the first failing target, so a log tail can look like a clean run.
What needs deciding
For each of the four, the question is the same and has to be answered before touching the test: did the lowering legitimately change, or did a proof regress?
If the numeric-proof / fallback-record / layout-note behaviour changed on purpose, the assertion is stale and should be re-pointed at the current contract — and made to assert the property rather than a textual window, so the next intentional change does not silently re-break it. (fix(test): isolate typed_feedback failures — a poisoned ENV_LOCK turned one failure into five (#7490) #7492's class-field assertion is a worked example: the positional "coerce appears between these two labels" window was replaced by an end-to-end data-flow assertion.)
If not, these are live regressions hiding behind an untested suite. An unnecessary js_number_coerce on a proven native read is a lost optimisation, but a missingdynamic_fallback record on a reassigned typed-array store is a soundness-adjacent gap in exactly the direction the test was written to catch.
Repro
cargo test -p perry-codegen --tests --no-fail-fast -- --test-threads=1
changed the title [-]native_proof: three lowering-independent failures (numeric-coerce on a proven read, missing typed-array fallback record, negative-divisor frem)[/-][+]native_proof / typed_shape_descriptors: four lowering-independent failures (numeric-coerce on a proven read, missing typed-array fallback record, negative-divisor frem, missing layout-note marker)[/+]on Aug 6, 2026
Cross-reference: I hit these four independently on main at v0.5.1407 while diffing full-suite baselines for today's codegen PRs, and filed #7708 before finding this. #7708 is now narrowed to the two failures not listed here — large_local_array_push_inbounds_store_emits_precise_slot_barrier and typed_f64_receiver_method_clone_raw_loads_after_composed_guards — plus the CI-coverage gap that lets this tier rot. The four here are unchanged and still red as of v0.5.1416.
Activity
[-]native_proof: three lowering-independent failures (numeric-coerce on a proven read, missing typed-array fallback record, negative-divisor frem)[/-][+]native_proof / typed_shape_descriptors: four lowering-independent failures (numeric-coerce on a proven read, missing typed-array fallback record, negative-divisor frem, missing layout-note marker)[/+]proggeramlug commentedon Aug 9, 2026
Cross-reference: I hit these four independently on
mainat v0.5.1407 while diffing full-suite baselines for today's codegen PRs, and filed #7708 before finding this. #7708 is now narrowed to the two failures not listed here —large_local_array_push_inbounds_store_emits_precise_slot_barrierandtyped_f64_receiver_method_clone_raw_loads_after_composed_guards— plus the CI-coverage gap that lets this tier rot. The four here are unchanged and still red as of v0.5.1416.fix(codegen): resolve #7494's four lowering-independent proof-test fa…
fix(codegen): resolve #7494's four lowering-independent proof-test fa…
fix(typedarray): dispatch, not just validate, when the element-read r…