From 3a922ad2ba5298e0a84b33cce7fe4bd2dc9622c2 Mon Sep 17 00:00:00 2001 From: Philip Date: Sat, 2 May 2015 12:14:14 +0000 Subject: [PATCH] tccpp.c: fix ##-in-macros logic The old code had an inverted condition, so #define a(b)## b would be accepted while #define a(b,c) b ## ## c would be rejected with the confusing error message "'##' invalid at start of macro". --- tccpp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tccpp.c b/tccpp.c index 8a063005..05aa9d55 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1296,7 +1296,7 @@ ST_FUNC void parse_define(void) ptok = 0; macro_list_start = 1; while (tok != TOK_LINEFEED && tok != TOK_EOF) { - if (!macro_list_start && spc == 2 && tok == TOK_TWOSHARPS) + if (macro_list_start && spc == 2 && tok == TOK_TWOSHARPS) tcc_error("'##' invalid at start of macro"); ptok = tok; /* remove spaces around ## and after '#' */ @@ -1310,9 +1310,9 @@ ST_FUNC void parse_define(void) goto skip; } tok_str_add2(&str, tok, &tokc); + macro_list_start = 0; skip: next_nomacro_spc(); - macro_list_start = 0; } if (ptok == TOK_TWOSHARPS) tcc_error("'##' invalid at end of macro");