| ... | @@ -9628,6 +9628,9 @@ static ConstExprValue *ir_resolve_const(IrAnalyze *ira, IrInstruction *value, Un | ... | @@ -9628,6 +9628,9 @@ static ConstExprValue *ir_resolve_const(IrAnalyze *ira, IrInstruction *value, Un |
| 9628 | case ConstValSpecialStatic: | 9628 | case ConstValSpecialStatic: |
| 9629 | return &value->value; | 9629 | return &value->value; |
| 9630 | case ConstValSpecialRuntime: | 9630 | case ConstValSpecialRuntime: |
| | 9631 | if (!type_has_bits(value->value.type)) { |
| | 9632 | return &value->value; |
| | 9633 | } |
| 9631 | ir_add_error(ira, value, buf_sprintf("unable to evaluate constant expression")); | 9634 | ir_add_error(ira, value, buf_sprintf("unable to evaluate constant expression")); |
| 9632 | return nullptr; | 9635 | return nullptr; |
| 9633 | case ConstValSpecialUndef: | 9636 | case ConstValSpecialUndef: |
| ... | @@ -16129,8 +16132,14 @@ static TypeTableEntry *ir_analyze_container_init_fields_union(IrAnalyze *ira, Ir | ... | @@ -16129,8 +16132,14 @@ static TypeTableEntry *ir_analyze_container_init_fields_union(IrAnalyze *ira, Ir |
| 16129 | if (casted_field_value == ira->codegen->invalid_instruction) | 16132 | if (casted_field_value == ira->codegen->invalid_instruction) |
| 16130 | return ira->codegen->builtin_types.entry_invalid; | 16133 | return ira->codegen->builtin_types.entry_invalid; |
| 16131 | | 16134 | |
| | 16135 | type_ensure_zero_bits_known(ira->codegen, casted_field_value->value.type); |
| | 16136 | if (type_is_invalid(casted_field_value->value.type)) |
| | 16137 | return ira->codegen->builtin_types.entry_invalid; |
| | 16138 | |
| 16132 | bool is_comptime = ir_should_inline(ira->new_irb.exec, instruction->scope); | 16139 | bool is_comptime = ir_should_inline(ira->new_irb.exec, instruction->scope); |
| 16133 | if (is_comptime || casted_field_value->value.special != ConstValSpecialRuntime) { | 16140 | if (is_comptime || casted_field_value->value.special != ConstValSpecialRuntime || |
| | 16141 | !type_has_bits(casted_field_value->value.type)) |
| | 16142 | { |
| 16134 | ConstExprValue *field_val = ir_resolve_const(ira, casted_field_value, UndefOk); | 16143 | ConstExprValue *field_val = ir_resolve_const(ira, casted_field_value, UndefOk); |
| 16135 | if (!field_val) | 16144 | if (!field_val) |
| 16136 | return ira->codegen->builtin_types.entry_invalid; | 16145 | return ira->codegen->builtin_types.entry_invalid; |