void symtab_node::fixup_same_cpp_alias_visibility (symtab_node *target) { if (is_a <cgraph_node *> (this)) { DECL_DECLARED_INLINE_P (decl) = DECL_DECLARED_INLINE_P (target->decl); DECL_DISREGARD_INLINE_LIMITS (decl) = DECL_DISREGARD_INLINE_LIMITS (target->decl); } /* FIXME: It is not really clear why those flags should not be copied for functions, too. */ else { DECL_WEAK (decl) = DECL_WEAK (target->decl); DECL_EXTERNAL (decl) = DECL_EXTERNAL (target->decl); DECL_VISIBILITY (decl) = DECL_VISIBILITY (target->decl); } DECL_VIRTUAL_P (decl) = DECL_VIRTUAL_P (target->decl); if (TREE_PUBLIC (decl)) { tree group; DECL_EXTERNAL (decl) = DECL_EXTERNAL (target->decl); DECL_COMDAT (decl) = DECL_COMDAT (target->decl); group = target->get_comdat_group (); set_comdat_group (group); if (group && !same_comdat_group) add_to_same_comdat_group (target); } externally_visible = target->externally_visible; }
void symtab_node::remove_from_same_comdat_group (void) { if (same_comdat_group) { symtab_node *prev; for (prev = same_comdat_group; prev->same_comdat_group != this; prev = prev->same_comdat_group) ; if (same_comdat_group == prev) prev->same_comdat_group = NULL; else prev->same_comdat_group = same_comdat_group; same_comdat_group = NULL; set_comdat_group (NULL); } }
void symtab_node::add_to_same_comdat_group (symtab_node *old_node) { gcc_assert (old_node->get_comdat_group ()); gcc_assert (!same_comdat_group); gcc_assert (this != old_node); set_comdat_group (old_node->get_comdat_group ()); same_comdat_group = old_node; if (!old_node->same_comdat_group) old_node->same_comdat_group = this; else { symtab_node *n; for (n = old_node->same_comdat_group; n->same_comdat_group != old_node; n = n->same_comdat_group) ; n->same_comdat_group = this; } }
bool set_comdat_group_1 (cgraph_node *symbol, void *head_p) { return set_comdat_group (symbol, head_p); }