You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Shifts compile natively and agree with the reference path (t27c gen + zig test) on every spec that passes there.
Acceptance criteria
<< and >> on the integer types t27b supports, including an untyped literal on the left (1 << n, the case the stale branch claude/t27b-shift2e075a4 began on: Lower::decl_int, Lower::pin_shifted_literal), and compound <<= / >>= if the front-end produces them.
>> is arithmetic on signed types and logical on unsigned ones, as in Zig. The shift amount follows Zig's rules exactly as the reference emits them (@intCast/std.math.Log2Int, @shlExact or a plain shift). A shift Zig traps on (the amount is too wide for the type) traps the same way in t27b, or the shape is refused with a named blocker. It is never silently masked.
The encoder tests check LSLV/ASRV/LSRV (and immediate forms if they are emitted) against known machine words. There are differential tests named shift_.... A JIT/evaluator disagreement is a failure, never a skip.
The PR gives before/after t27b corpus specs numbers with 0 mismatches, and every newly passing file is checked against the reference path.
Boundary
cli/t27b/src/{lower,ir,codegen,a64,eval,jit}.rs, cli/t27b/tests/{differential,encoder,blockers}.rs, one docs/now entry.
Activity