| ... | ... | @@ -6319,11 +6319,13 @@ static TypeTableEntry *ir_analyze_negation(IrAnalyze *ira, IrInstructionUnOp *un |
| 6319 | 6319 | |
| 6320 | 6320 | if ((expr_type->id == TypeTableEntryIdInt && expr_type->data.integral.is_signed) || |
| 6321 | 6321 | expr_type->id == TypeTableEntryIdNumLitInt || |
| 6322 | | ((expr_type->id == TypeTableEntryIdFloat || expr_type->id == TypeTableEntryIdNumLitFloat) && |
| 6323 | | !is_wrap_op)) |
| 6322 | ((expr_type->id == TypeTableEntryIdFloat || expr_type->id == TypeTableEntryIdNumLitFloat) && !is_wrap_op)) |
| 6324 | 6323 | { |
| 6325 | | ConstExprValue *target_const_val = &value->static_value; |
| 6326 | | if (target_const_val->special != ConstValSpecialRuntime) { |
| 6324 | if (instr_is_comptime(value)) { |
| 6325 | ConstExprValue *target_const_val = ir_resolve_const(ira, value, UndefBad); |
| 6326 | if (!target_const_val) |
| 6327 | return ira->codegen->builtin_types.entry_invalid; |
| 6328 | |
| 6327 | 6329 | bool depends_on_compile_var = value->static_value.depends_on_compile_var; |
| 6328 | 6330 | ConstExprValue *out_val = ir_build_const_from(ira, &un_op_instruction->base, depends_on_compile_var); |
| 6329 | 6331 | bignum_negate(&out_val->data.x_bignum, &target_const_val->data.x_bignum); |
| ... | ... | @@ -6344,6 +6346,9 @@ static TypeTableEntry *ir_analyze_negation(IrAnalyze *ira, IrInstructionUnOp *un |
| 6344 | 6346 | } |
| 6345 | 6347 | return expr_type; |
| 6346 | 6348 | } |
| 6349 | |
| 6350 | ir_build_un_op_from(&ira->new_irb, &un_op_instruction->base, un_op_instruction->op_id, value); |
| 6351 | return expr_type; |
| 6347 | 6352 | } |
| 6348 | 6353 | |
| 6349 | 6354 | const char *fmt = is_wrap_op ? "invalid wrapping negation type: '%s'" : "invalid negation type: '%s'"; |