diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-07-19 18:34:25 +0200 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-07-23 23:29:45 +0200 |
commit | 7cdd65dd26cc523b3ff6d4acfc19488a47be8d7b (patch) | |
tree | 168929153c01e6181f66df77a6f396b62680ac55 | |
parent | 0de9fc21de2cc26038b9b07d3b80e9c5cd84ec30 (diff) | |
download | sparse-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.c | 7 | ||||
-rw-r--r-- | validation/abstract-array-declarator-star.c | 1 |
2 files changed, 6 insertions, 2 deletions
@@ -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 */ |