On Mon, 2013-10-28 at 22:57 -0400, David Malcolm wrote:
> On Fri, 2013-09-20 at 17:33 +0200, Jan Hubicka wrote:
> > > This patch is the handwritten part of the conversion of these types
> > > to C++; it requires the followup patch, which is autogenerated.
> > >
> > > It converts:
> > > struct symtab_node_base
> > > to:
> > > class symtab_node_base
> > >
> > > and converts:
> > > struct cgraph_node
> > > to:
> > > struct cgraph_node : public symtab_node_base
> > > and:
> > > struct varpool_node
> > > to:
> > > class varpool_node : public symtab_node_base
> > >
> > > dropping the symtab_node_def union.
> >
> > Yep, incrementally we should continue with the grand renaming
> > retiring symtab_node_base and getting things symmetric.
> > >
> > > * cgraph.h (symtab_node_base): Convert to a class;
> > > add GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"))).
> > > (cgraph_node): Inherit from symtab_node; add GTY option
> > > tag ("SYMTAB_FUNCTION").
> > > (varpool_node): Inherit from symtab_node; add GTY option
> > > tag ("SYMTAB_VARIABLE").
> > > (symtab_node_def): Remove.
> > > (is_a_helper <cgraph_node>::test (symtab_node_def *)): Convert to...
> > > (is_a_helper <cgraph_node>::test (symtab_node_base *)): ...this.
> > > (is_a_helper <varpool_node>::test (symtab_node_def *)): Convert to...
> > > (is_a_helper <varpool_node>::test (symtab_node_base *)): ...this.
> > >
> > > * ipa-ref.h (symtab_node_def): Drop.
> > > (symtab_node): Change underlying type from symtab_node_def to
> > > symtab_node_base.
> > > (const_symtab_node): Likwise.
> > >
> > > * is-a.h: Update examples in comment.
> > >
> > > * symtab.c (symtab_hash): Change symtab_node_def to symtab_node_base.
> > > (assembler_name_hash): Likewise.
> >
> > This patch is OK. Thanks for working on this!
>
> These symtab changes were dependent on having gengtype support for
> inheritance, which is now in trunk, so I'm now revisiting these patches.
>
> The above patch hasn't bitrotted, though the autogenerated one that goes
> with it needed regenerating.
>
> A new version of the autogenerated patch can be seen at:
> http://dmalcolm.fedorapeople.org/gcc/large-patches/eaba9669644c84592ea32be2dcd19ba92beca381-0003-Autogenerated-fixes-of-symbol.-to.patch
> Is that new patch OK? (it's 450KB so one's eyes tend to glaze over
> after a while, but FWIW you approved an earlier version of that in:
> http://gcc.gnu.org/ml/gcc-patches/2013-09/msg00730.html
> and the test suite for the script that generated the patch can be seen
> at:
> https://github.com/davidmalcolm/gcc-refactoring-scripts/blob/master/test_refactor_symtab.py
> )
>
> Also, I noticed when reviewing the autogenerated marking routines in
> gtype-desc.c that the symtab_node_def union had chain_next/chain_prev
> markings, and that my patch above effectively dropped them.
>
> The attached patch reinstates them, albeit to the symtab_node_base base
> class, and inspection of the generated gtype-desc.c shows that the
> generated code does the right thing.
...and here's a revised version one that avoids overlong lines.
commit 739276306f1d8f5d0b1202da21cc29b5fcac102e
Author: David Malcolm <[email protected]>
Date: Mon Oct 28 22:25:38 2013 -0400
Add chain_next and chain_prev options back to symtab_node_base
gcc/
* cgraph.h (symtab_node_base): Add missing chain_next and
chain_prev GTY options.
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 5a582d8..4cc2049 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -39,7 +39,9 @@ enum symtab_type
/* Base of all entries in the symbol table.
The symtab_node is inherited by cgraph and varpol nodes. */
-class GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"))) symtab_node_base
+class GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"),
+ chain_next ("%h.next"), chain_prev ("%h.previous")))
+ symtab_node_base
{
public:
/* Type of the symbol. */