diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-06-05 18:01:41 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-06-05 18:01:41 +0100 |
| commit | eba2c74bff8f987e4bec7572cb3b2031261c237d (patch) | |
| tree | 5751a6c8f4cfddb4938621f49861b9392b427292 /src/check_expr.c | |
| parent | ebe5beaafd90bccaee2ece8510e61d2cbf7a81c2 (diff) | |
Allow 128 bit map keys
Diffstat (limited to 'src/check_expr.c')
| -rw-r--r-- | src/check_expr.c | 23 |
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); |