Files
BFM-decomp/cookbook/C0384.md
T

1.5 KiB
Raw Blame History

§343 — decl_prior's FLEET MAJORITY CAN BE WRONG ABOUT THE TRUE SIGNATURE — READ THE RIVALS, NOT JUST THE WINNER (P31 S67; measured on func_8012BD14 / func_8012D624 / func_80143C74)

The card's decl_prior reports what the FLEET DECLARES, ranked, with rivals. That is not the same as what the function IS. Measured this wave:

symbol card's fleet winner n rival truth per the asm
func_8012BD14 void (s32) 1374 s32 (s32) ×163 returns s32
func_8012D624 void (s32) 1322 s32 (void*,s32,s32) ×74 3 args, returns s32
func_80143C74 void (s32,s32) 90 s32 (s32,s32) ×42 returns s32

Verified independently: void func_8012BD14(s32 a0) really does appear ~1427× in src/. The tool is honest; the CORPUS is wrong. A loosely-typed engine propagated a void spelling into a thousand call sites, and a majority vote over those call sites reproduces the error at high confidence.

HOW TO USE THE FIELD: treat the winner as the house spelling (what the destination TU probably writes), and the RIVALS as evidence about the true signature — a rival with a materially different return type or arity, backed by dozens of sites, usually means the majority is a propagated mistake. The .s decides: a jal whose result is consumed returns a value however many TUs say void. Cf. §43/§99/§320 (adopt the TU's decl) — the TU's spelling is what must COMPILE; the asm is what must MATCH, and when they disagree you need the alias/no-proto escapes, not a corrected majority.