| ... | ... | @@ -9628,6 +9628,9 @@ static ConstExprValue *ir_resolve_const(IrAnalyze *ira, IrInstruction *value, Un |
| 9628 | 9628 | case ConstValSpecialStatic: |
| 9629 | 9629 | return &value->value; |
| 9630 | 9630 | case ConstValSpecialRuntime: |
| 9631 | if (!type_has_bits(value->value.type)) { |
| 9632 | return &value->value; |
| 9633 | } |
| 9631 | 9634 | ir_add_error(ira, value, buf_sprintf("unable to evaluate constant expression")); |
| 9632 | 9635 | return nullptr; |
| 9633 | 9636 | case ConstValSpecialUndef: |
| ... | ... | @@ -16129,8 +16132,14 @@ static TypeTableEntry *ir_analyze_container_init_fields_union(IrAnalyze *ira, Ir |
| 16129 | 16132 | if (casted_field_value == ira->codegen->invalid_instruction) |
| 16130 | 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 | 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 | 16143 | ConstExprValue *field_val = ir_resolve_const(ira, casted_field_value, UndefOk); |
| 16135 | 16144 | if (!field_val) |
| 16136 | 16145 | return ira->codegen->builtin_types.entry_invalid; |