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