commit c50c0b5735d98f2503f99c215efae6c88c7a46c1 Author: Roberto E. Vargas Caballero <k...@shike2.com> AuthorDate: Tue Jul 5 08:35:20 2016 +0200 Commit: Roberto E. Vargas Caballero <k...@shike2.com> CommitDate: Tue Jul 5 08:35:20 2016 +0200
[cc1] Fix function alike macro without arguments This case was not tested and there was an error parsing this case, because we were checking yytoken, but in this case we are still in '(', because cpp.c:parameter pass to the next token before checking. diff --git a/cc1/cpp.c b/cc1/cpp.c index 96e6404..3f572a8 100644 --- a/cc1/cpp.c +++ b/cc1/cpp.c @@ -163,7 +163,9 @@ parsepars(char *buffer, char **listp, int nargs) n = 0; argp = buffer; arglen = INPUTSIZ; - if (yytoken != ')') { + if (ahead() == ')') { + next(); + } else { do { *listp++ = argp; parameter(); diff --git a/cc1/tests/test064.c b/cc1/tests/test064.c new file mode 100644 index 0000000..037bfe5 --- /dev/null +++ b/cc1/tests/test064.c @@ -0,0 +1,32 @@ +/* See LICENSE file for copyright and license details. */ + +/* +name: TEST064 +description: Test function alike macro without parenthesis +error: +output: +G5 I F "main +{ +\ +S1 " #N2 #N1 +M2 I "f #N0 +A6 S1 "s + A6 M2 .I #I0 :I + h A6 M2 .I +} +*/ + +#define x f +#define y() f + +typedef struct { int f; } S; + +int +main() +{ + S s; + + s.x = 0; + return s.y(); +} +