aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-19 18:34:25 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-23 23:29:45 +0200
commit7cdd65dd26cc523b3ff6d4acfc19488a47be8d7b (patch)
tree168929153c01e6181f66df77a6f396b62680ac55
parent0de9fc21de2cc26038b9b07d3b80e9c5cd84ec30 (diff)
downloadsparse-7cdd65dd26cc523b3ff6d4acfc19488a47be8d7b.tar.gz
allow [*] in array declarators
Since C99, a '*' is allowed in an abstract array declarator to specify that the array is a VLA with a yet-to-be-determined size. So, accept this construction (but still ignore it for now). Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--parse.c7
-rw-r--r--validation/abstract-array-declarator-star.c1
2 files changed, 6 insertions, 2 deletions
diff --git a/parse.c b/parse.c
index c7ca3dce..6db70f1a 100644
--- a/parse.c
+++ b/parse.c
@@ -1717,7 +1717,12 @@ static struct token *abstract_array_declarator(struct token *token, struct symbo
has_static |= (sym->op->type & KW_STATIC);
token = token->next;
}
- token = assignment_expression(token, &expr);
+ if (match_op(token, '*') && match_op(token->next, ']')) {
+ // FIXME: '[*]' is treated like '[]'
+ token = token->next;
+ } else {
+ token = assignment_expression(token, &expr);
+ }
sym->array_size = expr;
return token;
}
diff --git a/validation/abstract-array-declarator-star.c b/validation/abstract-array-declarator-star.c
index fdbdff19..fc42da3a 100644
--- a/validation/abstract-array-declarator-star.c
+++ b/validation/abstract-array-declarator-star.c
@@ -5,5 +5,4 @@ void ok9(int a[const volatile restrict *]);
/*
* check-name: abstract-array-declarator-star
- * check-known-to-fail
*/