void symtab_unregister_node (symtab_node *node) { void **slot; ipa_remove_all_references (&node->ref_list); ipa_remove_all_referring (&node->ref_list); if (node->same_comdat_group) { symtab_node *prev; for (prev = node->same_comdat_group; prev->same_comdat_group != node; prev = prev->same_comdat_group) ; if (node->same_comdat_group == prev) prev->same_comdat_group = NULL; else prev->same_comdat_group = node->same_comdat_group; node->same_comdat_group = NULL; } if (node->previous) node->previous->next = node->next; else symtab_nodes = node->next; if (node->next) node->next->previous = node->previous; node->next = NULL; node->previous = NULL; slot = htab_find_slot (symtab_hash, node, NO_INSERT); /* During LTO symtab merging we temporarily corrupt decl to symtab node hash. */ gcc_assert ((slot && *slot) || in_lto_p); if (slot && *slot && *slot == node) { symtab_node *replacement_node = NULL; if (cgraph_node *cnode = dyn_cast <cgraph_node> (node)) replacement_node = cgraph_find_replacement_node (cnode); if (!replacement_node) htab_clear_slot (symtab_hash, slot); else *slot = replacement_node; } if (!is_a <varpool_node> (node) || !DECL_HARD_REGISTER (node->decl)) unlink_from_assembler_name_hash (node, false); }
void symtab_unregister_node (symtab_node node) { void **slot; ipa_remove_all_references (&node->symbol.ref_list); ipa_remove_all_referring (&node->symbol.ref_list); if (node->symbol.same_comdat_group) { symtab_node prev; for (prev = node->symbol.same_comdat_group; prev->symbol.same_comdat_group != node; prev = prev->symbol.same_comdat_group) ; if (node->symbol.same_comdat_group == prev) prev->symbol.same_comdat_group = NULL; else prev->symbol.same_comdat_group = node->symbol.same_comdat_group; node->symbol.same_comdat_group = NULL; } if (node->symbol.previous) node->symbol.previous->symbol.next = node->symbol.next; else symtab_nodes = node->symbol.next; if (node->symbol.next) node->symbol.next->symbol.previous = node->symbol.previous; node->symbol.next = NULL; node->symbol.previous = NULL; slot = htab_find_slot (symtab_hash, node, NO_INSERT); if (*slot == node) { symtab_node replacement_node = NULL; if (symtab_function_p (node)) replacement_node = (symtab_node)cgraph_find_replacement_node (cgraph (node)); if (!replacement_node) htab_clear_slot (symtab_hash, slot); else *slot = replacement_node; } unlink_from_assembler_name_hash (node); }