From a3fc54345949535524d01319e1ca6378b7c2c201 Mon Sep 17 00:00:00 2001 From: jiang <30155751@qq.com> Date: Sun, 29 Jun 2014 20:35:57 +0800 Subject: [PATCH] bug: ---------------------------------------------------------------------- #define hexCh(c (c >= 10 ? 'a' + c - 10 : '0' + c) hexCh(c); out: jiang@jiang:~/test$ ./tcc -E c4.c # 1 "c4.c" (c >= 10 ? 'a' + c - 10 : '0' + c); --------------------------------------------------------------- #define hexCh(c/3) (c >= 10 ? 'a' + c - 10 : '0' + c) hexCh(c); out: jiang@jiang:~/test$ ./tcc -E c4.c # 1 "c4.c" /3) (c >= 10 ? 'a' + c - 10 : '0' + c); jiang@jiang:~/test$ after patch: # 1 "c4.c" c4.c:1: error: may not appear in macro parameter list: "(" jiang@jiang:~/test$ jiang@jiang:~/test$ ./tcc -E c4.c # 1 "c4.c" c4.c:1: error: may not appear in macro parameter list: "/" jiang@jiang:~/test$ --- tccpp.c | 7 +++---- tests/tests2/68_macro_concat.c | 9 +++++++++ tests/tests2/68_macro_concat.expect | 1 + tests/tests2/69_macro_concat.c | 9 +++++++++ tests/tests2/69_macro_concat.expect | 1 + tests/tests2/Makefile | 4 +++- 6 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 tests/tests2/68_macro_concat.c create mode 100644 tests/tests2/68_macro_concat.expect create mode 100644 tests/tests2/69_macro_concat.c create mode 100644 tests/tests2/69_macro_concat.expect diff --git a/tccpp.c b/tccpp.c index 2da65cd2..0cea7cfb 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1239,16 +1239,15 @@ ST_FUNC void parse_define(void) next_nomacro(); } if (varg < TOK_IDENT) - tcc_error("badly punctuated parameter list"); + tcc_error( "\'%s\' may not appear in parameter list", get_tok_str(varg, NULL)); s = sym_push2(&define_stack, varg | SYM_FIELD, is_vaargs, 0); *ps = s; ps = &s->next; if (tok != ',') - break; + continue; next_nomacro(); } - if (tok == ')') - next_nomacro_spc(); + next_nomacro_spc(); t = MACRO_FUNC; } tok_str_new(&str); diff --git a/tests/tests2/68_macro_concat.c b/tests/tests2/68_macro_concat.c new file mode 100644 index 00000000..5c1361f9 --- /dev/null +++ b/tests/tests2/68_macro_concat.c @@ -0,0 +1,9 @@ +#include +#define hexCh(c (c >= 10 ? 'a' + c - 10 : '0' + c) + +int main(void) +{ + int c = 0xa; + printf("hex: %c\n", hexCh(c)); + return 0; +} diff --git a/tests/tests2/68_macro_concat.expect b/tests/tests2/68_macro_concat.expect new file mode 100644 index 00000000..0bf7d54b --- /dev/null +++ b/tests/tests2/68_macro_concat.expect @@ -0,0 +1 @@ +68_macro_concat.c:2: error: '(' may not appear in parameter list diff --git a/tests/tests2/69_macro_concat.c b/tests/tests2/69_macro_concat.c new file mode 100644 index 00000000..3b163134 --- /dev/null +++ b/tests/tests2/69_macro_concat.c @@ -0,0 +1,9 @@ +#include +#define hexCh(c/3) (c >= 10 ? 'a' + c - 10 : '0' + c) + +int main(void) +{ + int c = 0xa; + printf("hex: %c\n", hexCh(c)); + return 0; +} diff --git a/tests/tests2/69_macro_concat.expect b/tests/tests2/69_macro_concat.expect new file mode 100644 index 00000000..89e7b79b --- /dev/null +++ b/tests/tests2/69_macro_concat.expect @@ -0,0 +1 @@ +69_macro_concat.c:2: error: '/' may not appear in parameter list diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile index c47fe0a3..64532a1b 100644 --- a/tests/tests2/Makefile +++ b/tests/tests2/Makefile @@ -82,7 +82,9 @@ TESTS = \ 64_macro_nesting.test \ 65_macro_concat_start.test \ 66_macro_concat_end.test \ - 67_macro_concat.test + 67_macro_concat.test \ + 68_macro_concat.test \ + 69_macro_concat.test # 34_array_assignment.test -- array assignment is not in C standard -- 2.11.4.GIT