From 45d844f9d2f3791bd4dd06724d6835a6a6ebd2c4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 21 Nov 2019 20:05:45 +0000 Subject: [PATCH] Disable #soa compound literals --- src/check_expr.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c8c1cdc23..bb95f875e 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7194,6 +7194,28 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type type = alloc_type_array(check_type(c, cl->type->ArrayType.elem), -1); is_to_be_determined_array_count = true; } + if (cl->elems.count > 0) { + if (cl->type->ArrayType.tag != nullptr) { + Ast *tag = cl->type->ArrayType.tag; + GB_ASSERT(tag->kind == Ast_BasicDirective); + String name = tag->BasicDirective.name; + if (name == "soa") { + error(node, "#soa arrays are not supported for compound literals"); + return kind; + } + } + } + } + if (cl->type->kind == Ast_DynamicArrayType && cl->type->DynamicArrayType.tag != nullptr) { + if (cl->elems.count > 0) { + Ast *tag = cl->type->DynamicArrayType.tag; + GB_ASSERT(tag->kind == Ast_BasicDirective); + String name = tag->BasicDirective.name; + if (name == "soa") { + error(node, "#soa arrays are not supported for compound literals"); + return kind; + } + } } if (type == nullptr) {