From e7e7a0d3013c2da483c48a1a0a4c13bcf08716ad Mon Sep 17 00:00:00 2001 From: seyko Date: Fri, 25 Sep 2015 01:44:23 +0300 Subject: [PATCH] a number as a field name a test program: ======== typedef struct X { int len; } X; int main(void) { X myX; myX.10 = 10; return 0; } ======== Error message before a patch: error: ';' expected (got "(null)") After a patch: error: field name expected --- tccgen.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tccgen.c b/tccgen.c index fcec8f1..4d85414 100644 --- a/tccgen.c +++ b/tccgen.c @@ -4152,7 +4152,7 @@ ST_FUNC void unary(void) if (tok == TOK_INC || tok == TOK_DEC) { inc(1, tok); next(); - } else if (tok == '.' || tok == TOK_ARROW) { + } else if (tok == '.' || tok == TOK_ARROW || tok == TOK_CDOUBLE) { int qualifiers; /* field */ if (tok == TOK_ARROW) @@ -4160,10 +4160,12 @@ ST_FUNC void unary(void) qualifiers = vtop->type.t & (VT_CONSTANT | VT_VOLATILE); test_lvalue(); gaddrof(); - next(); /* expect pointer on structure */ if ((vtop->type.t & VT_BTYPE) != VT_STRUCT) expect("struct or union"); + if (tok == TOK_CDOUBLE) + expect("field name"); + next(); s = vtop->type.ref; /* find field */ tok |= SYM_FIELD;