aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.c
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-06-05 18:01:41 +0100
committerGinger Bill <bill@gingerbill.org>2017-06-05 18:01:41 +0100
commiteba2c74bff8f987e4bec7572cb3b2031261c237d (patch)
tree5751a6c8f4cfddb4938621f49861b9392b427292 /src/check_expr.c
parentebe5beaafd90bccaee2ece8510e61d2cbf7a81c2 (diff)
Allow 128 bit map keys
Diffstat (limited to 'src/check_expr.c')
-rw-r--r--src/check_expr.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/check_expr.c b/src/check_expr.c
index 866a5f1a4..667ae48fd 100644
--- a/src/check_expr.c
+++ b/src/check_expr.c
@@ -2250,6 +2250,23 @@ bool check_is_vector_elem(Checker *c, AstNode *expr) {
return false;
}
+bool check_is_not_addressable(Checker *c, Operand *o) {
+ if (o->mode != Addressing_Variable) {
+ return true;
+ }
+ if (is_type_bit_field_value(o->type)) {
+ return true;
+ }
+ if (check_is_expr_vector_index(c, o->expr)) {
+ return true;
+ }
+ if (check_is_vector_elem(c, o->expr)) {
+ return true;
+ }
+
+ return false;
+}
+
void check_unary_expr(Checker *c, Operand *o, Token op, AstNode *node) {
switch (op.kind) {
case Token_And: { // Pointer address
@@ -2257,11 +2274,7 @@ void check_unary_expr(Checker *c, Operand *o, Token op, AstNode *node) {
o->type = make_type_pointer(c->allocator, o->type);
return;
}
-
- if (o->mode != Addressing_Variable ||
- check_is_expr_vector_index(c, o->expr) ||
- check_is_vector_elem(c, o->expr) ||
- is_type_bit_field_value(o->type)) {
+ if (check_is_not_addressable(c, o)) {
if (ast_node_expect(node, AstNode_UnaryExpr)) {
ast_node(ue, UnaryExpr, node);
gbString str = expr_to_string(ue->expr);