mirror of
https://github.com/ziglang/zig.git
synced 2025-12-11 16:53:06 +00:00
add test
This commit is contained in:
parent
07f64a2e13
commit
59b6483d63
17
src/Sema.zig
17
src/Sema.zig
@ -11202,18 +11202,17 @@ fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
|
|||||||
const maybe_lhs_val = try sema.resolveMaybeUndefValIntable(block, lhs_src, casted_lhs);
|
const maybe_lhs_val = try sema.resolveMaybeUndefValIntable(block, lhs_src, casted_lhs);
|
||||||
const maybe_rhs_val = try sema.resolveMaybeUndefValIntable(block, rhs_src, casted_rhs);
|
const maybe_rhs_val = try sema.resolveMaybeUndefValIntable(block, rhs_src, casted_rhs);
|
||||||
|
|
||||||
if ((lhs_ty.tag() == .comptime_float and rhs_ty.tag() == .comptime_int) or
|
if ((lhs_ty.zigTypeTag() == .ComptimeFloat and rhs_ty.zigTypeTag() == .ComptimeInt) or
|
||||||
(lhs_ty.tag() == .comptime_int and rhs_ty.tag() == .comptime_float))
|
(lhs_ty.zigTypeTag() == .ComptimeInt and rhs_ty.zigTypeTag() == .ComptimeFloat))
|
||||||
{
|
{
|
||||||
// If it makes a difference whether we coerce to ints or floats before doing the division, error.
|
// If it makes a difference whether we coerce to ints or floats before doing the division, error.
|
||||||
// If lhs % rhs is 0, it doesn't matter.
|
// If lhs % rhs is 0, it doesn't matter.
|
||||||
var lhs_val = maybe_lhs_val orelse unreachable;
|
const lhs_val = maybe_lhs_val orelse unreachable;
|
||||||
var rhs_val = maybe_rhs_val orelse unreachable;
|
const rhs_val = maybe_rhs_val orelse unreachable;
|
||||||
var rem = lhs_val.floatRem(rhs_val, resolved_type, sema.arena, target) catch unreachable;
|
const rem = lhs_val.floatRem(rhs_val, resolved_type, sema.arena, target) catch unreachable;
|
||||||
var float_rem = rem.toFloat(f32);
|
if (rem.compareWithZero(.neq)) {
|
||||||
if (float_rem != 0.0) {
|
return sema.fail(block, src, "ambiguous coercion of division operands '{s}' and '{s}'; division has non-zero reminder '{}'", .{
|
||||||
return sema.fail(block, src, "ambiguous coercion of division operands: '{s}' and '{s}': division has non-zero reminder: {d}", .{
|
@tagName(lhs_ty.tag()), @tagName(rhs_ty.tag()), rem.fmtValue(resolved_type, sema.mod),
|
||||||
@tagName(lhs_ty.tag()), @tagName(rhs_ty.tag()), float_rem,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,24 @@
|
|||||||
|
export fn entry1() void {
|
||||||
|
var f: f32 = 54.0 / 5;
|
||||||
|
_ = f;
|
||||||
|
}
|
||||||
|
export fn entry2() void {
|
||||||
|
var f: f32 = 54 / 5.0;
|
||||||
|
_ = f;
|
||||||
|
}
|
||||||
|
export fn entry3() void {
|
||||||
|
var f: f32 = 55.0 / 5;
|
||||||
|
_ = f;
|
||||||
|
}
|
||||||
|
export fn entry4() void {
|
||||||
|
var f: f32 = 55 / 5.0;
|
||||||
|
_ = f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// error
|
||||||
|
// backend=stage2
|
||||||
|
// target=native
|
||||||
|
//
|
||||||
|
// :2:23: error: ambiguous coercion of division operands 'comptime_float' and 'comptime_int'; division has non-zero reminder '4'
|
||||||
|
// :6:21: error: ambiguous coercion of division operands 'comptime_int' and 'comptime_float'; division has non-zero reminder '4'
|
||||||
Loading…
x
Reference in New Issue
Block a user