We do not yet seem to have consensus on a long term plan. Would it be reasonable to start on short term prepatory work?
In particular, I was think we could do Add converters and testers. Change callers to use those. and maybe Change callers to use type-safe parameters. Where those mean what I earlier stated. Comments? CONVERTERS AND TESTERS ########################################### add symtab_node_base &symtab_node_def::ref_symbol() { return symbol; } symtab_node_base &cgraph_node::ref_symbol() { return symbol; } symtab_node_base &varpool_node::ref_symbol() { return symbol; } change node->symbol.whatever to node->ref_symbol().whatever ---- should not need to add these cgraph_node &symtab_node_def::ref_cgraph() { gcc_assert (symbol.type == SYMTAB_FUNCTION); return x_function; } varpool_node &symtab_node_def::ref_varpool() { gcc_assert (symbol.type == SYMTAB_VARIABLE); return x_variable; } ---- add symtab_node_base *symtab_node_def::try_symbol() { return &symbol; } cgraph_node *symtab_node_def::try_cgraph() { return symbol.type == SYMTAB_FUNCTION ? &x_function : NULL; } varpool_node *symtab_node_def::try_varpool() { return symbol.type == SYMTAB_VARIABLE ? &x_variable : NULL; } change if (symtab_function_p (node) && cgraph (node)->analyzed) return cgraph (node); to if (cgraph_node *p = node->try_cgraph()) if (p->analyzed) return p; change if (symtab_function_p (node) && cgraph (node)->callers) .... to if (cgraph_node *p = node->try_cgraph()) if (p->callers) .... change if (symtab_function_p (node)) { struct cgraph_node *cnode = cgraph (node); .... to if (cgraph_node *cnode = node->try_cgraph ()) { .... likewise "symtab_variable_p (node)" and "varpool (node)" ---- If there are any "symtab_function_p (node)" expressions left, add bool symtab_node_def::is_cgraph() { return symbol.type == SYMTAB_FUNCTION; } bool symtab_node_def::is_varpool() { return symbol.type == SYMTAB_VARIABLE; } change symtab_function_p (node) to node->is_cgraph () likewise "symtab_variable_p (node)" ---- Though we would like to avoid doing so, if there are any "cgraph (node)" or "varpool (node)" expressions left, add symtab_node_base *symtab_node_def::ptr_symbol() { return &symbol; } cgraph_node *symtab_node_def::ptr_cgraph() { gcc_assert (symbol.type == SYMTAB_FUNCTION); { return &x_function; } varpool_node *symtab_node_def::ptr_varpool() { gcc_assert (symbol.type == SYMTAB_VARIABLE); { return &x_variable; } change cgraph (node) => node->ptr_cgraph() likewise "varpool (node)" TYPE SAFETY ########################################### If a function asserts that its symtab_node parameter is symtab_function_p, then convert the function to take a cgraph_node* and change the callers to convert as above. -- Lawrence Crowl