| ... | @@ -18668,6 +18668,13 @@ fn zirFloatToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! | ... | @@ -18668,6 +18668,13 @@ fn zirFloatToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! |
| 18668 | } | 18668 | } |
| 18669 | | 18669 | |
| 18670 | try sema.requireRuntimeBlock(block, inst_data.src(), operand_src); | 18670 | try sema.requireRuntimeBlock(block, inst_data.src(), operand_src); |
| | 18671 | if (dest_ty.intInfo(sema.mod.getTarget()).bits == 0) { |
| | 18672 | if (block.wantSafety()) { |
| | 18673 | const ok = try block.addBinOp(if (block.float_mode == .Optimized) .cmp_eq_optimized else .cmp_eq, operand, try sema.addConstant(operand_ty, Value.zero)); |
| | 18674 | try sema.addSafetyCheck(block, ok, .integer_part_out_of_bounds); |
| | 18675 | } |
| | 18676 | return sema.addConstant(dest_ty, Value.zero); |
| | 18677 | } |
| 18671 | const result = try block.addTyOp(if (block.float_mode == .Optimized) .float_to_int_optimized else .float_to_int, dest_ty, operand); | 18678 | const result = try block.addTyOp(if (block.float_mode == .Optimized) .float_to_int_optimized else .float_to_int, dest_ty, operand); |
| 18672 | if (block.wantSafety()) { | 18679 | if (block.wantSafety()) { |
| 18673 | const back = try block.addTyOp(.int_to_float, operand_ty, result); | 18680 | const back = try block.addTyOp(.int_to_float, operand_ty, result); |