Ian Lance Taylor wrote:
> Kazu Hirata <[EMAIL PROTECTED]> 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

Reply via email to