| ... | @@ -2195,6 +2195,8 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry | ... | @@ -2195,6 +2195,8 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry |
| 2195 | int expr_field_count = container_init_expr->entries.length; | 2195 | int expr_field_count = container_init_expr->entries.length; |
| 2196 | int actual_field_count = container_type->data.structure.src_field_count; | 2196 | int actual_field_count = container_type->data.structure.src_field_count; |
| 2197 | | 2197 | |
| | 2198 | AstNode *non_const_expr_culprit = nullptr; |
| | 2199 | |
| 2198 | int *field_use_counts = allocate<int>(actual_field_count); | 2200 | int *field_use_counts = allocate<int>(actual_field_count); |
| 2199 | ConstExprValue *const_val = &get_resolved_expr(node)->const_val; | 2201 | ConstExprValue *const_val = &get_resolved_expr(node)->const_val; |
| 2200 | const_val->ok = true; | 2202 | const_val->ok = true; |
| ... | @@ -2239,11 +2241,17 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry | ... | @@ -2239,11 +2241,17 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry |
| 2239 | const_val->depends_on_compile_var = const_val->depends_on_compile_var || field_val->depends_on_compile_var; | 2241 | const_val->depends_on_compile_var = const_val->depends_on_compile_var || field_val->depends_on_compile_var; |
| 2240 | } else { | 2242 | } else { |
| 2241 | const_val->ok = false; | 2243 | const_val->ok = false; |
| | 2244 | non_const_expr_culprit = val_field_node->data.struct_val_field.expr; |
| 2242 | } | 2245 | } |
| 2243 | } | 2246 | } |
| 2244 | } | 2247 | } |
| 2245 | if (!const_val->ok) { | 2248 | if (!const_val->ok) { |
| 2246 | context->fn_entry->struct_val_expr_alloca_list.append(codegen); | 2249 | assert(non_const_expr_culprit); |
| | 2250 | if (context->fn_entry) { |
| | 2251 | context->fn_entry->struct_val_expr_alloca_list.append(codegen); |
| | 2252 | } else { |
| | 2253 | add_node_error(g, non_const_expr_culprit, buf_sprintf("unable to evaluate constant expression")); |
| | 2254 | } |
| 2247 | } | 2255 | } |
| 2248 | | 2256 | |
| 2249 | for (int i = 0; i < actual_field_count; i += 1) { | 2257 | for (int i = 0; i < actual_field_count; i += 1) { |