mirror of
https://github.com/mirror/tinycc.git
synced 2025-02-04 06:30:10 +08:00
clarify support for functions returning an array (try#2)
fixes first attempt: http://repo.or.cz/w/tinycc.git/commitdiff/31fe1cc
This commit is contained in:
parent
91163f167e
commit
9ff91d4c6f
13
tccgen.c
13
tccgen.c
@ -3108,16 +3108,21 @@ static void post_type(CType *type, AttributeDef *ad)
|
|||||||
if (l == 0)
|
if (l == 0)
|
||||||
l = FUNC_OLD;
|
l = FUNC_OLD;
|
||||||
skip(')');
|
skip(')');
|
||||||
t1 = type->t & VT_STORAGE;
|
|
||||||
/* NOTE: const is ignored in returned type as it has a special
|
/* NOTE: const is ignored in returned type as it has a special
|
||||||
meaning in gcc / C++ */
|
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
|
/* some ancient pre-K&R C allows a function to return an array
|
||||||
and the array brackets to be put after the arguments, such
|
and the array brackets to be put after the arguments, such
|
||||||
that "int c()[]" means the same as "int[] c()" */
|
that "int c()[]" means something like "int[] c()" */
|
||||||
post_type(type, ad);
|
if (tok == '[') {
|
||||||
|
next();
|
||||||
|
skip(']'); /* only handle simple "[]" */
|
||||||
|
type->t |= VT_PTR;
|
||||||
|
}
|
||||||
/* we push a anonymous symbol which will contain the function prototype */
|
/* we push a anonymous symbol which will contain the function prototype */
|
||||||
ad->func_args = arg_size;
|
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 = sym_push(SYM_FIELD, type, INT_ATTR(ad), l);
|
||||||
s->next = first;
|
s->next = first;
|
||||||
type->t = t1 | VT_FUNC;
|
type->t = t1 | VT_FUNC;
|
||||||
|
Loading…
Reference in New Issue
Block a user