This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A question about TYPE_ARG_TYPES


Hi Ian,

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?

void f();

AFAIK, that gets TYPE_ARG_TYPES (...) == NULL, so we don't even get to evaluate TREE_VALUE (TYPE_ARG_TYPES (...)).


On IRC, Daniel Berlin claims that there are some weird cases where TREE_VALUE (TYPE_ARG_TYPES (...)) is NULL. I'll keep putting gcc_assert to see what happens.

Kazu Hirata


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]