The current review train owns this follow-up through @andrewboudreau. This is retained work from PR #2496; it is not a request for another owner to repair the code and is not acceptance of whole-family Decimal reconstruction.
Source pins: public PR #2496 b00c98d507d3261d7d197d35258be10eac791bdd; its actual source merge base cd3a7eb5966a8758722bde1ec78f61abc4b5c126; bounded local correction checkpoint 76c867238a53f737bde883ead54e767fc5f620c8. The four files below are unchanged across those pins. The six nearby tagged Decimal routines now have independently inspectable byte proof, but that does not establish the numeric ABI or one complete layout for these other consumers.
Concrete interfaces to recover and correct:
src/func_02070b98.c:6 defines (void *a0, int a1, int a2, void *d). Its numeric parameters are unused in the C body, and line 12 calls func_02070c68(c) through a one-pointer declaration. Trace the actual ARM register flow and the callee before choosing a double or split-word source signature; do not infer a dropped numeric input merely from the current C parameter names. Its line 3 declaration of func_020715e0(void *, int) also needs to agree with the actual tagged Decimal definition once the complete caller view is proven.
src/func_0206ece0.c:37 declares func_02070b98(decform *, int, int, decimal *); its call is at line 77. The local anonymous decimal contains text[36] at line 31. Prove the numeric calling convention and buffer extent against the owner, including stack storage and later ASCII formatting accesses.
src/func_0206f46c.c:40 instead declares func_02070b98(decform *, double, decimal *); its call is at line 84, and its local decimal also has text[36] at line 33. These source contracts differ even if the pinned compiler happens to pass equivalent register words. Establish and apply a coherent real contract with complete object and relocation proof.
src/func_0206f338.c:1 defines an offset-shaped struct S with digits[1], while its caller in func_0206ece0.c:40 uses the 36-digit anonymous decimal. The routine traverses to the runtime length. Recover a truthful complete digit view and field names; prove all callers and distinguish ASCII digits from the nearby numeric-digit helpers.
The nearby numeric helpers use a tagged 32-digit view. A matching prefix and byte-identical experiments do not prove that it is interchangeable with the printf callers' 36-digit storage or that either is the original type. The earlier eight-routine experiment remains research, not source acceptance. No blanket shared header or declaration-baseline change is authorized by this issue alone.
Completion requires an owned queue task and isolated worktree, actual caller/callee ABI and bounds evidence, fixes to demonstrated source contracts, pinned compiler experiments where needed, complete emitted-object and module-qualified relocation proof, preserved per-symbol credit, independent source review, and normal actual-main/private validation before merging. PR #2496's bounded carry/rounding correction can be reviewed separately; this issue stays open until the wider work is actually completed.
The current review train owns this follow-up through @andrewboudreau. This is retained work from PR #2496; it is not a request for another owner to repair the code and is not acceptance of whole-family Decimal reconstruction.
Source pins: public PR #2496
b00c98d507d3261d7d197d35258be10eac791bdd; its actual source merge basecd3a7eb5966a8758722bde1ec78f61abc4b5c126; bounded local correction checkpoint76c867238a53f737bde883ead54e767fc5f620c8. The four files below are unchanged across those pins. The six nearby tagged Decimal routines now have independently inspectable byte proof, but that does not establish the numeric ABI or one complete layout for these other consumers.Concrete interfaces to recover and correct:
src/func_02070b98.c:6defines(void *a0, int a1, int a2, void *d). Its numeric parameters are unused in the C body, and line 12 callsfunc_02070c68(c)through a one-pointer declaration. Trace the actual ARM register flow and the callee before choosing a double or split-word source signature; do not infer a dropped numeric input merely from the current C parameter names. Its line 3 declaration offunc_020715e0(void *, int)also needs to agree with the actual tagged Decimal definition once the complete caller view is proven.src/func_0206ece0.c:37declaresfunc_02070b98(decform *, int, int, decimal *); its call is at line 77. The local anonymous decimal containstext[36]at line 31. Prove the numeric calling convention and buffer extent against the owner, including stack storage and later ASCII formatting accesses.src/func_0206f46c.c:40instead declaresfunc_02070b98(decform *, double, decimal *); its call is at line 84, and its local decimal also hastext[36]at line 33. These source contracts differ even if the pinned compiler happens to pass equivalent register words. Establish and apply a coherent real contract with complete object and relocation proof.src/func_0206f338.c:1defines an offset-shapedstruct Swithdigits[1], while its caller infunc_0206ece0.c:40uses the 36-digit anonymous decimal. The routine traverses to the runtime length. Recover a truthful complete digit view and field names; prove all callers and distinguish ASCII digits from the nearby numeric-digit helpers.The nearby numeric helpers use a tagged 32-digit view. A matching prefix and byte-identical experiments do not prove that it is interchangeable with the printf callers' 36-digit storage or that either is the original type. The earlier eight-routine experiment remains research, not source acceptance. No blanket shared header or declaration-baseline change is authorized by this issue alone.
Completion requires an owned queue task and isolated worktree, actual caller/callee ABI and bounds evidence, fixes to demonstrated source contracts, pinned compiler experiments where needed, complete emitted-object and module-qualified relocation proof, preserved per-symbol credit, independent source review, and normal actual-main/private validation before merging. PR #2496's bounded carry/rounding correction can be reviewed separately; this issue stays open until the wider work is actually completed.