aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 8880452e4..b6e5bc222 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -9123,12 +9123,16 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
type = nullptr;
// [?]Type
- if (type_expr->kind == Ast_ArrayType && type_expr->ArrayType.count != nullptr) {
+ if (type_expr->kind == Ast_ArrayType) {
Ast *count = type_expr->ArrayType.count;
- if (count->kind == Ast_UnaryExpr &&
- count->UnaryExpr.op.kind == Token_Question) {
- type = alloc_type_array(check_type(c, type_expr->ArrayType.elem), -1);
- is_to_be_determined_array_count = true;
+ if (count != nullptr) {
+ if (count->kind == Ast_UnaryExpr &&
+ count->UnaryExpr.op.kind == Token_Question) {
+ type = alloc_type_array(check_type(c, type_expr->ArrayType.elem), -1);
+ is_to_be_determined_array_count = true;
+ }
+ } else {
+ type = alloc_type_slice(check_type(c, type_expr->ArrayType.elem));
}
if (cl->elems.count > 0) {
if (type_expr->ArrayType.tag != nullptr) {
@@ -9141,8 +9145,7 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
}
}
}
- }
- if (type_expr->kind == Ast_DynamicArrayType && type_expr->DynamicArrayType.tag != nullptr) {
+ } else if (type_expr->kind == Ast_DynamicArrayType && type_expr->DynamicArrayType.tag != nullptr) {
if (cl->elems.count > 0) {
Ast *tag = type_expr->DynamicArrayType.tag;
GB_ASSERT(tag->kind == Ast_BasicDirective);
@@ -9181,6 +9184,12 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
if (cl->elems.count == 0) {
break; // NOTE(bill): No need to init
}
+
+ if (t->Struct.soa_kind != StructSoa_None) {
+ error(node, "#soa arrays are not supported for compound literals");
+ break;
+ }
+
if (t->Struct.is_raw_union) {
if (cl->elems.count > 0) {
// NOTE: unions cannot be constant