3.4 KiB
Carried-phase legacy stack regression
The first candidate d11b99bb4ab1c817951557551db3a3c7cbd5c425 compiled and
passed all 12 new carried-phase tests. Its full library run aborted with
STATUS_STACK_OVERFLOW (3221225725) at the existing
ordinary_index::tests::small_stack_success_and_late_header_failure_leave_no_partial_owner.
That unchanged 128 KiB control passed in the completed 18073a6 baseline.
It recorded 124 completed passes before the abort. The aborted run is not a
complete test-suite result or the known 16-failure
disposition. Its raw log SHA256 is
705752b2f18d5897719f689083227aa1e2df4e17f6bc07747490337681ef00fe.
The exact first artifact is 42,221,568 bytes, SHA256
dccfaee7f43e563fe26517c6a5454cd06f849d7b72d1127a12d28779100e9016.
It was preserved locally before replacement. LLDB reproduced its overflow:
Windows heap allocation through formatting, Exact::parse_decimal, Budget::exact,
binding, declarations::parse, State::parse_typed, Parser::unit, parse_impl,
parse_with_profile, parse, accepted, indexed and the original small-stack worker.
No index operation is on the active stack at the fault.
The debugger log SHA256 is
d3ede485caa0714030e7f95f10a64590334df4219ec836d4daf23db0cbea8138.
Its exit zero follows an explicit debugger kill of the stopped child and is not
a passing test. No other application process was stopped.
Source-bound disassembly observed these prologue reservations: parse_impl 11,144 bytes; parse_with_profile 312; accepted 1,752; indexed 1,704; actual worker 7,752. A separate test harness shim shares the worker's demangled name and uses 56 bytes; the two records must not be confused. These are selected static prologues, not a complete runtime stack measurement or proof of a sole cause.
The new retained input duplicated the 104-byte Limits/ProjectLimits policy in
each later parsed/resolved/indexed/plan carrier. Independent review selected a
smaller representation: consume input, transfer exact policy into the Budget
and existing syntax limits, and retain only a small backing-owner guard.
This avoids a new external policy lifetime or heap allocation. The wrapper,
all resource arithmetic, expected values and existing small-stack tests remain
unchanged. The corrected candidate is
fa7a980418ef99d772e67c66c28dfa7b5181f875.
The corrected artifact is 42,223,104 bytes, SHA256
c990e77015f2e4535003875abe7d49199cead803ee60677d86cdf056da7d8298.
Its 12 focused cases pass and the complete full run returns 242 passed / 16
failed, including passes for all nine prior stack-named controls. The originally
aborting test is unchanged. Strict all-target core Clippy passes; formatting
retains the byte-identical inherited eight diff blocks. Independent raw baseline
comparison is recorded separately in the runtime review.
Corrected selected prologues are parse_impl 11,048 bytes, parse_with_profile 200, accepted 1,432, indexed 1,496 and the actual worker 6,920. Their reductions sum to 1,568 bytes; parse remains 280 and the separate harness shim remains 56. This confirms reduced reservations in the inspected frames and a completed ordinary regression run. It is not a full-stack measurement, proof of a sole cause, or guarantee across every environment.
This investigation does not resolve the separate earlier rename-test full-pipeline 128 KiB setup observation, grant a universal stack guarantee or accept emitted output. Raw launchers, receipts, traces and both source versions are preserved.