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; }
This commit is contained in:
seyko 2015-03-05 20:18:25 +03:00
parent 4b92dbf923
commit d9b87c087c

View File

@ -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 {