aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-03-05 20:18:25 +0300
committerseyko <seyko2@gmail.com>2015-03-05 20:18:25 +0300
commitd9b87c087c93034a68e8013201c24b506504af20 (patch)
tree96b7420eeb45d32931c5adcdf263568b38d14abb /tccgen.c
parent4b92dbf9237c5712d2ab3a2ce3fab7904c85dad2 (diff)
downloadtinycc-d9b87c087c93034a68e8013201c24b506504af20.tar.gz
tinycc-d9b87c087c93034a68e8013201c24b506504af20.tar.bz2
fixing decl_initializer() for size_only: don't eat ')'
a test program: struct { int c[1]; } s1[] = { (int)0 }; /* OK */ struct { int c[1]; } s2[] = { { ((int)0) } }; /* OK */ struct { int c[1]; } s3[] = { 0 }; /* OK */ struct { int c[1]; } sx[] = { ((int)0) }; /* error: ')' expected (got "}") */ int main() { return 0; }
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/tccgen.c b/tccgen.c
index 64033b2..e86ff4a 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5605,12 +5605,18 @@ static void decl_initializer(CType *type, Section *sec, unsigned long c,
(tok != '}' && tok != ',')) && tok != -1) {
if (tok == '(')
parlevel++;
- else if (tok == ')')
+ else if (tok == ')') {
+ if (parlevel == 0 && parlevel1 == 0)
+ break;
parlevel--;
+ }
else if (tok == '{')
parlevel1++;
- else if (tok == '}')
+ else if (tok == '}') {
+ if (parlevel == 0 && parlevel1 == 0)
+ break;
parlevel1--;
+ }
next();
}
} else {