Hi Jonathan,

Jonathan Wakely <jwakely....@gmail.com> writes:

> I don't know if GCC keeps the information you want, but according to
> the language rules there is no hierarchy. There's a type, and zero or
> more alternative names for it.  The example above makes my_s_t a
> synonym for s, not s_t.

Right. "Hierarchy" was probably a poor choice of a term for this.
I didn't mean  hierarchy in the language sense but in the AST sense.
GCC already creates a separate *_TYPE node for each typedef alias.
And you can get from any such node to the "primary node", or root
of the tree, using the TYPE_MAIN_VARIANT() macro. What I want is
to get the parent node, not the root node.


> Consider this valid code:
>
> typedef int foo;
> typedef int bar;
> typedef foo bar;
> typedef bar foo;
>
> What do you expect to see here?

Any sensible (e.g., ignoring all re-declarations) tree would work for
me. I don't particularly care if my code doesn't produce the desired
result for clinical cases like the above.

> You want to track size_t, what if someone uses __typeof__(sizeof(1)),
> does that count?

I am fine with it not counting.


> What about std::size_t?

This one is actually covered. In GCC AST std::size_t node is the same
as ::size_t (i.e., GCC does not create new *_TYPE node for using-
declarations).


> That could be defined as a synonym for __SIZE_TYPE__ or decltype(sizeof(1))
> so is not in a sequence of typedef declarations that includes size_t.

If it were defined as one of these, I could then check for both ::size_t
and ::std::size_t.

Thanks,
        Boris

Reply via email to