diff --git a/src/Sema.zig b/src/Sema.zig index c7d40ffa095a3416a65806bba49d84f6bbbc8da7..35f35d8e581d87e16335725a025a636e32ddffdf 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -25542,10 +25542,10 @@ fn zirRoundOpType(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDa return .generic_poison_type; }; - const float_ty = dest_ty.optEuBaseType(zcu); - switch (float_ty.scalarType(zcu).zigTypeTag(zcu)) { - .float, .comptime_float => return .fromType(float_ty), - else => return .comptime_float_type, + const dest_base_ty = dest_ty.optEuBaseType(zcu); + switch (dest_base_ty.scalarType(zcu).zigTypeTag(zcu)) { + .float, .comptime_float => return .fromType(dest_base_ty), + else => return .generic_poison_type, } } diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index 077d3faeddc080357b48304a3f46240ad83e1fdd..2a79566b74f6fad214b6324ff3e41b5ae087ae6d 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -120,6 +120,7 @@ test "@floatFromInt" { try expect(@as(i32, @floor(f)) == k); try expect(@as(i32, @ceil(f)) == k); try expect(@as(i32, @trunc(f)) == k); + try expect(@as(i32, @trunc(@floor(f))) == k); } }; try S.doTheTest(); @@ -197,6 +198,7 @@ test "@floatFromInt(f80)" { try expect(@as(Int, @floor(f)) == k); try expect(@as(Int, @ceil(f)) == k); try expect(@as(Int, @trunc(f)) == k); + try expect(@as(Int, @trunc(@floor(f))) == k); } }; try S.doTheTest(i31);