| ... | ... | @@ -13940,8 +13940,7 @@ static IrInstruction *ir_analyze_array_mult(IrAnalyze *ira, IrInstructionBinOp * |
| 13940 | 13940 | uint64_t old_array_len = array_type->data.array.len; |
| 13941 | 13941 | uint64_t new_array_len; |
| 13942 | 13942 | |
| 13943 | | if (mul_u64_overflow(old_array_len, mult_amt, &new_array_len)) |
| 13944 | | { |
| 13943 | if (mul_u64_overflow(old_array_len, mult_amt, &new_array_len)) { |
| 13945 | 13944 | ir_add_error(ira, &instruction->base, buf_sprintf("operation results in overflow")); |
| 13946 | 13945 | return ira->codegen->invalid_instruction; |
| 13947 | 13946 | } |
| ... | ... | @@ -13956,6 +13955,15 @@ static IrInstruction *ir_analyze_array_mult(IrAnalyze *ira, IrInstructionBinOp * |
| 13956 | 13955 | return result; |
| 13957 | 13956 | } |
| 13958 | 13957 | |
| 13958 | switch (type_has_one_possible_value(ira->codegen, result->value.type)) { |
| 13959 | case OnePossibleValueInvalid: |
| 13960 | return ira->codegen->invalid_instruction; |
| 13961 | case OnePossibleValueYes: |
| 13962 | return result; |
| 13963 | case OnePossibleValueNo: |
| 13964 | break; |
| 13965 | } |
| 13966 | |
| 13959 | 13967 | // TODO optimize the buf case |
| 13960 | 13968 | expand_undef_array(ira->codegen, array_val); |
| 13961 | 13969 | out_val->data.x_array.data.s_none.elements = create_const_vals(new_array_len); |