diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-21 23:01:05 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-21 23:01:05 -0700 |
| commit | 895aea0b630df97edbbcf68bfad251968c9b9fbf (patch) | |
| tree | 8ff1152e5f318976d9835c15cc40c0ef66131243 | |
| parent | 0a6851cc6de540ed95c3ec1c78eb3da7897bd930 (diff) | |
| download | zig-895aea0b630df97edbbcf68bfad251968c9b9fbf.tar.gz zig-895aea0b630df97edbbcf68bfad251968c9b9fbf.zip | |
Sema: fix type checking of `@intToFloat` operands
There was a typo and they were backwards.
| -rw-r--r-- | src/Sema.zig | 4 | ||||
| -rw-r--r-- | test/behavior/cast.zig | 29 | ||||
| -rw-r--r-- | test/behavior/cast_stage1.zig | 29 |
3 files changed, 31 insertions, 31 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 6f430655ca..71689f65d9 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -9561,8 +9561,8 @@ fn zirIntToFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! const operand = sema.resolveInst(extra.rhs); const operand_ty = sema.typeOf(operand); - _ = try sema.checkIntType(block, ty_src, dest_ty); - try sema.checkFloatType(block, operand_src, operand_ty); + try sema.checkFloatType(block, ty_src, dest_ty); + _ = try sema.checkIntType(block, operand_src, operand_ty); if (try sema.resolveMaybeUndefVal(block, operand_src, operand)) |val| { const target = sema.mod.getTarget(); diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index c8ffa361ab..1a5b3c99d2 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -77,3 +77,32 @@ test "pointer reinterpret const float to int" { else try expect(int_val == 0x3fe33333); } + +test "comptime_int @intToFloat" { + { + const result = @intToFloat(f16, 1234); + try expect(@TypeOf(result) == f16); + try expect(result == 1234.0); + } + { + const result = @intToFloat(f32, 1234); + try expect(@TypeOf(result) == f32); + try expect(result == 1234.0); + } + { + const result = @intToFloat(f64, 1234); + try expect(@TypeOf(result) == f64); + try expect(result == 1234.0); + } + { + const result = @intToFloat(f128, 1234); + try expect(@TypeOf(result) == f128); + try expect(result == 1234.0); + } + // big comptime_int (> 64 bits) to f128 conversion + { + const result = @intToFloat(f128, 0x1_0000_0000_0000_0000); + try expect(@TypeOf(result) == f128); + try expect(result == 0x1_0000_0000_0000_0000.0); + } +} diff --git a/test/behavior/cast_stage1.zig b/test/behavior/cast_stage1.zig index 619fe81968..c6d3b5c430 100644 --- a/test/behavior/cast_stage1.zig +++ b/test/behavior/cast_stage1.zig @@ -356,35 +356,6 @@ test "vector casts" { comptime try S.doTheTestFloat(); } -test "comptime_int @intToFloat" { - { - const result = @intToFloat(f16, 1234); - try expect(@TypeOf(result) == f16); - try expect(result == 1234.0); - } - { - const result = @intToFloat(f32, 1234); - try expect(@TypeOf(result) == f32); - try expect(result == 1234.0); - } - { - const result = @intToFloat(f64, 1234); - try expect(@TypeOf(result) == f64); - try expect(result == 1234.0); - } - { - const result = @intToFloat(f128, 1234); - try expect(@TypeOf(result) == f128); - try expect(result == 1234.0); - } - // big comptime_int (> 64 bits) to f128 conversion - { - const result = @intToFloat(f128, 0x1_0000_0000_0000_0000); - try expect(@TypeOf(result) == f128); - try expect(result == 0x1_0000_0000_0000_0000.0); - } -} - test "@floatCast cast down" { { var double: f64 = 0.001534; |
