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.

Reply via email to