diff --git a/src/Sema.zig b/src/Sema.zig index b28536fe48..feed4d0e8a 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -7236,8 +7236,8 @@ fn zirFloatCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A ), } - if (try sema.isComptimeKnown(block, operand_src, operand)) { - return sema.coerce(block, dest_ty, operand, operand_src); + if (try sema.resolveMaybeUndefVal(block, operand_src, operand)) |operand_val| { + return sema.addConstant(dest_ty, try operand_val.floatCast(sema.arena, dest_ty, target)); } if (dest_is_comptime_float) { return sema.fail(block, src, "unable to cast runtime value to 'comptime_float'", .{}); diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index 6753b731f0..58b458ad1e 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -630,7 +630,9 @@ test "vector casts" { } test "@floatCast cast down" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO { var double: f64 = 0.001534;