Repository navigation
Warnings (product) fails on every PR since #7250 — two denied warnings in gc/barrier_arming #7277
Description
The Warnings (product) job in Tests builds with warnings denied. Since #7250 landed it fails on two warnings from the new gc/barrier_arming module, so every PR opened after that commit inherits a red Warnings (product) regardless of its content.
From the job log (Warnings (product), run 30762914997):
error: glob import doesn't reexport anything with visibility `pub(crate)`
because no imported item is public enough
70 | pub(crate) use barrier_arming::*;
= help: reduce the glob import's visibility or increase visibility of imported items
error: function `remembered_reconstruct_census` is never used
--> crates/perry-runtime/src/gc/barrier_arming.rs:118:15
error: could not compile `perry-runtime` (lib) due to 2 previous errors
Both reproduce locally on a plain cargo build --profile perry-dev -p perry -p perry-runtime-static -p perry-stdlib-static (as a warning rather than an error, since that build does not deny).
Why it was not caught
main's last Tests run was c9cd73ba5 at 2026-08-02 07:41, and barrier_arming.rs landed in c7893c4ac at 2026-08-02 12:58 — about five hours later. git merge-base --is-ancestor c7893c4ac c9cd73ba5 is false, so no main run has ever compiled this module under the warnings gate. The most recent main Tests run showing Warnings (product): success predates the code entirely.
This is the "a gate can be unable to fail" family from CLAUDE.md, in its fourth form: the job is genuinely running and genuinely green on main, but its subject never reached it.
Fix sketch
gc/mod.rs:70— either givebarrier_arming's intended exportspub(crate)visibility, or drop thepub(crate) use barrier_arming::*;glob if nothing is meant to be re-exported.gc/barrier_arming.rs:118—remembered_reconstruct_censusis dead. Either wire it into the diagnostic path it was written for, gate it behind the relevantcfg, or delete it. Given perf(gc): stop maintaining a remembered set nothing has read yet (#7187 Phase A) #7250's lazily-armed remembered set, a census helper that nothing calls is worth a second look before it is simply silenced — an#[allow(dead_code)]would hide the question rather than answer it.
Notes
- Found while clearing the two
lintgates in fix(lint): clear the GC store-site and address-classification gates (#7258, #7259) #7273; both files are untouched by that PR, which is why it is filed rather than fixed there (andgc/is live territory for gc/perf: classify_heap_generation is 19% of batch.ts (57.4% total GC bookkeeping) with ZERO collections running — write-barrier tower needs its own lever (#5094 evidence) #7187 / gc-matrix: four of the six PR-gating arms run ZERO copying minors corpus-wide (default/verify_evac/cons_scan_off at copy-minor 0/49; header still claims 12/22) #7255). - Not the same as the
gc-ratchetred on the same PR — that is gc-matrix: four of the six PR-gating arms run ZERO copying minors corpus-wide (default/verify_evac/cons_scan_off at copy-minor 0/49; header still claims 12/22) #7255 (zero copying minors corpus-wide), also pre-existing onmainfor at least six consecutive runs.
Activity