diff --git a/src/snc/analysis.c b/src/snc/analysis.c index 7c41527c3ad3a5403df6393448a8741084be7a73..8db6f942c330e1cc0d79dd6187d74be73e518c97 100644 --- a/src/snc/analysis.c +++ b/src/snc/analysis.c @@ -104,8 +104,7 @@ static void analyse_funcdef(Expr *defn) } p = fun_type->param_decls; - assert(p); /* invariant enforced by syntax */ - if (p->extra.e_decl->type->tag == T_VOID) + if (p && p->extra.e_decl->type->tag == T_VOID) { /* no other params should be there */ if (p->next) diff --git a/src/snc/snl.lem b/src/snc/snl.lem index 6ef3309bd24eded200b0cab100bc6a795e858a44..cc004241b3c704cf1d42dfe4005424503a516e8f 100644 --- a/src/snc/snl.lem +++ b/src/snc/snl.lem @@ -201,6 +201,7 @@ declarator(p) ::= LPAREN declarator(x) RPAREN. [PRE] { p = x; } declarator(p) ::= ASTERISK declarator(x). [PRE] { p = decl_prefix_pointer(x); } declarator(p) ::= CONST declarator(x). [PRE] { p = decl_prefix_const(x); } +param_decls(p) ::= . { p = 0; } param_decls(p) ::= param_decl(x). { p = x; } param_decls(p) ::= param_decls(xs) COMMA param_decl(x). { p = link_expr(xs, x); }