http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57038



--- Comment #1 from Jan Hubicka <hubicka at gcc dot gnu.org> 2013-04-24 
13:35:36 UTC ---

Hmm, the failing test is:



  /* Be sure that we never try to duplicate partitioned symbol

     or add external symbol.  */

  gcc_assert (c != SYMBOL_EXTERNAL

              && (c == SYMBOL_DUPLICATE || !symbol_partitioned_p (node)));



now the caller is:





  for (i = 0; i < n_nodes; i++)

    {

      if (symbol_partitioned_p ((symtab_node) order[i]))

        continue;



      current_order = order[i]->symbol.order;



      if (!flag_toplevel_reorder)

        while (varpool_pos < n_varpool_nodes

               && varpool_order[varpool_pos]->symbol.order < current_order)

          {

            if (!symbol_partitioned_p ((symtab_node)

varpool_order[varpool_pos]))

              add_symbol_to_partition (partition, (symtab_node)

varpool_order[varpool_pos]);

            varpool_pos++;

          }



      add_symbol_to_partition (partition, (symtab_node) order[i]);

      total_size -= inline_summary (order[i])->size;



So what can fail here?  Symbol_partitioned_p should be false because of the

firs ttest in loop. So one should conclude that c==SYMBOL_EXTERNAL that is

weird given that the order array is populated only with SYMBOL_PARTITIONED

items.



Can you, please, figure out what is value of c and symbol_partitioned_p test?



Honza

Reply via email to