Update gcc-50 to SVN version 222321 (gcc-5-branch)
[dragonfly.git] / contrib / gcc-5.0 / gcc / symtab.c
1 /* Symbol table.
2    Copyright (C) 2012-2015 Free Software Foundation, Inc.
3    Contributed by Jan Hubicka
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "rtl.h"
26 #include "hash-set.h"
27 #include "machmode.h"
28 #include "vec.h"
29 #include "double-int.h"
30 #include "input.h"
31 #include "alias.h"
32 #include "symtab.h"
33 #include "wide-int.h"
34 #include "inchash.h"
35 #include "tree.h"
36 #include "fold-const.h"
37 #include "print-tree.h"
38 #include "varasm.h"
39 #include "hashtab.h"
40 #include "hard-reg-set.h"
41 #include "input.h"
42 #include "function.h"
43 #include "emit-rtl.h"
44 #include "predict.h"
45 #include "basic-block.h"
46 #include "tree-ssa-alias.h"
47 #include "internal-fn.h"
48 #include "gimple-expr.h"
49 #include "is-a.h"
50 #include "gimple.h"
51 #include "tree-inline.h"
52 #include "langhooks.h"
53 #include "hash-map.h"
54 #include "plugin-api.h"
55 #include "ipa-ref.h"
56 #include "cgraph.h"
57 #include "diagnostic.h"
58 #include "timevar.h"
59 #include "lto-streamer.h"
60 #include "output.h"
61 #include "ipa-utils.h"
62 #include "calls.h"
63
64 static const char *ipa_ref_use_name[] = {"read","write","addr","alias","chkp"};
65
66 const char * const ld_plugin_symbol_resolution_names[]=
67 {
68   "",
69   "undef",
70   "prevailing_def",
71   "prevailing_def_ironly",
72   "preempted_reg",
73   "preempted_ir",
74   "resolved_ir",
75   "resolved_exec",
76   "resolved_dyn",
77   "prevailing_def_ironly_exp"
78 };
79
80 /* Hash asmnames ignoring the user specified marks.  */
81
82 hashval_t
83 symbol_table::decl_assembler_name_hash (const_tree asmname)
84 {
85   if (IDENTIFIER_POINTER (asmname)[0] == '*')
86     {
87       const char *decl_str = IDENTIFIER_POINTER (asmname) + 1;
88       size_t ulp_len = strlen (user_label_prefix);
89
90       if (ulp_len == 0)
91         ;
92       else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
93         decl_str += ulp_len;
94
95       return htab_hash_string (decl_str);
96     }
97
98   return htab_hash_string (IDENTIFIER_POINTER (asmname));
99 }
100
101
102 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
103
104 bool
105 symbol_table::decl_assembler_name_equal (tree decl, const_tree asmname)
106 {
107   tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
108   const char *decl_str;
109   const char *asmname_str;
110   bool test = false;
111
112   if (decl_asmname == asmname)
113     return true;
114
115   decl_str = IDENTIFIER_POINTER (decl_asmname);
116   asmname_str = IDENTIFIER_POINTER (asmname);
117
118
119   /* If the target assembler name was set by the user, things are trickier.
120      We have a leading '*' to begin with.  After that, it's arguable what
121      is the correct thing to do with -fleading-underscore.  Arguably, we've
122      historically been doing the wrong thing in assemble_alias by always
123      printing the leading underscore.  Since we're not changing that, make
124      sure user_label_prefix follows the '*' before matching.  */
125   if (decl_str[0] == '*')
126     {
127       size_t ulp_len = strlen (user_label_prefix);
128
129       decl_str ++;
130
131       if (ulp_len == 0)
132         test = true;
133       else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
134         decl_str += ulp_len, test=true;
135       else
136         decl_str --;
137     }
138   if (asmname_str[0] == '*')
139     {
140       size_t ulp_len = strlen (user_label_prefix);
141
142       asmname_str ++;
143
144       if (ulp_len == 0)
145         test = true;
146       else if (strncmp (asmname_str, user_label_prefix, ulp_len) == 0)
147         asmname_str += ulp_len, test=true;
148       else
149         asmname_str --;
150     }
151
152   if (!test)
153     return false;
154   return strcmp (decl_str, asmname_str) == 0;
155 }
156
157
158 /* Returns nonzero if P1 and P2 are equal.  */
159
160 /* Insert NODE to assembler name hash.  */
161
162 void
163 symbol_table::insert_to_assembler_name_hash (symtab_node *node,
164                                              bool with_clones)
165 {
166   if (is_a <varpool_node *> (node) && DECL_HARD_REGISTER (node->decl))
167     return;
168   gcc_checking_assert (!node->previous_sharing_asm_name
169                        && !node->next_sharing_asm_name);
170   if (assembler_name_hash)
171     {
172       symtab_node **aslot;
173       cgraph_node *cnode;
174       tree decl = node->decl;
175
176       tree name = DECL_ASSEMBLER_NAME (node->decl);
177
178       /* C++ FE can produce decls without associated assembler name and insert
179          them to symtab to hold section or TLS information.  */
180       if (!name)
181         return;
182
183       hashval_t hash = decl_assembler_name_hash (name);
184       aslot = assembler_name_hash->find_slot_with_hash (name, hash, INSERT);
185       gcc_assert (*aslot != node);
186       node->next_sharing_asm_name = (symtab_node *)*aslot;
187       if (*aslot != NULL)
188         (*aslot)->previous_sharing_asm_name = node;
189       *aslot = node;
190
191       /* Update also possible inline clones sharing a decl.  */
192       cnode = dyn_cast <cgraph_node *> (node);
193       if (cnode && cnode->clones && with_clones)
194         for (cnode = cnode->clones; cnode; cnode = cnode->next_sibling_clone)
195           if (cnode->decl == decl)
196             insert_to_assembler_name_hash (cnode, true);
197     }
198
199 }
200
201 /* Remove NODE from assembler name hash.  */
202
203 void
204 symbol_table::unlink_from_assembler_name_hash (symtab_node *node,
205                                                bool with_clones)
206 {
207   if (assembler_name_hash)
208     {
209       cgraph_node *cnode;
210       tree decl = node->decl;
211
212       if (node->next_sharing_asm_name)
213         node->next_sharing_asm_name->previous_sharing_asm_name
214           = node->previous_sharing_asm_name;
215       if (node->previous_sharing_asm_name)
216         {
217           node->previous_sharing_asm_name->next_sharing_asm_name
218             = node->next_sharing_asm_name;
219         }
220       else
221         {
222           tree name = DECL_ASSEMBLER_NAME (node->decl);
223           symtab_node **slot;
224
225           if (!name)
226             return;
227
228           hashval_t hash = decl_assembler_name_hash (name);
229           slot = assembler_name_hash->find_slot_with_hash (name, hash,
230                                                            NO_INSERT);
231           gcc_assert (*slot == node);
232           if (!node->next_sharing_asm_name)
233             assembler_name_hash->clear_slot (slot);
234           else
235             *slot = node->next_sharing_asm_name;
236         }
237       node->next_sharing_asm_name = NULL;
238       node->previous_sharing_asm_name = NULL;
239
240       /* Update also possible inline clones sharing a decl.  */
241       cnode = dyn_cast <cgraph_node *> (node);
242       if (cnode && cnode->clones && with_clones)
243         for (cnode = cnode->clones; cnode; cnode = cnode->next_sibling_clone)
244           if (cnode->decl == decl)
245             unlink_from_assembler_name_hash (cnode, true);
246     }
247 }
248
249 /* Arrange node to be first in its entry of assembler_name_hash.  */
250
251 void
252 symbol_table::symtab_prevail_in_asm_name_hash (symtab_node *node)
253 {
254   unlink_from_assembler_name_hash (node, false);
255   insert_to_assembler_name_hash (node, false);
256 }
257
258 /* Initalize asm name hash unless.  */
259
260 void
261 symbol_table::symtab_initialize_asm_name_hash (void)
262 {
263   symtab_node *node;
264   if (!assembler_name_hash)
265     {
266       assembler_name_hash = hash_table<asmname_hasher>::create_ggc (10);
267       FOR_EACH_SYMBOL (node)
268         insert_to_assembler_name_hash (node, false);
269     }
270 }
271
272 /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
273
274 void
275 symbol_table::change_decl_assembler_name (tree decl, tree name)
276 {
277   symtab_node *node = NULL;
278
279   /* We can have user ASM names on things, like global register variables, that
280      are not in the symbol table.  */
281   if ((TREE_CODE (decl) == VAR_DECL
282        && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
283       || TREE_CODE (decl) == FUNCTION_DECL)
284     node = symtab_node::get (decl);
285   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
286     {
287       SET_DECL_ASSEMBLER_NAME (decl, name);
288       if (node)
289         insert_to_assembler_name_hash (node, true);
290     }
291   else
292     {
293       if (name == DECL_ASSEMBLER_NAME (decl))
294         return;
295
296       tree alias = (IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (decl))
297                     ? TREE_CHAIN (DECL_ASSEMBLER_NAME (decl))
298                     : NULL);
299       if (node)
300         unlink_from_assembler_name_hash (node, true);
301       if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
302           && DECL_RTL_SET_P (decl))
303         warning (0, "%D renamed after being referenced in assembly", decl);
304
305       SET_DECL_ASSEMBLER_NAME (decl, name);
306       if (alias)
307         {
308           IDENTIFIER_TRANSPARENT_ALIAS (name) = 1;
309           TREE_CHAIN (name) = alias;
310         }
311       if (node)
312         insert_to_assembler_name_hash (node, true);
313     }
314 }
315
316 /* Hash sections by their names.  */
317
318 hashval_t
319 section_name_hasher::hash (section_hash_entry *n)
320 {
321   return htab_hash_string (n->name);
322 }
323
324 /* Return true if section P1 name equals to P2.  */
325
326 bool
327 section_name_hasher::equal (section_hash_entry *n1, const char *name)
328 {
329   return n1->name == name || !strcmp (n1->name, name);
330 }
331
332 /* Add node into symbol table.  This function is not used directly, but via
333    cgraph/varpool node creation routines.  */
334
335 void
336 symtab_node::register_symbol (void)
337 {
338   symtab->register_symbol (this);
339
340   if (!decl->decl_with_vis.symtab_node)
341     decl->decl_with_vis.symtab_node = this;
342
343   ref_list.clear ();
344
345   /* Be sure to do this last; C++ FE might create new nodes via
346      DECL_ASSEMBLER_NAME langhook!  */
347   symtab->insert_to_assembler_name_hash (this, false);
348 }
349
350 /* Remove NODE from same comdat group.   */
351
352 void
353 symtab_node::remove_from_same_comdat_group (void)
354 {
355   if (same_comdat_group)
356     {
357       symtab_node *prev;
358       for (prev = same_comdat_group;
359            prev->same_comdat_group != this;
360            prev = prev->same_comdat_group)
361         ;
362       if (same_comdat_group == prev)
363         prev->same_comdat_group = NULL;
364       else
365         prev->same_comdat_group = same_comdat_group;
366       same_comdat_group = NULL;
367       set_comdat_group (NULL);
368     }
369 }
370
371 /* Remove node from symbol table.  This function is not used directly, but via
372    cgraph/varpool node removal routines.  */
373
374 void
375 symtab_node::unregister (void)
376 {
377   remove_all_references ();
378   remove_all_referring ();
379
380   /* Remove reference to section.  */
381   set_section_for_node (NULL);
382
383   remove_from_same_comdat_group ();
384
385   symtab->unregister (this);
386
387   /* During LTO symtab merging we temporarily corrupt decl to symtab node
388      hash.  */
389   gcc_assert (decl->decl_with_vis.symtab_node || in_lto_p);
390   if (decl->decl_with_vis.symtab_node == this)
391     {
392       symtab_node *replacement_node = NULL;
393       if (cgraph_node *cnode = dyn_cast <cgraph_node *> (this))
394         replacement_node = cnode->find_replacement ();
395       decl->decl_with_vis.symtab_node = replacement_node;
396     }
397   if (!is_a <varpool_node *> (this) || !DECL_HARD_REGISTER (decl))
398     symtab->unlink_from_assembler_name_hash (this, false);
399   if (in_init_priority_hash)
400     symtab->init_priority_hash->remove (this);
401 }
402
403
404 /* Remove symbol from symbol table.  */
405
406 void
407 symtab_node::remove (void)
408 {
409   if (cgraph_node *cnode = dyn_cast <cgraph_node *> (this))
410     cnode->remove ();
411   else if (varpool_node *vnode = dyn_cast <varpool_node *> (this))
412     vnode->remove ();
413 }
414
415 /* Add NEW_ to the same comdat group that OLD is in.  */
416
417 void
418 symtab_node::add_to_same_comdat_group (symtab_node *old_node)
419 {
420   gcc_assert (old_node->get_comdat_group ());
421   gcc_assert (!same_comdat_group);
422   gcc_assert (this != old_node);
423
424   set_comdat_group (old_node->get_comdat_group ());
425   same_comdat_group = old_node;
426   if (!old_node->same_comdat_group)
427     old_node->same_comdat_group = this;
428   else
429     {
430       symtab_node *n;
431       for (n = old_node->same_comdat_group;
432            n->same_comdat_group != old_node;
433            n = n->same_comdat_group)
434         ;
435       n->same_comdat_group = this;
436     }
437 }
438
439 /* Dissolve the same_comdat_group list in which NODE resides.  */
440
441 void
442 symtab_node::dissolve_same_comdat_group_list (void)
443 {
444   symtab_node *n = this;
445   symtab_node *next;
446
447   if (!same_comdat_group)
448     return;
449   do
450     {
451       next = n->same_comdat_group;
452       n->same_comdat_group = NULL;
453       /* Clear comdat_group for comdat locals, since
454          make_decl_local doesn't.  */
455       if (!TREE_PUBLIC (n->decl))
456         n->set_comdat_group (NULL);
457       n = next;
458     }
459   while (n != this);
460 }
461
462 /* Return printable assembler name of NODE.
463    This function is used only for debugging.  When assembler name
464    is unknown go with identifier name.  */
465
466 const char *
467 symtab_node::asm_name () const
468 {
469   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
470     return lang_hooks.decl_printable_name (decl, 2);
471   return IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
472 }
473
474 /* Return printable identifier name.  */
475
476 const char *
477 symtab_node::name () const
478 {
479   return lang_hooks.decl_printable_name (decl, 2);
480 }
481
482 /* Return ipa reference from this symtab_node to
483    REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
484    of the use.  */
485
486 ipa_ref *
487 symtab_node::create_reference (symtab_node *referred_node,
488                                enum ipa_ref_use use_type)
489 {
490   return create_reference (referred_node, use_type, NULL);
491 }
492
493
494 /* Return ipa reference from this symtab_node to
495    REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
496    of the use and STMT the statement (if it exists).  */
497
498 ipa_ref *
499 symtab_node::create_reference (symtab_node *referred_node,
500                                enum ipa_ref_use use_type, gimple stmt)
501 {
502   ipa_ref *ref = NULL, *ref2 = NULL;
503   ipa_ref_list *list, *list2;
504   ipa_ref_t *old_references;
505
506   gcc_checking_assert (!stmt || is_a <cgraph_node *> (this));
507   gcc_checking_assert (use_type != IPA_REF_ALIAS || !stmt);
508
509   list = &ref_list;
510   old_references = vec_safe_address (list->references);
511   vec_safe_grow (list->references, vec_safe_length (list->references) + 1);
512   ref = &list->references->last ();
513
514   list2 = &referred_node->ref_list;
515
516   /* IPA_REF_ALIAS is always inserted at the beginning of the list.   */
517   if(use_type == IPA_REF_ALIAS)
518     {
519       list2->referring.safe_insert (0, ref);
520       ref->referred_index = 0;
521
522       for (unsigned int i = 1; i < list2->referring.length (); i++)
523         list2->referring[i]->referred_index = i;
524     }
525   else
526     {
527       list2->referring.safe_push (ref);
528       ref->referred_index = list2->referring.length () - 1;
529     }
530
531   ref->referring = this;
532   ref->referred = referred_node;
533   ref->stmt = stmt;
534   ref->lto_stmt_uid = 0;
535   ref->use = use_type;
536   ref->speculative = 0;
537
538   /* If vector was moved in memory, update pointers.  */
539   if (old_references != list->references->address ())
540     {
541       int i;
542       for (i = 0; iterate_reference(i, ref2); i++)
543         ref2->referred_ref_list ()->referring[ref2->referred_index] = ref2;
544     }
545   return ref;
546 }
547
548 /* If VAL is a reference to a function or a variable, add a reference from
549    this symtab_node to the corresponding symbol table node.  USE_TYPE specify
550    type of the use and STMT the statement (if it exists).  Return the new
551    reference or NULL if none was created.  */
552
553 ipa_ref *
554 symtab_node::maybe_create_reference (tree val, enum ipa_ref_use use_type,
555                                      gimple stmt)
556 {
557   STRIP_NOPS (val);
558   if (TREE_CODE (val) != ADDR_EXPR)
559     return NULL;
560   val = get_base_var (val);
561   if (val && (TREE_CODE (val) == FUNCTION_DECL
562                || TREE_CODE (val) == VAR_DECL))
563     {
564       symtab_node *referred = symtab_node::get (val);
565       gcc_checking_assert (referred);
566       return create_reference (referred, use_type, stmt);
567     }
568   return NULL;
569 }
570
571 /* Clone all references from symtab NODE to this symtab_node.  */
572
573 void
574 symtab_node::clone_references (symtab_node *node)
575 {
576   ipa_ref *ref = NULL, *ref2 = NULL;
577   int i;
578   for (i = 0; node->iterate_reference (i, ref); i++)
579     {
580       bool speculative = ref->speculative;
581       unsigned int stmt_uid = ref->lto_stmt_uid;
582
583       ref2 = create_reference (ref->referred, ref->use, ref->stmt);
584       ref2->speculative = speculative;
585       ref2->lto_stmt_uid = stmt_uid;
586     }
587 }
588
589 /* Clone all referring from symtab NODE to this symtab_node.  */
590
591 void
592 symtab_node::clone_referring (symtab_node *node)
593 {
594   ipa_ref *ref = NULL, *ref2 = NULL;
595   int i;
596   for (i = 0; node->iterate_referring(i, ref); i++)
597     {
598       bool speculative = ref->speculative;
599       unsigned int stmt_uid = ref->lto_stmt_uid;
600
601       ref2 = ref->referring->create_reference (this, ref->use, ref->stmt);
602       ref2->speculative = speculative;
603       ref2->lto_stmt_uid = stmt_uid;
604     }
605 }
606
607 /* Clone reference REF to this symtab_node and set its stmt to STMT.  */
608
609 ipa_ref *
610 symtab_node::clone_reference (ipa_ref *ref, gimple stmt)
611 {
612   bool speculative = ref->speculative;
613   unsigned int stmt_uid = ref->lto_stmt_uid;
614   ipa_ref *ref2;
615
616   ref2 = create_reference (ref->referred, ref->use, stmt);
617   ref2->speculative = speculative;
618   ref2->lto_stmt_uid = stmt_uid;
619   return ref2;
620 }
621
622 /* Find the structure describing a reference to REFERRED_NODE
623    and associated with statement STMT.  */
624
625 ipa_ref *
626 symtab_node::find_reference (symtab_node *referred_node,
627                              gimple stmt, unsigned int lto_stmt_uid)
628 {
629   ipa_ref *r = NULL;
630   int i;
631
632   for (i = 0; iterate_reference (i, r); i++)
633     if (r->referred == referred_node
634         && !r->speculative
635         && ((stmt && r->stmt == stmt)
636             || (lto_stmt_uid && r->lto_stmt_uid == lto_stmt_uid)
637             || (!stmt && !lto_stmt_uid && !r->stmt && !r->lto_stmt_uid)))
638       return r;
639   return NULL;
640 }
641
642 /* Remove all references that are associated with statement STMT.  */
643
644 void
645 symtab_node::remove_stmt_references (gimple stmt)
646 {
647   ipa_ref *r = NULL;
648   int i = 0;
649
650   while (iterate_reference (i, r))
651     if (r->stmt == stmt)
652       r->remove_reference ();
653     else
654       i++;
655 }
656
657 /* Remove all stmt references in non-speculative references.
658    Those are not maintained during inlining & clonning.
659    The exception are speculative references that are updated along
660    with callgraph edges associated with them.  */
661
662 void
663 symtab_node::clear_stmts_in_references (void)
664 {
665   ipa_ref *r = NULL;
666   int i;
667
668   for (i = 0; iterate_reference (i, r); i++)
669     if (!r->speculative)
670       {
671         r->stmt = NULL;
672         r->lto_stmt_uid = 0;
673       }
674 }
675
676 /* Remove all references in ref list.  */
677
678 void
679 symtab_node::remove_all_references (void)
680 {
681   while (vec_safe_length (ref_list.references))
682     ref_list.references->last ().remove_reference ();
683   vec_free (ref_list.references);
684 }
685
686 /* Remove all referring items in ref list.  */
687
688 void
689 symtab_node::remove_all_referring (void)
690 {
691   while (ref_list.referring.length ())
692     ref_list.referring.last ()->remove_reference ();
693   ref_list.referring.release ();
694 }
695
696 /* Dump references in ref list to FILE.  */
697
698 void
699 symtab_node::dump_references (FILE *file)
700 {
701   ipa_ref *ref = NULL;
702   int i;
703   for (i = 0; iterate_reference (i, ref); i++)
704     {
705       fprintf (file, "%s/%i (%s)",
706                ref->referred->asm_name (),
707                ref->referred->order,
708                ipa_ref_use_name [ref->use]);
709       if (ref->speculative)
710         fprintf (file, " (speculative)");
711     }
712   fprintf (file, "\n");
713 }
714
715 /* Dump referring in list to FILE.  */
716
717 void
718 symtab_node::dump_referring (FILE *file)
719 {
720   ipa_ref *ref = NULL;
721   int i;
722   for (i = 0; iterate_referring(i, ref); i++)
723     {
724       fprintf (file, "%s/%i (%s)",
725                ref->referring->asm_name (),
726                ref->referring->order,
727                ipa_ref_use_name [ref->use]);
728       if (ref->speculative)
729         fprintf (file, " (speculative)");
730     }
731   fprintf (file, "\n");
732 }
733
734 static const char * const symtab_type_names[] = {"symbol", "function", "variable"};
735
736 /* Dump base fields of symtab nodes to F.  Not to be used directly.  */
737
738 void
739 symtab_node::dump_base (FILE *f)
740 {
741   static const char * const visibility_types[] = {
742     "default", "protected", "hidden", "internal"
743   };
744
745   fprintf (f, "%s/%i (%s)", asm_name (), order, name ());
746   dump_addr (f, " @", (void *)this);
747   fprintf (f, "\n  Type: %s", symtab_type_names[type]);
748
749   if (definition)
750     fprintf (f, " definition");
751   if (analyzed)
752     fprintf (f, " analyzed");
753   if (alias)
754     fprintf (f, " alias");
755   if (weakref)
756     fprintf (f, " weakref");
757   if (cpp_implicit_alias)
758     fprintf (f, " cpp_implicit_alias");
759   if (alias_target)
760     fprintf (f, " target:%s",
761              DECL_P (alias_target)
762              ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME
763                                      (alias_target))
764              : IDENTIFIER_POINTER (alias_target));
765   if (body_removed)
766     fprintf (f, "\n  Body removed by symtab_remove_unreachable_nodes");
767   fprintf (f, "\n  Visibility:");
768   if (in_other_partition)
769     fprintf (f, " in_other_partition");
770   if (used_from_other_partition)
771     fprintf (f, " used_from_other_partition");
772   if (force_output)
773     fprintf (f, " force_output");
774   if (forced_by_abi)
775     fprintf (f, " forced_by_abi");
776   if (externally_visible)
777     fprintf (f, " externally_visible");
778   if (no_reorder)
779     fprintf (f, " no_reorder");
780   if (resolution != LDPR_UNKNOWN)
781     fprintf (f, " %s",
782              ld_plugin_symbol_resolution_names[(int)resolution]);
783   if (TREE_ASM_WRITTEN (decl))
784     fprintf (f, " asm_written");
785   if (DECL_EXTERNAL (decl))
786     fprintf (f, " external");
787   if (TREE_PUBLIC (decl))
788     fprintf (f, " public");
789   if (DECL_COMMON (decl))
790     fprintf (f, " common");
791   if (DECL_WEAK (decl))
792     fprintf (f, " weak");
793   if (DECL_DLLIMPORT_P (decl))
794     fprintf (f, " dll_import");
795   if (DECL_COMDAT (decl))
796     fprintf (f, " comdat");
797   if (get_comdat_group ())
798     fprintf (f, " comdat_group:%s",
799              IDENTIFIER_POINTER (get_comdat_group_id ()));
800   if (DECL_ONE_ONLY (decl))
801     fprintf (f, " one_only");
802   if (get_section ())
803     fprintf (f, " section:%s",
804              get_section ());
805   if (implicit_section)
806     fprintf (f," (implicit_section)");
807   if (DECL_VISIBILITY_SPECIFIED (decl))
808     fprintf (f, " visibility_specified");
809   if (DECL_VISIBILITY (decl))
810     fprintf (f, " visibility:%s",
811              visibility_types [DECL_VISIBILITY (decl)]);
812   if (DECL_VIRTUAL_P (decl))
813     fprintf (f, " virtual");
814   if (DECL_ARTIFICIAL (decl))
815     fprintf (f, " artificial");
816   if (TREE_CODE (decl) == FUNCTION_DECL)
817     {
818       if (DECL_STATIC_CONSTRUCTOR (decl))
819         fprintf (f, " constructor");
820       if (DECL_STATIC_DESTRUCTOR (decl))
821         fprintf (f, " destructor");
822     }
823   fprintf (f, "\n");
824   
825   if (same_comdat_group)
826     fprintf (f, "  Same comdat group as: %s/%i\n",
827              same_comdat_group->asm_name (),
828              same_comdat_group->order);
829   if (next_sharing_asm_name)
830     fprintf (f, "  next sharing asm name: %i\n",
831              next_sharing_asm_name->order);
832   if (previous_sharing_asm_name)
833     fprintf (f, "  previous sharing asm name: %i\n",
834              previous_sharing_asm_name->order);
835
836   if (address_taken)
837     fprintf (f, "  Address is taken.\n");
838   if (aux)
839     {
840       fprintf (f, "  Aux:");
841       dump_addr (f, " @", (void *)aux);
842     }
843
844   fprintf (f, "  References: ");
845   dump_references (f);
846   fprintf (f, "  Referring: ");
847   dump_referring (f);
848   if (lto_file_data)
849     fprintf (f, "  Read from file: %s\n",
850              lto_file_data->file_name);
851 }
852
853 /* Dump symtab node to F.  */
854
855 void
856 symtab_node::dump (FILE *f)
857 {
858   if (cgraph_node *cnode = dyn_cast <cgraph_node *> (this))
859     cnode->dump (f);
860   else if (varpool_node *vnode = dyn_cast <varpool_node *> (this))
861     vnode->dump (f);
862 }
863
864 /* Dump symbol table to F.  */
865
866 void
867 symtab_node::dump_table (FILE *f)
868 {
869   symtab_node *node;
870   fprintf (f, "Symbol table:\n\n");
871   FOR_EACH_SYMBOL (node)
872     node->dump (f);
873 }
874
875
876 /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
877    Return NULL if there's no such node.  */
878
879 symtab_node *
880 symtab_node::get_for_asmname (const_tree asmname)
881 {
882   symtab_node *node;
883
884   symtab->symtab_initialize_asm_name_hash ();
885   hashval_t hash = symtab->decl_assembler_name_hash (asmname);
886   symtab_node **slot
887     = symtab->assembler_name_hash->find_slot_with_hash (asmname, hash,
888                                                         NO_INSERT);
889
890   if (slot)
891     {
892       node = *slot;
893       return node;
894     }
895   return NULL;
896 }
897
898 /* Dump symtab node NODE to stderr.  */
899
900 DEBUG_FUNCTION void
901 symtab_node::debug (void)
902 {
903   dump (stderr);
904 }
905
906 /* Verify common part of symtab nodes.  */
907
908 DEBUG_FUNCTION bool
909 symtab_node::verify_base (void)
910 {
911   bool error_found = false;
912   symtab_node *hashed_node;
913
914   if (is_a <cgraph_node *> (this))
915     {
916       if (TREE_CODE (decl) != FUNCTION_DECL)
917         {
918           error ("function symbol is not function");
919           error_found = true;
920         }
921     }
922   else if (is_a <varpool_node *> (this))
923     {
924       if (TREE_CODE (decl) != VAR_DECL)
925         {
926           error ("variable symbol is not variable");
927           error_found = true;
928         }
929     }
930   else
931     {
932       error ("node has unknown type");
933       error_found = true;
934     }
935    
936   if (symtab->state != LTO_STREAMING)
937     {
938       hashed_node = symtab_node::get (decl);
939       if (!hashed_node)
940         {
941           error ("node not found node->decl->decl_with_vis.symtab_node");
942           error_found = true;
943         }
944       if (hashed_node != this
945           && (!is_a <cgraph_node *> (this)
946               || !dyn_cast <cgraph_node *> (this)->clone_of
947               || dyn_cast <cgraph_node *> (this)->clone_of->decl != decl))
948         {
949           error ("node differs from node->decl->decl_with_vis.symtab_node");
950           error_found = true;
951         }
952     }
953   if (symtab->assembler_name_hash)
954     {
955       hashed_node = symtab_node::get_for_asmname (DECL_ASSEMBLER_NAME (decl));
956       if (hashed_node && hashed_node->previous_sharing_asm_name)
957         {
958           error ("assembler name hash list corrupted");
959           error_found = true;
960         }
961       while (hashed_node)
962         {
963           if (hashed_node == this)
964             break;
965           hashed_node = hashed_node->next_sharing_asm_name;
966         }
967       if (!hashed_node
968           && !(is_a <varpool_node *> (this)
969                || DECL_HARD_REGISTER (decl)))
970         {
971           error ("node not found in symtab assembler name hash");
972           error_found = true;
973         }
974     }
975   if (previous_sharing_asm_name
976       && previous_sharing_asm_name->next_sharing_asm_name != this)
977     {
978       error ("double linked list of assembler names corrupted");
979       error_found = true;
980     }
981   if (body_removed && definition)
982     {
983       error ("node has body_removed but is definition");
984       error_found = true;
985     }
986   if (analyzed && !definition)
987     {
988       error ("node is analyzed byt it is not a definition");
989       error_found = true;
990     }
991   if (cpp_implicit_alias && !alias)
992     {
993       error ("node is alias but not implicit alias");
994       error_found = true;
995     }
996   if (alias && !definition && !weakref)
997     {
998       error ("node is alias but not definition");
999       error_found = true;
1000     }
1001   if (weakref && !alias)
1002     {
1003       error ("node is weakref but not an alias");
1004       error_found = true;
1005     }
1006   if (same_comdat_group)
1007     {
1008       symtab_node *n = same_comdat_group;
1009
1010       if (!n->get_comdat_group ())
1011         {
1012           error ("node is in same_comdat_group list but has no comdat_group");
1013           error_found = true;
1014         }
1015       if (n->get_comdat_group () != get_comdat_group ())
1016         {
1017           error ("same_comdat_group list across different groups");
1018           error_found = true;
1019         }
1020       if (n->type != type)
1021         {
1022           error ("mixing different types of symbol in same comdat groups is not supported");
1023           error_found = true;
1024         }
1025       if (n == this)
1026         {
1027           error ("node is alone in a comdat group");
1028           error_found = true;
1029         }
1030       do
1031         {
1032           if (!n->same_comdat_group)
1033             {
1034               error ("same_comdat_group is not a circular list");
1035               error_found = true;
1036               break;
1037             }
1038           n = n->same_comdat_group;
1039         }
1040       while (n != this);
1041       if (comdat_local_p ())
1042         {
1043           ipa_ref *ref = NULL;
1044
1045           for (int i = 0; iterate_referring (i, ref); ++i)
1046             {
1047               if (!in_same_comdat_group_p (ref->referring))
1048                 {
1049                   error ("comdat-local symbol referred to by %s outside its "
1050                          "comdat",
1051                          identifier_to_locale (ref->referring->name()));
1052                   error_found = true;
1053                 }
1054             }
1055         }
1056     }
1057   if (implicit_section && !get_section ())
1058     {
1059       error ("implicit_section flag is set but section isn't");
1060       error_found = true;
1061     }
1062   if (get_section () && get_comdat_group ()
1063       && !implicit_section
1064       && !lookup_attribute ("section", DECL_ATTRIBUTES (decl)))
1065     {
1066       error ("Both section and comdat group is set");
1067       error_found = true;
1068     }
1069   /* TODO: Add string table for sections, so we do not keep holding duplicated
1070      strings.  */
1071   if (alias && definition
1072       && get_section () != get_alias_target ()->get_section ()
1073       && (!get_section()
1074           || !get_alias_target ()->get_section ()
1075           || strcmp (get_section(),
1076                      get_alias_target ()->get_section ())))
1077     {
1078       error ("Alias and target's section differs");
1079       get_alias_target ()->dump (stderr);
1080       error_found = true;
1081     }
1082   if (alias && definition
1083       && get_comdat_group () != get_alias_target ()->get_comdat_group ())
1084     {
1085       error ("Alias and target's comdat groups differs");
1086       get_alias_target ()->dump (stderr);
1087       error_found = true;
1088     }
1089
1090   return error_found;
1091 }
1092
1093 /* Verify consistency of NODE.  */
1094
1095 DEBUG_FUNCTION void
1096 symtab_node::verify (void)
1097 {
1098   if (seen_error ())
1099     return;
1100
1101   timevar_push (TV_CGRAPH_VERIFY);
1102   if (cgraph_node *node = dyn_cast <cgraph_node *> (this))
1103     node->verify_node ();
1104   else
1105     if (verify_base ())
1106       {
1107         debug ();
1108         internal_error ("symtab_node::verify failed");
1109       }
1110   timevar_pop (TV_CGRAPH_VERIFY);
1111 }
1112
1113 /* Verify symbol table for internal consistency.  */
1114
1115 DEBUG_FUNCTION void
1116 symtab_node::verify_symtab_nodes (void)
1117 {
1118   symtab_node *node;
1119   hash_map<tree, symtab_node *> comdat_head_map (251);
1120
1121   FOR_EACH_SYMBOL (node)
1122     {
1123       node->verify ();
1124       if (node->get_comdat_group ())
1125         {
1126           symtab_node **entry, *s;
1127           bool existed;
1128
1129           entry = &comdat_head_map.get_or_insert (node->get_comdat_group (),
1130                                                   &existed);
1131           if (!existed)
1132             *entry = node;
1133           else if (!DECL_EXTERNAL (node->decl))
1134             {
1135               for (s = (*entry)->same_comdat_group;
1136                    s != NULL && s != node && s != *entry;
1137                    s = s->same_comdat_group)
1138                 ;
1139               if (!s || s == *entry)
1140                 {
1141                   error ("Two symbols with same comdat_group are not linked by "
1142                          "the same_comdat_group list.");
1143                   (*entry)->debug ();
1144                   node->debug ();
1145                   internal_error ("symtab_node::verify failed");
1146                 }
1147             }
1148         }
1149     }
1150 }
1151
1152 /* Make DECL local.  FIXME: We shouldn't need to mess with rtl this early,
1153    but other code such as notice_global_symbol generates rtl.  */
1154
1155 void
1156 symtab_node::make_decl_local (void)
1157 {
1158   rtx rtl, symbol;
1159
1160   /* Avoid clearing comdat_groups on comdat-local decls.  */
1161   if (TREE_PUBLIC (decl) == 0)
1162     return;
1163
1164   if (TREE_CODE (decl) == VAR_DECL)
1165     {
1166       DECL_COMMON (decl) = 0;
1167       /* ADDRESSABLE flag is not defined for public symbols.  */
1168       TREE_ADDRESSABLE (decl) = 1;
1169     }
1170   else gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
1171
1172   DECL_COMDAT (decl) = 0;
1173   DECL_WEAK (decl) = 0;
1174   DECL_EXTERNAL (decl) = 0;
1175   DECL_VISIBILITY_SPECIFIED (decl) = 0;
1176   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
1177   TREE_PUBLIC (decl) = 0;
1178   DECL_DLLIMPORT_P (decl) = 0;
1179   if (!DECL_RTL_SET_P (decl))
1180     return;
1181
1182   /* Update rtl flags.  */
1183   make_decl_rtl (decl);
1184
1185   rtl = DECL_RTL (decl);
1186   if (!MEM_P (rtl))
1187     return;
1188
1189   symbol = XEXP (rtl, 0);
1190   if (GET_CODE (symbol) != SYMBOL_REF)
1191     return;
1192
1193   SYMBOL_REF_WEAK (symbol) = DECL_WEAK (decl);
1194 }
1195
1196 /* Walk the alias chain to return the symbol NODE is alias of.
1197    If NODE is not an alias, return NODE.
1198    Assumes NODE is known to be alias.  */
1199
1200 symtab_node *
1201 symtab_node::ultimate_alias_target_1 (enum availability *availability)
1202 {
1203   bool weakref_p = false;
1204
1205   /* To determine visibility of the target, we follow ELF semantic of aliases.
1206      Here alias is an alternative assembler name of a given definition. Its
1207      availability prevails the availability of its target (i.e. static alias of
1208      weak definition is available.
1209
1210      Weakref is a different animal (and not part of ELF per se). It is just
1211      alternative name of a given symbol used within one complation unit
1212      and is translated prior hitting the object file.  It inherits the
1213      visibility of its target (i.e. weakref of non-overwritable definition
1214      is non-overwritable, while weakref of weak definition is weak).
1215
1216      If we ever get into supporting targets with different semantics, a target
1217      hook will be needed here.  */
1218
1219   if (availability)
1220     {
1221       weakref_p = weakref;
1222       if (!weakref_p)
1223         *availability = get_availability ();
1224       else
1225         *availability = AVAIL_LOCAL;
1226     }
1227
1228   symtab_node *node = this;
1229   while (node)
1230     {
1231       if (node->alias && node->analyzed)
1232         node = node->get_alias_target ();
1233       else
1234         {
1235           if (!availability)
1236             ;
1237           else if (node->analyzed)
1238             {
1239               if (weakref_p)
1240                 {
1241                   enum availability a = node->get_availability ();
1242                   if (a < *availability)
1243                     *availability = a;
1244                 }
1245             }
1246           else
1247             *availability = AVAIL_NOT_AVAILABLE;
1248           return node;
1249         }
1250       if (node && availability && weakref_p)
1251         {
1252           enum availability a = node->get_availability ();
1253           if (a < *availability)
1254             *availability = a;
1255           weakref_p = node->weakref;
1256         }
1257     }
1258   if (availability)
1259     *availability = AVAIL_NOT_AVAILABLE;
1260   return NULL;
1261 }
1262
1263 /* C++ FE sometimes change linkage flags after producing same body aliases.
1264
1265    FIXME: C++ produce implicit aliases for virtual functions and vtables that
1266    are obviously equivalent.  The way it is doing so is however somewhat
1267    kludgy and interferes with the visibility code. As a result we need to
1268    copy the visibility from the target to get things right.  */
1269
1270 void
1271 symtab_node::fixup_same_cpp_alias_visibility (symtab_node *target)
1272 {
1273   if (is_a <cgraph_node *> (this))
1274     {
1275       DECL_DECLARED_INLINE_P (decl)
1276          = DECL_DECLARED_INLINE_P (target->decl);
1277       DECL_DISREGARD_INLINE_LIMITS (decl)
1278          = DECL_DISREGARD_INLINE_LIMITS (target->decl);
1279     }
1280   /* FIXME: It is not really clear why those flags should not be copied for
1281      functions, too.  */
1282   else
1283     {
1284       DECL_WEAK (decl) = DECL_WEAK (target->decl);
1285       DECL_EXTERNAL (decl) = DECL_EXTERNAL (target->decl);
1286       DECL_VISIBILITY (decl) = DECL_VISIBILITY (target->decl);
1287     }
1288   DECL_VIRTUAL_P (decl) = DECL_VIRTUAL_P (target->decl);
1289   if (TREE_PUBLIC (decl))
1290     {
1291       tree group;
1292
1293       DECL_EXTERNAL (decl) = DECL_EXTERNAL (target->decl);
1294       DECL_COMDAT (decl) = DECL_COMDAT (target->decl);
1295       group = target->get_comdat_group ();
1296       set_comdat_group (group);
1297       if (group && !same_comdat_group)
1298         add_to_same_comdat_group (target);
1299     }
1300   externally_visible = target->externally_visible;
1301 }
1302
1303 /* Set section, do not recurse into aliases.
1304    When one wants to change section of symbol and its aliases,
1305    use set_section.  */
1306
1307 void
1308 symtab_node::set_section_for_node (const char *section)
1309 {
1310   const char *current = get_section ();
1311   section_hash_entry **slot;
1312
1313   if (current == section
1314       || (current && section
1315           && !strcmp (current, section)))
1316     return;
1317
1318   if (current)
1319     {
1320       x_section->ref_count--;
1321       if (!x_section->ref_count)
1322         {
1323           hashval_t hash = htab_hash_string (x_section->name);
1324           slot = symtab->section_hash->find_slot_with_hash (x_section->name,
1325                                                             hash, INSERT);
1326           ggc_free (x_section);
1327           symtab->section_hash->clear_slot (slot);
1328         }
1329       x_section = NULL;
1330     }
1331   if (!section)
1332     {
1333       implicit_section = false;
1334       return;
1335     }
1336   if (!symtab->section_hash)
1337     symtab->section_hash = hash_table<section_name_hasher>::create_ggc (10);
1338   slot = symtab->section_hash->find_slot_with_hash (section,
1339                                                     htab_hash_string (section),
1340                                                     INSERT);
1341   if (*slot)
1342     x_section = (section_hash_entry *)*slot;
1343   else
1344     {
1345       int len = strlen (section);
1346       *slot = x_section = ggc_cleared_alloc<section_hash_entry> ();
1347       x_section->name = ggc_vec_alloc<char> (len + 1);
1348       memcpy (x_section->name, section, len + 1);
1349     }
1350   x_section->ref_count++;
1351 }
1352
1353 /* Worker for set_section.  */
1354
1355 bool
1356 symtab_node::set_section (symtab_node *n, void *s)
1357 {
1358   n->set_section_for_node ((char *)s);
1359   return false;
1360 }
1361
1362 /* Set section of symbol and its aliases.  */
1363
1364 void
1365 symtab_node::set_section (const char *section)
1366 {
1367   gcc_assert (!this->alias);
1368   call_for_symbol_and_aliases
1369     (symtab_node::set_section, const_cast<char *>(section), true);
1370 }
1371
1372 /* Return the initialization priority.  */
1373
1374 priority_type
1375 symtab_node::get_init_priority ()
1376 {
1377   if (!this->in_init_priority_hash)
1378     return DEFAULT_INIT_PRIORITY;
1379
1380   symbol_priority_map *h = symtab->init_priority_hash->get (this);
1381   return h ? h->init : DEFAULT_INIT_PRIORITY;
1382 }
1383
1384 /* Return the finalization priority.  */
1385
1386 priority_type
1387 cgraph_node::get_fini_priority ()
1388 {
1389   if (!this->in_init_priority_hash)
1390     return DEFAULT_INIT_PRIORITY;
1391   symbol_priority_map *h = symtab->init_priority_hash->get (this);
1392   return h ? h->fini : DEFAULT_INIT_PRIORITY;
1393 }
1394
1395 /* Return the initialization and finalization priority information for
1396    DECL.  If there is no previous priority information, a freshly
1397    allocated structure is returned.  */
1398
1399 symbol_priority_map *
1400 symtab_node::priority_info (void)
1401 {
1402   if (!symtab->init_priority_hash)
1403     symtab->init_priority_hash = hash_map<symtab_node *, symbol_priority_map>::create_ggc (13);
1404
1405   bool existed;
1406   symbol_priority_map *h
1407     = &symtab->init_priority_hash->get_or_insert (this, &existed);
1408   if (!existed)
1409     {
1410       h->init = DEFAULT_INIT_PRIORITY;
1411       h->fini = DEFAULT_INIT_PRIORITY;
1412       in_init_priority_hash = true;
1413     }
1414
1415   return h;
1416 }
1417
1418 /* Set initialization priority to PRIORITY.  */
1419
1420 void
1421 symtab_node::set_init_priority (priority_type priority)
1422 {
1423   symbol_priority_map *h;
1424
1425   if (is_a <cgraph_node *> (this))
1426     gcc_assert (DECL_STATIC_CONSTRUCTOR (this->decl));
1427
1428   if (priority == DEFAULT_INIT_PRIORITY)
1429     {
1430       gcc_assert (get_init_priority() == priority);
1431       return;
1432     }
1433   h = priority_info ();
1434   h->init = priority;
1435 }
1436
1437 /* Set fialization priority to PRIORITY.  */
1438
1439 void
1440 cgraph_node::set_fini_priority (priority_type priority)
1441 {
1442   symbol_priority_map *h;
1443
1444   gcc_assert (DECL_STATIC_DESTRUCTOR (this->decl));
1445
1446   if (priority == DEFAULT_INIT_PRIORITY)
1447     {
1448       gcc_assert (get_fini_priority() == priority);
1449       return;
1450     }
1451   h = priority_info ();
1452   h->fini = priority;
1453 }
1454
1455 /* Worker for symtab_resolve_alias.  */
1456
1457 bool
1458 symtab_node::set_implicit_section (symtab_node *n,
1459                                    void *data ATTRIBUTE_UNUSED)
1460 {
1461   n->implicit_section = true;
1462   return false;
1463 }
1464
1465 /* Add reference recording that symtab node is alias of TARGET.
1466    The function can fail in the case of aliasing cycles; in this case
1467    it returns false.  */
1468
1469 bool
1470 symtab_node::resolve_alias (symtab_node *target)
1471 {
1472   symtab_node *n;
1473
1474   gcc_assert (!analyzed && !vec_safe_length (ref_list.references));
1475
1476   /* Never let cycles to creep into the symbol table alias references;
1477      those will make alias walkers to be infinite.  */
1478   for (n = target; n && n->alias;
1479        n = n->analyzed ? n->get_alias_target () : NULL)
1480     if (n == this)
1481        {
1482          if (is_a <cgraph_node *> (this))
1483            error ("function %q+D part of alias cycle", decl);
1484          else if (is_a <varpool_node *> (this))
1485            error ("variable %q+D part of alias cycle", decl);
1486          else
1487            gcc_unreachable ();
1488          alias = false;
1489          return false;
1490        }
1491
1492   /* "analyze" the node - i.e. mark the reference.  */
1493   definition = true;
1494   alias = true;
1495   analyzed = true;
1496   create_reference (target, IPA_REF_ALIAS, NULL);
1497
1498   /* Add alias into the comdat group of its target unless it is already there.  */
1499   if (same_comdat_group)
1500     remove_from_same_comdat_group ();
1501   set_comdat_group (NULL);
1502   if (target->get_comdat_group ())
1503     add_to_same_comdat_group (target);
1504
1505   if ((get_section () != target->get_section ()
1506        || target->get_comdat_group ()) && get_section () && !implicit_section)
1507     {
1508       error ("section of alias %q+D must match section of its target", decl);
1509     }
1510   call_for_symbol_and_aliases (symtab_node::set_section,
1511                              const_cast<char *>(target->get_section ()), true);
1512   if (target->implicit_section)
1513     call_for_symbol_and_aliases (set_implicit_section, NULL, true);
1514
1515   /* Alias targets become redundant after alias is resolved into an reference.
1516      We do not want to keep it around or we would have to mind updating them
1517      when renaming symbols.  */
1518   alias_target = NULL;
1519
1520   if (cpp_implicit_alias && symtab->state >= CONSTRUCTION)
1521     fixup_same_cpp_alias_visibility (target);
1522
1523   /* If alias has address taken, so does the target.  */
1524   if (address_taken)
1525     target->ultimate_alias_target ()->address_taken = true;
1526
1527   /* All non-weakref aliases of THIS are now in fact aliases of TARGET.  */
1528   ipa_ref *ref;
1529   for (unsigned i = 0; iterate_direct_aliases (i, ref);)
1530     {
1531       struct symtab_node *alias_alias = ref->referring;
1532       if (!alias_alias->weakref)
1533         {
1534           alias_alias->remove_all_references ();
1535           alias_alias->create_reference (target, IPA_REF_ALIAS, NULL);
1536         }
1537       else i++;
1538     }
1539   return true;
1540 }
1541
1542 /* Worker searching noninterposable alias.  */
1543
1544 bool
1545 symtab_node::noninterposable_alias (symtab_node *node, void *data)
1546 {
1547   if (decl_binds_to_current_def_p (node->decl))
1548     {
1549       symtab_node *fn = node->ultimate_alias_target ();
1550
1551       /* Ensure that the alias is well formed this may not be the case
1552          of user defined aliases and currently it is not always the case
1553          of C++ same body aliases (that is a bug).  */
1554       if (TREE_TYPE (node->decl) != TREE_TYPE (fn->decl)
1555           || DECL_CONTEXT (node->decl) != DECL_CONTEXT (fn->decl)
1556           || (TREE_CODE (node->decl) == FUNCTION_DECL
1557               && flags_from_decl_or_type (node->decl)
1558                  != flags_from_decl_or_type (fn->decl))
1559           || DECL_ATTRIBUTES (node->decl) != DECL_ATTRIBUTES (fn->decl))
1560         return false;
1561       *(symtab_node **)data = node;
1562       return true;
1563     }
1564   return false;
1565 }
1566
1567 /* If node can not be overwriten by static or dynamic linker to point to
1568    different definition, return NODE. Otherwise look for alias with such
1569    property and if none exists, introduce new one.  */
1570
1571 symtab_node *
1572 symtab_node::noninterposable_alias (void)
1573 {
1574   tree new_decl;
1575   symtab_node *new_node = NULL;
1576
1577   /* First try to look up existing alias or base object
1578      (if that is already non-overwritable).  */
1579   symtab_node *node = ultimate_alias_target ();
1580   gcc_assert (!node->alias && !node->weakref);
1581   node->call_for_symbol_and_aliases (symtab_node::noninterposable_alias,
1582                                    (void *)&new_node, true);
1583   if (new_node)
1584     return new_node;
1585 #ifndef ASM_OUTPUT_DEF
1586   /* If aliases aren't supported by the assembler, fail.  */
1587   return NULL;
1588 #endif
1589
1590   /* Otherwise create a new one.  */
1591   new_decl = copy_node (node->decl);
1592   DECL_DLLIMPORT_P (new_decl) = 0;
1593   DECL_NAME (new_decl) = clone_function_name (node->decl, "localalias");
1594   if (TREE_CODE (new_decl) == FUNCTION_DECL)
1595     DECL_STRUCT_FUNCTION (new_decl) = NULL;
1596   DECL_INITIAL (new_decl) = NULL;
1597   SET_DECL_ASSEMBLER_NAME (new_decl, DECL_NAME (new_decl));
1598   SET_DECL_RTL (new_decl, NULL);
1599
1600   /* Update the properties.  */
1601   DECL_EXTERNAL (new_decl) = 0;
1602   TREE_PUBLIC (new_decl) = 0;
1603   DECL_COMDAT (new_decl) = 0;
1604   DECL_WEAK (new_decl) = 0;
1605
1606   /* Since the aliases can be added to vtables, keep DECL_VIRTUAL flag.  */
1607   DECL_VIRTUAL_P (new_decl) = DECL_VIRTUAL_P (node->decl);
1608   if (TREE_CODE (new_decl) == FUNCTION_DECL)
1609     {
1610       DECL_STATIC_CONSTRUCTOR (new_decl) = 0;
1611       DECL_STATIC_DESTRUCTOR (new_decl) = 0;
1612       new_node = cgraph_node::create_alias (new_decl, node->decl);
1613     }
1614   else
1615     {
1616       TREE_READONLY (new_decl) = TREE_READONLY (node->decl);
1617       DECL_INITIAL (new_decl) = error_mark_node;
1618       new_node = varpool_node::create_alias (new_decl, node->decl);
1619     }
1620   new_node->resolve_alias (node);
1621   gcc_assert (decl_binds_to_current_def_p (new_decl)
1622               && targetm.binds_local_p (new_decl));
1623   return new_node;
1624 }
1625
1626 /* Return true if symtab node and TARGET represents
1627    semantically equivalent symbols.  */
1628
1629 bool
1630 symtab_node::semantically_equivalent_p (symtab_node *target)
1631 {
1632   enum availability avail;
1633   symtab_node *ba;
1634   symtab_node *bb;
1635
1636   /* Equivalent functions are equivalent.  */
1637   if (decl == target->decl)
1638     return true;
1639
1640   /* If symbol is not overwritable by different implementation,
1641      walk to the base object it defines.  */
1642   ba = ultimate_alias_target (&avail);
1643   if (avail >= AVAIL_AVAILABLE)
1644     {
1645       if (target == ba)
1646         return true;
1647     }
1648   else
1649     ba = this;
1650   bb = target->ultimate_alias_target (&avail);
1651   if (avail >= AVAIL_AVAILABLE)
1652     {
1653       if (this == bb)
1654         return true;
1655     }
1656   else
1657     bb = target;
1658   return bb == ba;
1659 }
1660
1661 /* Classify symbol symtab node for partitioning.  */
1662
1663 enum symbol_partitioning_class
1664 symtab_node::get_partitioning_class (void)
1665 {
1666   /* Inline clones are always duplicated.
1667      This include external delcarations.   */
1668   cgraph_node *cnode = dyn_cast <cgraph_node *> (this);
1669
1670   if (DECL_ABSTRACT_P (decl))
1671     return SYMBOL_EXTERNAL;
1672
1673   if (cnode && cnode->global.inlined_to)
1674     return SYMBOL_DUPLICATE;
1675
1676   /* Weakref aliases are always duplicated.  */
1677   if (weakref)
1678     return SYMBOL_DUPLICATE;
1679
1680   /* External declarations are external.  */
1681   if (DECL_EXTERNAL (decl))
1682     return SYMBOL_EXTERNAL;
1683
1684   if (varpool_node *vnode = dyn_cast <varpool_node *> (this))
1685     {
1686       if (alias && definition && !ultimate_alias_target ()->definition)
1687         return SYMBOL_EXTERNAL;
1688       /* Constant pool references use local symbol names that can not
1689          be promoted global.  We should never put into a constant pool
1690          objects that can not be duplicated across partitions.  */
1691       if (DECL_IN_CONSTANT_POOL (decl))
1692         return SYMBOL_DUPLICATE;
1693       if (DECL_HARD_REGISTER (decl))
1694         return SYMBOL_DUPLICATE;
1695       gcc_checking_assert (vnode->definition);
1696     }
1697   /* Functions that are cloned may stay in callgraph even if they are unused.
1698      Handle them as external; compute_ltrans_boundary take care to make
1699      proper things to happen (i.e. to make them appear in the boundary but
1700      with body streamed, so clone can me materialized).  */
1701   else if (!dyn_cast <cgraph_node *> (this)->function_symbol ()->definition)
1702     return SYMBOL_EXTERNAL;
1703
1704   /* Linker discardable symbols are duplicated to every use unless they are
1705      keyed.  */
1706   if (DECL_ONE_ONLY (decl)
1707       && !force_output
1708       && !forced_by_abi
1709       && !used_from_object_file_p ())
1710     return SYMBOL_DUPLICATE;
1711
1712   return SYMBOL_PARTITION;
1713 }
1714
1715 /* Return true when symbol is known to be non-zero.  */
1716
1717 bool
1718 symtab_node::nonzero_address ()
1719 {
1720   /* Weakrefs may be NULL when their target is not defined.  */
1721   if (alias && weakref)
1722     {
1723       if (analyzed)
1724         {
1725           symtab_node *target = ultimate_alias_target ();
1726
1727           if (target->alias && target->weakref)
1728             return false;
1729           /* We can not recurse to target::nonzero.  It is possible that the
1730              target is used only via the alias.
1731              We may walk references and look for strong use, but we do not know
1732              if this strong use will survive to final binary, so be
1733              conservative here.  
1734              ??? Maybe we could do the lookup during late optimization that
1735              could be useful to eliminate the NULL pointer checks in LTO
1736              programs.  */
1737           if (target->definition && !DECL_EXTERNAL (target->decl))
1738               return true;
1739           if (target->resolution != LDPR_UNKNOWN
1740               && target->resolution != LDPR_UNDEF
1741               && flag_delete_null_pointer_checks)
1742             return true;
1743           return false;
1744         }
1745       else
1746         return false;
1747     }
1748
1749   /* With !flag_delete_null_pointer_checks we assume that symbols may
1750      bind to NULL. This is on by default on embedded targets only.
1751
1752      Otherwise all non-WEAK symbols must be defined and thus non-NULL or
1753      linking fails.  Important case of WEAK we want to do well are comdats.
1754      Those are handled by later check for definition.
1755
1756      When parsing, beware the cases when WEAK attribute is added later.  */
1757   if (!DECL_WEAK (decl)
1758       && flag_delete_null_pointer_checks)
1759     {
1760       refuse_visibility_changes = true;
1761       return true;
1762     }
1763
1764   /* If target is defined and not extern, we know it will be output and thus
1765      it will bind to non-NULL.
1766      Play safe for flag_delete_null_pointer_checks where weak definition maye
1767      be re-defined by NULL.  */
1768   if (definition && !DECL_EXTERNAL (decl)
1769       && (flag_delete_null_pointer_checks || !DECL_WEAK (decl)))
1770     {
1771       if (!DECL_WEAK (decl))
1772         refuse_visibility_changes = true;
1773       return true;
1774     }
1775
1776   /* As the last resort, check the resolution info.  */
1777   if (resolution != LDPR_UNKNOWN
1778       && resolution != LDPR_UNDEF
1779       && flag_delete_null_pointer_checks)
1780     return true;
1781   return false;
1782 }
1783
1784 /* Return 0 if symbol is known to have different address than S2,
1785    Return 1 if symbol is known to have same address as S2,
1786    return 2 otherwise.   */
1787 int
1788 symtab_node::equal_address_to (symtab_node *s2)
1789 {
1790   enum availability avail1, avail2;
1791
1792   /* A Shortcut: equivalent symbols are always equivalent.  */
1793   if (this == s2)
1794     return 1;
1795
1796   /* For non-interposable aliases, lookup and compare their actual definitions.
1797      Also check if the symbol needs to bind to given definition.  */
1798   symtab_node *rs1 = ultimate_alias_target (&avail1);
1799   symtab_node *rs2 = s2->ultimate_alias_target (&avail2);
1800   bool binds_local1 = rs1->analyzed && decl_binds_to_current_def_p (this->decl);
1801   bool binds_local2 = rs2->analyzed && decl_binds_to_current_def_p (s2->decl);
1802   bool really_binds_local1 = binds_local1;
1803   bool really_binds_local2 = binds_local2;
1804
1805   /* Addresses of vtables and virtual functions can not be used by user
1806      code and are used only within speculation.  In this case we may make
1807      symbol equivalent to its alias even if interposition may break this
1808      rule.  Doing so will allow us to turn speculative inlining into
1809      non-speculative more agressively.  */
1810   if (DECL_VIRTUAL_P (this->decl) && avail1 >= AVAIL_AVAILABLE)
1811     binds_local1 = true;
1812   if (DECL_VIRTUAL_P (s2->decl) && avail2 >= AVAIL_AVAILABLE)
1813     binds_local2 = true;
1814
1815   /* If both definitions are available we know that even if they are bound
1816      to other unit they must be defined same way and therefore we can use
1817      equivalence test.  */
1818   if (rs1 != rs2 && avail1 >= AVAIL_AVAILABLE && avail2 >= AVAIL_AVAILABLE)
1819     binds_local1 = binds_local2 = true;
1820
1821   if ((binds_local1 ? rs1 : this)
1822        == (binds_local2 ? rs2 : s2))
1823     {
1824       /* We made use of the fact that alias is not weak.  */
1825       if (binds_local1 && rs1 != this)
1826         refuse_visibility_changes = true;
1827       if (binds_local2 && rs2 != s2)
1828         s2->refuse_visibility_changes = true;
1829       return 1;
1830     }
1831
1832   /* If both symbols may resolve to NULL, we can not really prove them different.  */
1833   if (!nonzero_address () && !s2->nonzero_address ())
1834     return 2;
1835
1836   /* Except for NULL, functions and variables never overlap.  */
1837   if (TREE_CODE (decl) != TREE_CODE (s2->decl))
1838     return 0;
1839
1840   /* If one of the symbols is unresolved alias, punt.  */
1841   if (rs1->alias || rs2->alias)
1842     return 2;
1843
1844   /* If we have a non-interposale definition of at least one of the symbols
1845      and the other symbol is different, we know other unit can not interpose
1846      it to the first symbol; all aliases of the definition needs to be 
1847      present in the current unit.  */
1848   if (((really_binds_local1 || really_binds_local2)
1849       /* If we have both definitions and they are different, we know they
1850          will be different even in units they binds to.  */
1851        || (binds_local1 && binds_local2))
1852       && rs1 != rs2)
1853     {
1854       /* We make use of the fact that one symbol is not alias of the other
1855          and that the definition is non-interposable.  */
1856       refuse_visibility_changes = true;
1857       s2->refuse_visibility_changes = true;
1858       rs1->refuse_visibility_changes = true;
1859       rs2->refuse_visibility_changes = true;
1860       return 0;
1861     }
1862
1863   /* TODO: Alias oracle basically assume that addresses of global variables
1864      are different unless they are declared as alias of one to another.
1865      We probably should be consistent and use this fact here, too, and update
1866      alias oracle to use this predicate.  */
1867
1868   return 2;
1869 }
1870
1871 /* Worker for call_for_symbol_and_aliases.  */
1872
1873 bool
1874 symtab_node::call_for_symbol_and_aliases_1 (bool (*callback) (symtab_node *,
1875                                                               void *),
1876                                             void *data,
1877                                             bool include_overwritable)
1878 {
1879   ipa_ref *ref;
1880   FOR_EACH_ALIAS (this, ref)
1881     {
1882       symtab_node *alias = ref->referring;
1883       if (include_overwritable
1884           || alias->get_availability () > AVAIL_INTERPOSABLE)
1885         if (alias->call_for_symbol_and_aliases (callback, data,
1886                                               include_overwritable))
1887           return true;
1888     }
1889   return false;
1890 }
1891
1892 /* Return ture if address of N is possibly compared.  */
1893
1894 static bool
1895 address_matters_1 (symtab_node *n, void *)
1896 {
1897   struct ipa_ref *ref;
1898
1899   if (!n->address_can_be_compared_p ())
1900     return false;
1901   if (n->externally_visible || n->force_output)
1902     return true;
1903
1904   for (unsigned int i = 0; n->iterate_referring (i, ref); i++)
1905     if (ref->address_matters_p ())
1906       return true;
1907   return false;
1908 }
1909
1910 /* Return true if symbol's address may possibly be compared to other
1911    symbol's address.  */
1912
1913 bool
1914 symtab_node::address_matters_p ()
1915 {
1916   gcc_assert (!alias);
1917   return call_for_symbol_and_aliases (address_matters_1, NULL, true);
1918 }
1919
1920 /* Return ture if symbol's alignment may be increased.  */
1921
1922 bool
1923 symtab_node::can_increase_alignment_p (void)
1924 {
1925   symtab_node *target = ultimate_alias_target ();
1926
1927   /* For now support only variables.  */
1928   if (TREE_CODE (decl) != VAR_DECL)
1929     return false;
1930
1931   /* With -fno-toplevel-reorder we may have already output the constant.  */
1932   if (TREE_ASM_WRITTEN (target->decl))
1933     return false;
1934
1935   /* If target is already placed in an anchor, we can not touch its
1936      alignment.  */
1937   if (DECL_RTL_SET_P (target->decl)
1938       && MEM_P (DECL_RTL (target->decl))
1939       && SYMBOL_REF_HAS_BLOCK_INFO_P (XEXP (DECL_RTL (target->decl), 0)))
1940     return false;
1941
1942   /* Constant pool entries may be shared.  */
1943   if (DECL_IN_CONSTANT_POOL (target->decl))
1944     return false;
1945
1946   /* We cannot change alignment of symbols that may bind to symbols
1947      in other translation unit that may contain a definition with lower
1948      alignment.  */
1949   if (!decl_binds_to_current_def_p (decl))
1950     return false;
1951
1952   /* When compiling partition, be sure the symbol is not output by other
1953      partition.  */
1954   if (flag_ltrans
1955       && (target->in_other_partition
1956           || target->get_partitioning_class () == SYMBOL_DUPLICATE))
1957     return false;
1958
1959   /* Do not override the alignment as specified by the ABI when the used
1960      attribute is set.  */
1961   if (DECL_PRESERVE_P (decl) || DECL_PRESERVE_P (target->decl))
1962     return false;
1963
1964   /* Do not override explicit alignment set by the user when an explicit
1965      section name is also used.  This is a common idiom used by many
1966      software projects.  */
1967   if (DECL_SECTION_NAME (target->decl) != NULL && !target->implicit_section)
1968     return false;
1969
1970   return true;
1971 }
1972
1973 /* Worker for symtab_node::increase_alignment.  */
1974
1975 static bool
1976 increase_alignment_1 (symtab_node *n, void *v)
1977 {
1978   unsigned int align = (size_t)v;
1979   if (DECL_ALIGN (n->decl) < align
1980       && n->can_increase_alignment_p ())
1981     {
1982       DECL_ALIGN (n->decl) = align;
1983       DECL_USER_ALIGN (n->decl) = 1;
1984     }
1985   return false;
1986 }
1987
1988 /* Increase alignment of THIS to ALIGN.  */
1989
1990 void
1991 symtab_node::increase_alignment (unsigned int align)
1992 {
1993   gcc_assert (can_increase_alignment_p () && align < MAX_OFILE_ALIGNMENT);
1994   ultimate_alias_target()->call_for_symbol_and_aliases (increase_alignment_1,
1995                                                         (void *)(size_t) align,
1996                                                         true);
1997   gcc_assert (DECL_ALIGN (decl) >= align);
1998 }
1999
2000 /* Helper for symtab_node::definition_alignment.  */
2001
2002 static bool
2003 get_alignment_1 (symtab_node *n, void *v)
2004 {
2005   *((unsigned int *)v) = MAX (*((unsigned int *)v), DECL_ALIGN (n->decl));
2006   return false;
2007 }
2008
2009 /* Return desired alignment of the definition.  This is NOT alignment useful
2010    to access THIS, because THIS may be interposable and DECL_ALIGN should
2011    be used instead.  It however must be guaranteed when output definition
2012    of THIS.  */
2013
2014 unsigned int
2015 symtab_node::definition_alignment ()
2016 {
2017   unsigned int align = 0;
2018   gcc_assert (!alias);
2019   call_for_symbol_and_aliases (get_alignment_1, &align, true);
2020   return align;
2021 }