| ... | @@ -13174,6 +13174,16 @@ static TypeTableEntry *ir_analyze_instruction_switch_target(IrAnalyze *ira, | ... | @@ -13174,6 +13174,16 @@ static TypeTableEntry *ir_analyze_instruction_switch_target(IrAnalyze *ira, |
| 13174 | return tag_type; | 13174 | return tag_type; |
| 13175 | } | 13175 | } |
| 13176 | case TypeTableEntryIdEnum: { | 13176 | case TypeTableEntryIdEnum: { |
| | 13177 | type_ensure_zero_bits_known(ira->codegen, target_type); |
| | 13178 | if (type_is_invalid(target_type)) |
| | 13179 | return ira->codegen->builtin_types.entry_invalid; |
| | 13180 | if (target_type->data.enumeration.src_field_count < 2) { |
| | 13181 | TypeEnumField *only_field = &target_type->data.enumeration.fields[0]; |
| | 13182 | ConstExprValue *out_val = ir_build_const_from(ira, &switch_target_instruction->base); |
| | 13183 | bigint_init_bigint(&out_val->data.x_enum_tag, &only_field->value); |
| | 13184 | return target_type; |
| | 13185 | } |
| | 13186 | |
| 13177 | if (pointee_val) { | 13187 | if (pointee_val) { |
| 13178 | ConstExprValue *out_val = ir_build_const_from(ira, &switch_target_instruction->base); | 13188 | ConstExprValue *out_val = ir_build_const_from(ira, &switch_target_instruction->base); |
| 13179 | bigint_init_bigint(&out_val->data.x_enum_tag, &pointee_val->data.x_enum_tag); | 13189 | bigint_init_bigint(&out_val->data.x_enum_tag, &pointee_val->data.x_enum_tag); |