- Bitstruct accidentally allowed other arrays than char arrays #2836

This commit is contained in:
Christoffer Lerno
2026-01-25 12:14:34 +01:00
parent 8bd942c1b8
commit cf9784afee
5 changed files with 16 additions and 6 deletions

View File

@@ -1107,11 +1107,10 @@ static bool sema_analyse_bitstruct(SemaContext *context, Decl *decl, bool *erase
decl->strukt.little_endian = false;
}
Type *base_type = type->type_kind == TYPE_ARRAY ? type_flatten(type->array.base) : type;
if (!type_is_integer(base_type))
if (!type_is_integer(base_type) || (type->type_kind == TYPE_ARRAY && type_size(type->array.base) > 1))
{
SEMA_ERROR(decl->strukt.container_type, "The type of the bitstruct cannot be %s but must be an integer or an array of integers.",
type_quoted_error_string(decl->strukt.container_type->type));
return false;
RETURN_SEMA_ERROR(decl->strukt.container_type, "The type of the bitstruct cannot be %s but must be an integer or an array of chars.",
type_quoted_error_string(decl->strukt.container_type->type));
}
Decl **members = decl->strukt.members;
unsigned member_count = vec_size(members);