diff --git a/tcc.c b/tcc.c index 6ef7e85..7c24ce6 100644 --- a/tcc.c +++ b/tcc.c @@ -3812,7 +3812,7 @@ static int macro_subst_tok(TokenString *tok_str, /* NOTE: empty args are allowed, except if no args */ for(;;) { /* handle '()' case */ - if (!args && tok == ')') + if (!args && !sa && tok == ')') break; if (!sa) error("macro '%s' used with too many args", diff --git a/tcctest.c b/tcctest.c index 695ddfa..494b4db 100644 --- a/tcctest.c +++ b/tcctest.c @@ -253,6 +253,12 @@ void macro_test(void) /* test macro substituion inside args (should not eat stream) */ printf("qq=%d\n", qq(qq)(2)); + /* test zero argument case. NOTE: gcc 2.95.x does not accept a + null argument without a space. gcc 3.2 fixes that. */ + +#define qq1(x) 1 + printf("qq1=%d\n", qq1( )); + /* comment with stray handling *\ / /* this is a valid *\/ comment */