mirror of
https://github.com/ziglang/zig.git
synced 2025-12-24 15:13:08 +00:00
Sema: don't emit instruction when casting @min/@max result to OPV type
Resolves: #21408
This commit is contained in:
parent
19924ca289
commit
258236ec1b
@ -26201,6 +26201,10 @@ fn analyzeMinMax(
|
||||
.child = refined_scalar_ty.toIntern(),
|
||||
}) else refined_scalar_ty;
|
||||
|
||||
if (try sema.typeHasOnePossibleValue(refined_ty)) |opv| {
|
||||
return Air.internedToRef(opv.toIntern());
|
||||
}
|
||||
|
||||
if (!refined_ty.eql(unrefined_ty, zcu)) {
|
||||
// We've reduced the type - cast the result down
|
||||
return block.addTyOp(.intcast, refined_ty, cur_minmax.?);
|
||||
|
||||
@ -336,3 +336,17 @@ test "@min/@max of signed and unsigned runtime integers" {
|
||||
try expectEqual(x, @min(x, y));
|
||||
try expectEqual(y, @max(x, y));
|
||||
}
|
||||
|
||||
test "@min resulting in u0" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
const S = struct {
|
||||
fn min(a: u0, b: u8) u8 {
|
||||
return @min(a, b);
|
||||
}
|
||||
};
|
||||
const x = S.min(0, 1);
|
||||
try expect(x == 0);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user