Two parse.c operand defects. A bare `-8` (no $) double-negated to +8: a_parsenum lets strtoll consume the sign, and the caller's `off * sign` re-applied it (the D_INDIR arm never multiplied, which is why -8(BP) always worked); the wwstage twin was already correct, so this was a latent cs!=ww on hand-written source. The name(REG) non-SB arm faked a D_INDIR off an UNCHECKED reg_lookup and silently discarded the parsed ident and +disp -- both stages; the shape has no encoding and now rejects loud.
11 KiB
11 KiB