aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-09-25 01:44:23 +0300
committerseyko <seyko2@gmail.com>2015-09-25 01:44:23 +0300
commite7e7a0d3013c2da483c48a1a0a4c13bcf08716ad (patch)
treee44d5b1047e389b81d8743eb937850a5de1e4d66 /tccgen.c
parenteb870b006c969d16002fc724d5bbfe33287801e5 (diff)
downloadtinycc-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
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c6
1 files 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;