Skip to content

Sema: saturating left shift produces an incorrect safety check and invalid Air #23033

@jacobly0

Description

@jacobly0
pub const panic = @import("std").debug.no_panic;
var lhs: u3 = 1;
var rhs: u1 = 0;
export fn shlSat() void {
    lhs <<|= rhs;
}
$ zig build-obj repro.zig --verbose-air |& grep cmp_lt
  %4 = cmp_lt(%3, <u1, 3>)

This safety check only applies to <<, not <<|.
As an added bonus for fixing this bug, you can enable the disabled safety checks in test/behavior/bit_shifting.zig and test/behavior/x86_64/binary.zig referencing this issue!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.miscompilationThe compiler reports success but produces semantically incorrect code.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions