Hi,
On Fri, 20 Sep 2013, David Malcolm wrote:
> Treat GTY structs that have a "desc" as being the root of an inheritance
> hierarchy. Generate a switch on desc within the marking function with
> cases for each subclass, visiting all fields of the type (including
> inherited ones).
Yay! Thanks for working on that. I miss a change in set_gc_used_type
to mark base classes. When you construct a testcase where only derived
classes are used it should break because the base class marker isn't
emitted.
Apart from that I think I like it, there's a potential quadratic loop in
walk_subclasses, but I guess it doesn't really matter for the number of
gty types we have (and could be changed via a list of all derived classes
per base class if necessary).
Yes, it needs some updates to the documentation. Some minor nits:
> @@ -2960,8 +3002,21 @@ walk_type (type_p t, struct walk_type_data *d)
> d->indent += 2;
> oprintf (d->of, "%*s{\n", d->indent, "");
> }
> + else
> + {
> + if (desc)
> + {
else if (desc)
{
> }
> + else
> + {
> + if (desc)
> + {
Same.
> @@ -4076,7 +4162,9 @@ write_local (outf_p output_header, type_p structures,
> type_p param_structs)
> || ((s)->gc_used == GC_MAYBE_POINTED_TO \
> && s->u.s.line.file != NULL) \
> || ((s)->gc_used == GC_USED \
> - && strncmp (s->u.s.tag, "anonymous", strlen ("anonymous"))))))
> + && strncmp (s->u.s.tag, "anonymous", strlen ("anonymous"))) \
> + || (s->u.s.base_class))))
> +
>
>
Watch for vertical white space.
Ciao,
Michael.