diff options
-rw-r--r-- | doc/c23.md | 6 | ||||
-rw-r--r-- | qbe.c | 4 | ||||
-rw-r--r-- | test/func-unnamed-param.c | 1 | ||||
-rw-r--r-- | test/func-unnamed-param.qbe | 6 |
4 files changed, 15 insertions, 2 deletions
@@ -25,6 +25,11 @@ In previous revisions of C, labels like `foo:`, `case 123:`, or and they can now appear intermixed with declarations in compound statements. +## [N2510]: Allow unnamed parameters in a function definition + +C23 allows you to omit the name of a parameter in the prototype of +a function definition that does not use that parameter. + ## [N2549]: Binary integer constants C23 allows binary integer constants in addition to octal, decimal, @@ -33,4 +38,5 @@ and hexadecimal, using syntax like `0b01101011`. [N2265]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2265.pdf [N2418]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2418.pdf [N2508]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2508.pdf +[N2510]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2510.pdf [N2549]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2549.pdf @@ -487,12 +487,12 @@ mkfunc(struct decl *decl, char *name, struct type *t, struct scope *s) /* allocate space for parameters */ for (p = t->u.func.params; p; p = p->next) { - if (!p->name) - error(&tok.loc, "parameter name omitted in definition of function '%s'", name); pt = t->u.func.isprototype ? p->type : typepromote(p->type, -1); emittype(pt); p->value = xmalloc(sizeof(*p->value)); functemp(f, p->value); + if(!p->name) + continue; d = mkdecl(DECLOBJECT, p->type, p->qual, LINKNONE); if (p->type->value) { d->value = p->value; diff --git a/test/func-unnamed-param.c b/test/func-unnamed-param.c new file mode 100644 index 0000000..30680b8 --- /dev/null +++ b/test/func-unnamed-param.c @@ -0,0 +1 @@ +void f(int) {} diff --git a/test/func-unnamed-param.qbe b/test/func-unnamed-param.qbe new file mode 100644 index 0000000..d4087cd --- /dev/null +++ b/test/func-unnamed-param.qbe @@ -0,0 +1,6 @@ +export +function $f(w %.1) { +@start.1 +@body.2 + ret +} |