clarify support for functions returning an array (try#2)

fixes first attempt:
http://repo.or.cz/w/tinycc.git/commitdiff/31fe1cc
master
Joe Soroka 2011-03-08 15:12:09 -08:00
parent 91163f167e
commit 9ff91d4c6f
1 changed files with 9 additions and 4 deletions

View File

@ -3108,16 +3108,21 @@ static void post_type(CType *type, AttributeDef *ad)
if (l == 0)
l = FUNC_OLD;
skip(')');
t1 = type->t & VT_STORAGE;
/* NOTE: const is ignored in returned type as it has a special
meaning in gcc / C++ */
type->t &= ~(VT_STORAGE | VT_CONSTANT);
type->t &= ~VT_CONSTANT;
/* some ancient pre-K&R C allows a function to return an array
and the array brackets to be put after the arguments, such
that "int c()[]" means the same as "int[] c()" */
post_type(type, ad);
that "int c()[]" means something like "int[] c()" */
if (tok == '[') {
next();
skip(']'); /* only handle simple "[]" */
type->t |= VT_PTR;
}
/* we push a anonymous symbol which will contain the function prototype */
ad->func_args = arg_size;
t1 = type->t & VT_STORAGE;
type->t &= ~VT_STORAGE;
s = sym_push(SYM_FIELD, type, INT_ATTR(ad), l);
s->next = first;
type->t = t1 | VT_FUNC;