diff -urN tinycc.old/tccgen.c tinycc/tccgen.c --- tinycc.old/tccgen.c 2015-03-08 11:56:19.000000000 +0300 +++ tinycc/tccgen.c 2015-03-08 11:56:33.000000000 +0300 @@ -5533,34 +5533,10 @@ s->c = array_length; } else if ((type->t & VT_BTYPE) == VT_STRUCT && (sec || !first || tok == '{')) { - int par_count; /* NOTE: the previous test is a specific case for automatic struct/union init */ - /* XXX: union needs only one init */ - /* XXX: this test is incorrect for local initializers - beginning with ( without {. It would be much more difficult - to do it correctly (ideally, the expression parser should - be used in all cases) */ - par_count = 0; - if (tok == '(') { - AttributeDef ad1; - CType type1; - next(); - while (tok == '(') { - par_count++; - next(); - } - if (!parse_btype(&type1, &ad1)) - expect("cast"); - type_decl(&type1, &ad1, &n, TYPE_ABSTRACT); -#if 0 - if (!is_assignable_types(type, &type1)) - tcc_error("invalid type for cast"); -#endif - skip(')'); - } no_oblock = 1; if (first || tok == '{') { skip('{'); @@ -5633,10 +5609,6 @@ } if (!no_oblock) skip('}'); - while (par_count) { - skip(')'); - par_count--; - } } else if (tok == '{') { int par_count = 0; next();