| ... | @@ -9975,15 +9975,18 @@ static TypeTableEntry *ir_analyze_bin_op_math(IrAnalyze *ira, IrInstructionBinOp | ... | @@ -9975,15 +9975,18 @@ static TypeTableEntry *ir_analyze_bin_op_math(IrAnalyze *ira, IrInstructionBinOp |
| 9975 | ok = bigint_cmp(&rem_result, &mod_result) == CmpEQ; | 9975 | ok = bigint_cmp(&rem_result, &mod_result) == CmpEQ; |
| 9976 | } | 9976 | } |
| 9977 | } else { | 9977 | } else { |
| 9978 | if (float_cmp_zero(&op2->value) == CmpEQ) { | 9978 | IrInstruction *casted_op2 = ir_implicit_cast(ira, op2, resolved_type); |
| | 9979 | if (casted_op2 == ira->codegen->invalid_instruction) |
| | 9980 | return ira->codegen->builtin_types.entry_invalid; |
| | 9981 | if (float_cmp_zero(&casted_op2->value) == CmpEQ) { |
| 9979 | // the division by zero error will be caught later, but we don't | 9982 | // the division by zero error will be caught later, but we don't |
| 9980 | // have a remainder function ambiguity problem | 9983 | // have a remainder function ambiguity problem |
| 9981 | ok = true; | 9984 | ok = true; |
| 9982 | } else { | 9985 | } else { |
| 9983 | ConstExprValue rem_result; | 9986 | ConstExprValue rem_result; |
| 9984 | ConstExprValue mod_result; | 9987 | ConstExprValue mod_result; |
| 9985 | float_rem(&rem_result, &op1->value, &op2->value); | 9988 | float_rem(&rem_result, &op1->value, &casted_op2->value); |
| 9986 | float_mod(&mod_result, &op1->value, &op2->value); | 9989 | float_mod(&mod_result, &op1->value, &casted_op2->value); |
| 9987 | ok = float_cmp(&rem_result, &mod_result) == CmpEQ; | 9990 | ok = float_cmp(&rem_result, &mod_result) == CmpEQ; |
| 9988 | } | 9991 | } |
| 9989 | } | 9992 | } |