mirror of
https://github.com/ziglang/zig.git
synced 2026-02-14 05:20:34 +00:00
fix @intToFloat on comptime_floats
This commit is contained in:
parent
3e3c651b67
commit
0847b47bf8
12
src/ir.cpp
12
src/ir.cpp
@ -12760,9 +12760,7 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, IrInst *source_instr,
|
||||
const_val->type = new_type;
|
||||
break;
|
||||
case CastOpIntToFloat:
|
||||
{
|
||||
assert(new_type->id == ZigTypeIdFloat);
|
||||
|
||||
if (new_type->id == ZigTypeIdFloat) {
|
||||
BigFloat bigfloat;
|
||||
bigfloat_init_bigint(&bigfloat, &other_val->data.x_bigint);
|
||||
switch (new_type->data.floating.bit_count) {
|
||||
@ -12783,9 +12781,13 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, IrInst *source_instr,
|
||||
default:
|
||||
zig_unreachable();
|
||||
}
|
||||
const_val->special = ConstValSpecialStatic;
|
||||
break;
|
||||
} else if (new_type->id == ZigTypeIdComptimeFloat) {
|
||||
bigfloat_init_bigint(&const_val->data.x_bigfloat, &other_val->data.x_bigint);
|
||||
} else {
|
||||
zig_unreachable();
|
||||
}
|
||||
const_val->special = ConstValSpecialStatic;
|
||||
break;
|
||||
case CastOpFloatToInt:
|
||||
float_init_bigint(&const_val->data.x_bigint, other_val);
|
||||
if (new_type->id == ZigTypeIdInt) {
|
||||
|
||||
@ -827,3 +827,12 @@ test "peer type resolve array pointer and unknown pointer" {
|
||||
comptime expect(@TypeOf(&const_array, const_ptr) == [*]const u8);
|
||||
comptime expect(@TypeOf(const_ptr, &const_array) == [*]const u8);
|
||||
}
|
||||
|
||||
test "comptime float casts" {
|
||||
const a = @intToFloat(comptime_float, 1);
|
||||
expect(a == 1);
|
||||
expect(@TypeOf(a) == comptime_float);
|
||||
const b = @floatToInt(comptime_int, 2);
|
||||
expect(b == 2);
|
||||
expect(@TypeOf(b) == comptime_int);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user