From 2d3f1064391bf4459831c60ff1876b5873cb0d9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralph=20K=C3=BCpper?= Date: Sat, 18 Jul 2026 08:27:20 +0200 Subject: [PATCH] lint(gc): audit marker for the scalar concat-arg store in from_concat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `Array.concat` fast path added in #6529 writes each non-array scalar argument into the result with a raw `std::ptr::write`, but only the bulk copy_array closure above it carried a GC_STORE_AUDIT marker — the GC store-site inventory now fails on every branch (`from_concat.rs:933: raw slot write`), turning the lint gate red on main and on all open PRs. Same classification as the sibling bulk copy: BARRIERED — nothing in pass 2 allocates or bails, and the single `rebuild_array_layout_exact(result)` after the loop performs the exact layout/barrier rebuild for every stored element, scalar and bulk alike. No behavior change; comment only. Claude-Session: https://claude.ai/code/session_01KD4GTmiwZjRrxShzQydJpF --- crates/perry-runtime/src/array/from_concat.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/perry-runtime/src/array/from_concat.rs b/crates/perry-runtime/src/array/from_concat.rs index 210e72df53..add4a1e685 100644 --- a/crates/perry-runtime/src/array/from_concat.rs +++ b/crates/perry-runtime/src/array/from_concat.rs @@ -930,6 +930,9 @@ unsafe fn try_concat_all_dense( if arg.to_bits() >> 48 == 0x7FFF { crate::string::js_string_addref_if_heap_string(arg); } + // GC_STORE_AUDIT(BARRIERED): scalar concat arg into the result; + // same single exact layout/barrier rebuild as the bulk copy above + // runs after all elements are in place. std::ptr::write(dst.add(off), arg); off += 1; }