cproc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/cproc
Log | Files | Refs | Submodules | README | LICENSE

commit 29cfc017cad90d2755ddabc3a642267923e6a21f
parent 18c5bbf727faf6fb30a8809b6f7900a59c07897f
Author: Michael Forney <mforney@mforney.org>
Date:   Sat,  6 Apr 2019 22:49:23 -0700

expr: Handle parenthesized paremeter name in __builtin_va_start

FreeBSD defines va_start(ap, last)=__builtin_va_start((ap), (last))

Diffstat:
Mexpr.c | 7+++++--
1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/expr.c b/expr.c @@ -395,7 +395,7 @@ static struct expr *condexpr(struct scope *); static struct expr * builtinfunc(struct scope *s, enum builtinkind kind) { - struct expr *e; + struct expr *e, *param; struct type *t; char *name; uint64_t offset; @@ -458,7 +458,10 @@ builtinfunc(struct scope *s, enum builtinkind kind) e->builtin.kind = BUILTINVASTART; e->builtin.arg = exprconvert(assignexpr(s), &typevalistptr); expect(TCOMMA, "after va_list"); - free(expect(TIDENT, "after ','")); + param = assignexpr(s); + if (param->kind != EXPRIDENT) + error(&tok.loc, "expected parameter identifier"); + delexpr(param); // XXX: check that this was actually a parameter name? break; default: