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); }