示例#1
0
文件: varpool.c 项目: Lao16/gcc
/* Remove node from the varpool.  */
void
varpool_remove_node (struct varpool_node *node)
{
  symtab_unregister_node ((symtab_node)node);
  if (DECL_INITIAL (node->symbol.decl)
      && !DECL_IN_CONSTANT_POOL (node->symbol.decl)
      /* Keep vtables for BINFO folding.  */
      && !DECL_VIRTUAL_P (node->symbol.decl)
      /* FIXME: http://gcc.gnu.org/PR55395 */
      && debug_info_level == DINFO_LEVEL_NONE)
    DECL_INITIAL (node->symbol.decl) = error_mark_node;
  ggc_free (node);
}
示例#2
0
文件: varpool.c 项目: palves/gcc
/* Remove node from the varpool.  */
void
varpool_remove_node (varpool_node *node)
{
  tree init;
  varpool_call_node_removal_hooks (node);
  symtab_unregister_node (node);

  /* Because we remove references from external functions before final compilation,
     we may end up removing useful constructors.
     FIXME: We probably want to trace boundaries better.  */
  if (cgraph_state == CGRAPH_LTO_STREAMING)
    ;
  else if ((init = ctor_for_folding (node->decl)) == error_mark_node)
    varpool_remove_initializer (node);
  else
    DECL_INITIAL (node->decl) = init;
  ggc_free (node);
}
示例#3
0
/* Remove node from the varpool.  */
void
varpool_remove_node (struct varpool_node *node)
{
  gcc_assert (!varpool_assembled_nodes_queue);
  symtab_unregister_node ((symtab_node)node);
  if (varpool_first_unanalyzed_node == node)
    x_varpool_first_unanalyzed_node = (symtab_node)node->next_needed;
  if (node->next_needed)
    node->next_needed->prev_needed = node->prev_needed;
  else if (node->prev_needed)
    {
      gcc_assert (varpool_last_needed_node);
      x_varpool_last_needed_node = (symtab_node)node->prev_needed;
    }
  if (node->prev_needed)
    node->prev_needed->next_needed = node->next_needed;
  else if (node->next_needed)
    {
      gcc_assert (varpool_nodes_queue == node);
      x_varpool_nodes_queue = (symtab_node)node->next_needed;
    }
  ggc_free (node);
}