Here's version 2 of this patch series. This is now 6 patches.
The first two patches correspond to the two patches from the original patch series (and must both be applied together to make sense). They convert cgraph_node and varpool_node to inherit from symtab_node_base, eliminating union symtab_node_def, and the "symbol" fields at the top of the two subclasses. Specifically: * Patch 1 of 6 is the hand-written part of the conversion to a C++ inheritance hierarchy, plus various workarounds for dealing with issues in how gengtype handles GTY((user)). It corresponds to "patch 1/2" in the original patch series. It is largely unchanged from the previous submission. * Patch 2 of 6 is the automated part of the conversion to C++ inheritance, corresponding to "patch 2/2" in the original series. The main improvement is that the script now removes casts to (symtab_node) where these are unnecessary i.e. almost all of them, apart from a few that I whitelisted. See refactor_symtab.py within https://github.com/davidmalcolm/gcc-refactoring-scripts for details. The remaining 4 patches rename some types: "symtab_node_base" becomes "symtab_node" (Honza's preferred name, AIUI). This would clash with the pre-existing "symtab_node", which was a typedef for: union symtab_node_def * before patch 1, and for: symtab_node_base * after it. So we eliminate this typedef, and all uses become simply a "symtab_node *", which is the bulk of the renaming. There is also a "const_symtab_node" typedef, which is eliminated; all uses become simply a "const symtab_node *". Details of these patches * Patch 3 of 6: this is trivial preparatory work before running an automated script - split up declarations of multiple symtab_node, so that each gets its own declaration. * Patch 4 of 6: this eliminates the symtab_node and const_symtab_node typedefs from ipa-ref.h * Patch 5 of 6: generated by another automated script, this time "rename_symtab.py" (as opposed to "refactor_symtab.py"), with a testsuite "test_rename_symtab.py"; again, these can be seen at: https://github.com/davidmalcolm/gcc-refactoring-scripts This performs the big renaming described above. There are some mistakes in the ChangeLog of this patch. I would fix these up manually before committing. * Patch 6 of 6: this patch updates the hand-written GTY-handling code from patch 1 to take into account the changing names of the types. Again, all 4 patches must be applied together for the code to compile. I've successfully bootstrapped: patches (1+2) and all 6 patches together on top of r202339 on x86_64-unknown-linux-gnu. For both builds all tests showed the same test results as an unpatched bootstrap of r202339. OK for trunk? David Malcolm (6): Convert symtab, cgraph and varpool nodes into a real class hierarchy Automated conversion of symtab to class hierarchy Split symtab_node declarations onto multiple lines Remove symtab_node and const_symtab_node typedefs. Automated renaming of symtab types Update hand-written GTY routines for type renaming gcc/ada/gcc-interface/trans.c | 2 +- gcc/ada/gcc-interface/utils.c | 2 +- gcc/asan.c | 10 +- gcc/c-family/c-gimplify.c | 2 +- gcc/c-family/c-pragma.c | 4 +- gcc/cfgexpand.c | 2 +- gcc/cgraph.c | 526 +++++++++++++++++++++++++++++------------- gcc/cgraph.h | 266 +++++++++++---------- gcc/cgraphbuild.c | 56 ++--- gcc/cgraphclones.c | 90 ++++---- gcc/cgraphunit.c | 327 +++++++++++++------------- gcc/config/i386/i386.c | 18 +- gcc/coverage.c | 4 +- gcc/cp/call.c | 2 +- gcc/cp/decl2.c | 26 +-- gcc/cp/lambda.c | 4 +- gcc/cp/method.c | 4 +- gcc/cp/optimize.c | 2 +- gcc/cp/tree.c | 4 +- gcc/dbxout.c | 2 +- gcc/dwarf2out.c | 4 +- gcc/gimple-fold.c | 10 +- gcc/gimplify.c | 4 +- gcc/ipa-cp.c | 72 +++--- gcc/ipa-devirt.c | 44 ++-- gcc/ipa-inline-analysis.c | 54 ++--- gcc/ipa-inline-transform.c | 52 ++--- gcc/ipa-inline.c | 168 +++++++------- gcc/ipa-profile.c | 36 +-- gcc/ipa-prop.c | 88 +++---- gcc/ipa-pure-const.c | 56 ++--- gcc/ipa-ref-inline.h | 4 +- gcc/ipa-ref.c | 34 +-- gcc/ipa-ref.h | 26 +-- gcc/ipa-reference.c | 66 +++--- gcc/ipa-split.c | 28 +-- gcc/ipa-utils.c | 92 ++++---- gcc/ipa.c | 444 +++++++++++++++++------------------ gcc/is-a.h | 8 +- gcc/java/decl.c | 2 +- gcc/lto-cgraph.c | 320 ++++++++++++------------- gcc/lto-section-in.c | 12 +- gcc/lto-streamer-in.c | 6 +- gcc/lto-streamer-out.c | 46 ++-- gcc/lto-streamer.h | 18 +- gcc/lto/lto-partition.c | 242 +++++++++---------- gcc/lto/lto-symtab.c | 245 ++++++++++---------- gcc/lto/lto.c | 34 +-- gcc/passes.c | 34 +-- gcc/symtab.c | 518 ++++++++++++++++++++--------------------- gcc/toplev.c | 6 +- gcc/trans-mem.c | 94 ++++---- gcc/tree-eh.c | 4 +- gcc/tree-emutls.c | 40 ++-- gcc/tree-inline.c | 42 ++-- gcc/tree-nested.c | 10 +- gcc/tree-pretty-print.c | 2 +- gcc/tree-profile.c | 20 +- gcc/tree-sra.c | 20 +- gcc/tree-ssa-structalias.c | 40 ++-- gcc/tree-vectorizer.c | 2 +- gcc/tree.c | 10 +- gcc/value-prof.c | 22 +- gcc/varasm.c | 32 +-- gcc/varpool.c | 142 ++++++------ 65 files changed, 2411 insertions(+), 2195 deletions(-) -- 1.7.11.7