aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-07-15 14:49:20 +0100
committergingerBill <bill@gingerbill.org>2024-07-15 14:49:20 +0100
commit1e37eaf54daf885636ea3ad9606a2b54e01721f9 (patch)
tree207c49870eb711412d08394d5ee4b169797f5d73 /src/check_type.cpp
parent5cefab8229514c308c4676bbd86db7a8b3d2c5f5 (diff)
Begin work for `bit_set[...; [N]T]` (not working)
Diffstat (limited to 'src/check_type.cpp')
-rw-r--r--src/check_type.cpp21
1 files changed, 4 insertions, 17 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp
index fea937e4e..e3609970a 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -939,22 +939,6 @@ gb_internal void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *nam
enum_type->Enum.max_value_index = max_value_index;
}
-gb_internal bool is_valid_bit_field_backing_type(Type *type) {
- if (type == nullptr) {
- return false;
- }
- type = base_type(type);
- if (is_type_untyped(type)) {
- return false;
- }
- if (is_type_integer(type)) {
- return true;
- }
- if (type->kind == Type_Array) {
- return is_type_integer(type->Array.elem);
- }
- return false;
-}
gb_internal void check_bit_field_type(CheckerContext *ctx, Type *bit_field_type, Type *named_type, Ast *node) {
ast_node(bf, BitFieldType, node);
@@ -1268,11 +1252,14 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t
Type *t = default_type(lhs.type);
if (bs->underlying != nullptr) {
Type *u = check_type(c, bs->underlying);
+ // if (!is_valid_bit_field_backing_type(u)) {
if (!is_type_integer(u)) {
gbString ts = type_to_string(u);
error(bs->underlying, "Expected an underlying integer for the bit set, got %s", ts);
gb_string_free(ts);
- return;
+ if (!is_valid_bit_field_backing_type(u)) {
+ return;
+ }
}
type->BitSet.underlying = u;
}