+ /* § 6.7.5 (22) array initializers for arrays with unknown size determine
+ * the array type size */
+ if(is_type_array(type) && type->array.size_expression == NULL
+ && result != NULL) {
+ size_t size;
+ switch (result->kind) {
+ case INITIALIZER_LIST:
+ size = max_index + 1;
+ break;
+
+ case INITIALIZER_STRING:
+ size = result->string.string.size;
+ break;
+
+ case INITIALIZER_WIDE_STRING:
+ size = result->wide_string.string.size;
+ break;
+
+ default:
+ panic("invalid initializer type");
+ }
+
+ expression_t *cnst = allocate_expression_zero(EXPR_CONST);
+ cnst->base.type = type_size_t;
+ cnst->conste.v.int_value = size;
+
+ type_t *new_type = duplicate_type(type);
+
+ new_type->array.size_expression = cnst;
+ new_type->array.size_constant = true;
+ new_type->array.size = size;
+ env->type = new_type;
+ }
+
+ env->initializer = result;