From 2dc09d20d6107588dd418ff802f866207fb0fa10 Mon Sep 17 00:00:00 2001 From: lemon Date: Mon, 22 Dec 2025 09:25:52 +0100 Subject: preprocessor make some errors just warnings --- c/lex.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'c/lex.c') diff --git a/c/lex.c b/c/lex.c index b08a704..d6aa95a 100644 --- a/c/lex.c +++ b/c/lex.c @@ -1048,11 +1048,13 @@ expandfnmacro(struct lexer *lx, struct span *span, internstr mname, struct macro ++i; } joinspan(&span->ex, tk.span.ex); - if (narg < mac->nparam) - error(span, "macro `%s' passed %d arguments, but takes %d", mname, narg, mac->nparam); - else if (toomany) { + if (narg < mac->nparam) { + warn(span, "macro `%s' passed %d arguments, but takes %d", mname, narg, mac->nparam); + for (int i = narg; i < mac->nparam; ++i) + args[i].n = 0; + } else if (toomany) { joinspan(&excessspan.ex, tk.span.ex); - error(&excessspan, "macro `%s' passed %d arguments, but takes just %d", mname, narg, mac->nparam); + warn(&excessspan, "macro `%s' passed %d arguments, but takes just %d", mname, narg, mac->nparam); } if (mac->special) { mac->handlerfn(lx, &tk, (struct rlist){argsbuf.p, argsbuf.n}); -- cgit v1.2.3