This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: A question about TYPE_ARG_TYPES
Ian Lance Taylor wrote:
> Kazu Hirata <kazu@codesourcery.com> writes:
>
>> I keep finding places in GCC sources that check whether a member of
>> TYPE_ARG_TYPES is 0. For example,
>>
>> for (link = TYPE_ARG_TYPES (function_or_method_type);
>> link && TREE_VALUE (link);
>> link = TREE_CHAIN (link))
>> gen_type_die (TREE_VALUE (link), context_die);
>>
>> Notice that TREE_VALUE (link) is part of the loop condition.
>>
>> Now, do we ever allow a NULL in TYPE_ARG_TYPES? If so, what does that
>> mean? My guess is that soneone was trying to be cautious about
>> encountering a NULL in TYPE_ARG_TYPES. (If that's the case, we should
>> be using gcc_assert instead.)
>
> Just guessing here, but what happens with an old-style function
> definition in C?
>
We end up with null type_arg_types in some cases with old style function
definitions, yes.
I believe it also happens with varargs functions in some cases, if there
was nothing but a varargs parameter.
Like:
void foo(...)
{
}
If you look at count_num_arguments in tree-ssa-structalias, add an
assert, and bootstrap, you can find the cases pretty quickly.
--Dan