From 4907129077dc1586081f4128c1068badfaf0910f Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Thu, 14 Jul 2011 20:34:42 -0400 Subject: [PATCH] Forbid arrays of functions. --- src/parse-decl.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/parse-decl.c b/src/parse-decl.c index 0cf830d..47b60a3 100644 --- a/src/parse-decl.c +++ b/src/parse-decl.c @@ -333,6 +333,21 @@ check_rettypes(struct cdecl_declarator **p, struct cdecl_declarator *d) return 0; } +static int +check_arrays(struct cdecl_declarator **p, struct cdecl_declarator *d) +{ + if (!d->child || d->child->type != CDECL_DECL_ARRAY) + return 0; + + switch (d->type) { + case CDECL_DECL_FUNCTION: + fprintf(stderr, "array members cannot be functions\n"); + return -1; + } + + return 0; +} + /* * Traverse the parse tree, calling a function on every declarator in a * depth-first preorder traversal. The function is given a pointer to the @@ -398,6 +413,8 @@ struct cdecl *cdecl_parse_decl(const char *declstr) goto err; if (!forall_declarators(i, check_rettypes)) goto err; + if (!forall_declarators(i, check_arrays)) + goto err; if (!valid_declspecs(i, true)) goto err; -- 2.43.2