diff options
| author | seyko <seyko2@gmail.com> | 2015-09-25 01:44:23 +0300 |
|---|---|---|
| committer | seyko <seyko2@gmail.com> | 2015-09-25 01:44:23 +0300 |
| commit | e7e7a0d3013c2da483c48a1a0a4c13bcf08716ad (patch) | |
| tree | e44d5b1047e389b81d8743eb937850a5de1e4d66 | |
| parent | eb870b006c969d16002fc724d5bbfe33287801e5 (diff) | |
| download | tinycc-e7e7a0d3013c2da483c48a1a0a4c13bcf08716ad.tar.gz tinycc-e7e7a0d3013c2da483c48a1a0a4c13bcf08716ad.tar.bz2 | |
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
| -rw-r--r-- | tccgen.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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; |
