From d9b87c087c93034a68e8013201c24b506504af20 Mon Sep 17 00:00:00 2001 From: seyko Date: Thu, 5 Mar 2015 20:18:25 +0300 Subject: [PATCH] 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; } --- tccgen.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tccgen.c b/tccgen.c index 64033b2c..e86ff4ab 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 { -- 2.11.4.GIT