authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-05-12 00:24:09+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-05-12 00:24:09+03:00
log0847b47bf83c699d27c903e51b20f863d47c5790
tree1bd7f1b556f5cf016b64770e9e7c00047f8ece57
parent3e3c651b670fb45e714db1cfb32428c3ea3cd828
signature Commit is signed but in an unrecognized format.

fix `@intToFloat` on comptime_floats


2 files changed, 16 insertions(+), 5 deletions(-)

src/ir.cpp+7-5
......@@ -12760,9 +12760,7 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, IrInst *source_instr,
1276012760 const_val->type = new_type;
1276112761 break;
1276212762 case CastOpIntToFloat:
12763 {
12764 assert(new_type->id == ZigTypeIdFloat);
12765
12763 if (new_type->id == ZigTypeIdFloat) {
1276612764 BigFloat bigfloat;
1276712765 bigfloat_init_bigint(&bigfloat, &other_val->data.x_bigint);
1276812766 switch (new_type->data.floating.bit_count) {
......@@ -12783,9 +12781,13 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, IrInst *source_instr,
1278312781 default:
1278412782 zig_unreachable();
1278512783 }
12786 const_val->special = ConstValSpecialStatic;
12787 break;
12784 } else if (new_type->id == ZigTypeIdComptimeFloat) {
12785 bigfloat_init_bigint(&const_val->data.x_bigfloat, &other_val->data.x_bigint);
12786 } else {
12787 zig_unreachable();
1278812788 }
12789 const_val->special = ConstValSpecialStatic;
12790 break;
1278912791 case CastOpFloatToInt:
1279012792 float_init_bigint(&const_val->data.x_bigint, other_val);
1279112793 if (new_type->id == ZigTypeIdInt) {
test/stage1/behavior/cast.zig+9
......@@ -827,3 +827,12 @@ test "peer type resolve array pointer and unknown pointer" {
827827 comptime expect(@TypeOf(&const_array, const_ptr) == [*]const u8);
828828 comptime expect(@TypeOf(const_ptr, &const_array) == [*]const u8);
829829}
830
831test "comptime float casts" {
832 const a = @intToFloat(comptime_float, 1);
833 expect(a == 1);
834 expect(@TypeOf(a) == comptime_float);
835 const b = @floatToInt(comptime_int, 2);
836 expect(b == 2);
837 expect(@TypeOf(b) == comptime_int);
838}