1/* LTO symbol table.
2   Copyright 2009 Free Software Foundation, Inc.
3   Contributed by CodeSourcery, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 3, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along 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 "toplev.h"
25#include "tree.h"
26#include "gimple.h"
27#include "ggc.h"	/* lambda.h needs this */
28#include "lambda.h"	/* gcd */
29#include "hashtab.h"
30#include "plugin-api.h"
31#include "lto-streamer.h"
32
33/* Vector to keep track of external variables we've seen so far.  */
34VEC(tree,gc) *lto_global_var_decls;
35
36/* Symbol table entry.  */
37
38struct GTY(()) lto_symtab_entry_def
39{
40  /* The symbol table entry key, an IDENTIFIER.  */
41  tree id;
42  /* The symbol table entry, a DECL.  */
43  tree decl;
44  /* The cgraph node if decl is a function decl.  Filled in during the
45     merging process.  */
46  struct cgraph_node *node;
47  /* LTO file-data and symbol resolution for this decl.  */
48  struct lto_file_decl_data * GTY((skip (""))) file_data;
49  enum ld_plugin_symbol_resolution resolution;
50  /* Pointer to the next entry with the same key.  Before decl merging
51     this links all symbols from the different TUs.  After decl merging
52     this links merged but incompatible decls, thus all prevailing ones
53     remaining.  */
54  struct lto_symtab_entry_def *next;
55};
56typedef struct lto_symtab_entry_def *lto_symtab_entry_t;
57
58/* A poor man's symbol table. This hashes identifier to prevailing DECL
59   if there is one. */
60
61static GTY ((if_marked ("lto_symtab_entry_marked_p"),
62	     param_is (struct lto_symtab_entry_def)))
63  htab_t lto_symtab_identifiers;
64
65/* Return the hash value of an lto_symtab_entry_t object pointed to by P.  */
66
67static hashval_t
68lto_symtab_entry_hash (const void *p)
69{
70  const struct lto_symtab_entry_def *base =
71    (const struct lto_symtab_entry_def *) p;
72  return htab_hash_string (IDENTIFIER_POINTER (base->id));
73}
74
75/* Return non-zero if P1 and P2 points to lto_symtab_entry_def structs
76   corresponding to the same symbol.  */
77
78static int
79lto_symtab_entry_eq (const void *p1, const void *p2)
80{
81  const struct lto_symtab_entry_def *base1 =
82     (const struct lto_symtab_entry_def *) p1;
83  const struct lto_symtab_entry_def *base2 =
84     (const struct lto_symtab_entry_def *) p2;
85  return (base1->id == base2->id);
86}
87
88/* Returns non-zero if P points to an lto_symtab_entry_def struct that needs
89   to be marked for GC.  */
90
91static int
92lto_symtab_entry_marked_p (const void *p)
93{
94  const struct lto_symtab_entry_def *base =
95     (const struct lto_symtab_entry_def *) p;
96
97  /* Keep this only if the common IDENTIFIER_NODE of the symtab chain
98     is marked which it will be if at least one of the DECLs in the
99     chain is marked.  */
100  return ggc_marked_p (base->id);
101}
102
103/* Lazily initialize resolution hash tables.  */
104
105static void
106lto_symtab_maybe_init_hash_table (void)
107{
108  if (lto_symtab_identifiers)
109    return;
110
111  lto_symtab_identifiers =
112    htab_create_ggc (1021, lto_symtab_entry_hash,
113		     lto_symtab_entry_eq, NULL);
114}
115
116/* Registers DECL with the LTO symbol table as having resolution RESOLUTION
117   and read from FILE_DATA. */
118
119void
120lto_symtab_register_decl (tree decl,
121			  ld_plugin_symbol_resolution_t resolution,
122			  struct lto_file_decl_data *file_data)
123{
124  lto_symtab_entry_t new_entry;
125  void **slot;
126
127  /* Check that declarations reaching this function do not have
128     properties inconsistent with having external linkage.  If any of
129     these asertions fail, then the object file reader has failed to
130     detect these cases and issue appropriate error messages.  */
131  gcc_assert (decl
132	      && TREE_PUBLIC (decl)
133	      && (TREE_CODE (decl) == VAR_DECL
134		  || TREE_CODE (decl) == FUNCTION_DECL)
135	      && DECL_ASSEMBLER_NAME_SET_P (decl));
136  if (TREE_CODE (decl) == VAR_DECL
137      && DECL_INITIAL (decl))
138    gcc_assert (!DECL_EXTERNAL (decl)
139		|| (TREE_STATIC (decl) && TREE_READONLY (decl)));
140  if (TREE_CODE (decl) == FUNCTION_DECL)
141    gcc_assert (!DECL_ABSTRACT (decl));
142
143  new_entry = GGC_CNEW (struct lto_symtab_entry_def);
144  new_entry->id = DECL_ASSEMBLER_NAME (decl);
145  new_entry->decl = decl;
146  new_entry->resolution = resolution;
147  new_entry->file_data = file_data;
148
149  lto_symtab_maybe_init_hash_table ();
150  slot = htab_find_slot (lto_symtab_identifiers, new_entry, INSERT);
151  new_entry->next = (lto_symtab_entry_t) *slot;
152  *slot = new_entry;
153}
154
155/* Get the lto_symtab_entry_def struct associated with ID
156   if there is one.  */
157
158static lto_symtab_entry_t
159lto_symtab_get (tree id)
160{
161  struct lto_symtab_entry_def temp;
162  void **slot;
163
164  lto_symtab_maybe_init_hash_table ();
165  temp.id = id;
166  slot = htab_find_slot (lto_symtab_identifiers, &temp, NO_INSERT);
167  return slot ? (lto_symtab_entry_t) *slot : NULL;
168}
169
170/* Get the linker resolution for DECL.  */
171
172enum ld_plugin_symbol_resolution
173lto_symtab_get_resolution (tree decl)
174{
175  lto_symtab_entry_t e;
176
177  gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
178
179  e = lto_symtab_get (DECL_ASSEMBLER_NAME (decl));
180  while (e && e->decl != decl)
181    e = e->next;
182  if (!e)
183    return LDPR_UNKNOWN;
184
185  return e->resolution;
186}
187
188
189/* Replace the cgraph node NODE with PREVAILING_NODE in the cgraph, merging
190   all edges and removing the old node.  */
191
192static void
193lto_cgraph_replace_node (struct cgraph_node *node,
194			 struct cgraph_node *prevailing_node)
195{
196  struct cgraph_edge *e, *next;
197
198  /* Merge node flags.  */
199  if (node->needed)
200    cgraph_mark_needed_node (prevailing_node);
201  if (node->reachable)
202    cgraph_mark_reachable_node (prevailing_node);
203  if (node->address_taken)
204    {
205      gcc_assert (!prevailing_node->global.inlined_to);
206      cgraph_mark_address_taken_node (prevailing_node);
207    }
208
209  /* Redirect all incoming edges.  */
210  for (e = node->callers; e; e = next)
211    {
212      next = e->next_caller;
213      cgraph_redirect_edge_callee (e, prevailing_node);
214    }
215
216  /* There are not supposed to be any outgoing edges from a node we
217     replace.  Still this can happen for multiple instances of weak
218     functions.  */
219  for (e = node->callees; e; e = next)
220    {
221      next = e->next_callee;
222      cgraph_remove_edge (e);
223    }
224
225  if (node->same_body)
226    {
227      struct cgraph_node *alias;
228
229      for (alias = node->same_body; alias; alias = alias->next)
230	if (DECL_ASSEMBLER_NAME_SET_P (alias->decl))
231	  {
232	    lto_symtab_entry_t se
233	      = lto_symtab_get (DECL_ASSEMBLER_NAME (alias->decl));
234
235	    for (; se; se = se->next)
236	      if (se->node == node)
237		{
238		  se->node = NULL;
239		  break;
240		}
241	  }
242    }
243
244  /* Finally remove the replaced node.  */
245  cgraph_remove_node (node);
246}
247
248/* Merge two variable or function symbol table entries PREVAILING and ENTRY.
249   Return false if the symbols are not fully compatible and a diagnostic
250   should be emitted.  */
251
252static bool
253lto_symtab_merge (lto_symtab_entry_t prevailing, lto_symtab_entry_t entry)
254{
255  tree prevailing_decl = prevailing->decl;
256  tree decl = entry->decl;
257  tree prevailing_type, type;
258
259  /* Merge decl state in both directions, we may still end up using
260     the new decl.  */
261  TREE_ADDRESSABLE (prevailing_decl) |= TREE_ADDRESSABLE (decl);
262  TREE_ADDRESSABLE (decl) |= TREE_ADDRESSABLE (prevailing_decl);
263
264  /* The linker may ask us to combine two incompatible symbols.
265     Detect this case and notify the caller of required diagnostics.  */
266
267  if (TREE_CODE (decl) == FUNCTION_DECL)
268    {
269      if (TREE_TYPE (prevailing_decl) != TREE_TYPE (decl))
270	/* If we don't have a merged type yet...sigh.  The linker
271	   wouldn't complain if the types were mismatched, so we
272	   probably shouldn't either.  Just use the type from
273	   whichever decl appears to be associated with the
274	   definition.  If for some odd reason neither decl is, the
275	   older one wins.  */
276	(void) 0;
277
278      return true;
279    }
280
281  /* Now we exclusively deal with VAR_DECLs.  */
282
283  /* Sharing a global symbol is a strong hint that two types are
284     compatible.  We could use this information to complete
285     incomplete pointed-to types more aggressively here, ignoring
286     mismatches in both field and tag names.  It's difficult though
287     to guarantee that this does not have side-effects on merging
288     more compatible types from other translation units though.  */
289
290  /* We can tolerate differences in type qualification, the
291     qualification of the prevailing definition will prevail.
292     ???  In principle we might want to only warn for structurally
293     incompatible types here, but unless we have protective measures
294     for TBAA in place that would hide useful information.  */
295  prevailing_type = TYPE_MAIN_VARIANT (TREE_TYPE (prevailing_decl));
296  type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
297
298  /* We have to register and fetch canonical types here as the global
299     fixup process didn't yet run.  */
300  prevailing_type = gimple_register_type (prevailing_type);
301  type = gimple_register_type (type);
302  if (prevailing_type != type)
303    {
304      if (COMPLETE_TYPE_P (type))
305	return false;
306
307      /* If type is incomplete then avoid warnings in the cases
308	 that TBAA handles just fine.  */
309
310      if (TREE_CODE (prevailing_type) != TREE_CODE (type))
311	return false;
312
313      if (TREE_CODE (prevailing_type) == ARRAY_TYPE)
314	{
315	  tree tem1 = TREE_TYPE (prevailing_type);
316	  tree tem2 = TREE_TYPE (type);
317	  while (TREE_CODE (tem1) == ARRAY_TYPE
318		 && TREE_CODE (tem2) == ARRAY_TYPE)
319	    {
320	      tem1 = TREE_TYPE (tem1);
321	      tem2 = TREE_TYPE (tem2);
322	    }
323
324	  if (TREE_CODE (tem1) != TREE_CODE (tem2))
325	    return false;
326
327	  if (gimple_register_type (tem1) != gimple_register_type (tem2))
328	    return false;
329	}
330
331      /* Fallthru.  Compatible enough.  */
332    }
333
334  /* ???  We might want to emit a warning here if type qualification
335     differences were spotted.  Do not do this unconditionally though.  */
336
337  /* There is no point in comparing too many details of the decls here.
338     The type compatibility checks or the completing of types has properly
339     dealt with most issues.  */
340
341  /* The following should all not invoke fatal errors as in non-LTO
342     mode the linker wouldn't complain either.  Just emit warnings.  */
343
344  /* Report a warning if user-specified alignments do not match.  */
345  if ((DECL_USER_ALIGN (prevailing_decl) && DECL_USER_ALIGN (decl))
346      && DECL_ALIGN (prevailing_decl) < DECL_ALIGN (decl))
347    return false;
348
349  return true;
350}
351
352/* Return true if the symtab entry E can be replaced by another symtab
353   entry.  */
354
355static bool
356lto_symtab_resolve_replaceable_p (lto_symtab_entry_t e)
357{
358  if (DECL_EXTERNAL (e->decl)
359      || DECL_COMDAT (e->decl)
360      || DECL_WEAK (e->decl))
361    return true;
362
363  if (TREE_CODE (e->decl) == VAR_DECL)
364    return (DECL_COMMON (e->decl)
365	    || (!flag_no_common && !DECL_INITIAL (e->decl)));
366
367  return false;
368}
369
370/* Return true if the symtab entry E can be the prevailing one.  */
371
372static bool
373lto_symtab_resolve_can_prevail_p (lto_symtab_entry_t e)
374{
375  /* The C++ frontend ends up neither setting TREE_STATIC nor
376     DECL_EXTERNAL on virtual methods but only TREE_PUBLIC.
377     So do not reject !TREE_STATIC here but only DECL_EXTERNAL.  */
378  if (DECL_EXTERNAL (e->decl))
379    return false;
380
381  /* For functions we need a non-discarded body.  */
382  if (TREE_CODE (e->decl) == FUNCTION_DECL)
383    return (e->node && e->node->analyzed);
384
385  /* A variable should have a size.  */
386  else if (TREE_CODE (e->decl) == VAR_DECL)
387    return (DECL_SIZE (e->decl) != NULL_TREE
388	    /* The C++ frontend retains TREE_STATIC on the declaration
389	       of foo_ in struct Foo { static Foo *foo_; }; but it is
390	       not a definition.  g++.dg/lto/20090315_0.C.  */
391	    && !DECL_EXTERNAL (e->decl));
392
393  gcc_unreachable ();
394}
395
396/* Resolve the symbol with the candidates in the chain *SLOT and store
397   their resolutions.  */
398
399static void
400lto_symtab_resolve_symbols (void **slot)
401{
402  lto_symtab_entry_t e;
403  lto_symtab_entry_t prevailing = NULL;
404
405  /* Always set e->node so that edges are updated to reflect decl merging. */
406  for (e = (lto_symtab_entry_t) *slot; e; e = e->next)
407    {
408      if (TREE_CODE (e->decl) == FUNCTION_DECL)
409	e->node = cgraph_get_node (e->decl);
410      else if (TREE_CODE (e->decl) == VAR_DECL)
411	{
412	  /* The LTO plugin for gold doesn't handle common symbols
413	     properly.  Let us choose manually.  */
414	  if (DECL_COMMON (e->decl))
415	    e->resolution = LDPR_UNKNOWN;
416	}
417    }
418
419  e = (lto_symtab_entry_t) *slot;
420
421  /* If the chain is already resolved there is nothing else to do.  */
422  if (e->resolution != LDPR_UNKNOWN)
423    return;
424
425  /* Find the single non-replaceable prevailing symbol and
426     diagnose ODR violations.  */
427  for (e = (lto_symtab_entry_t) *slot; e; e = e->next)
428    {
429      if (!lto_symtab_resolve_can_prevail_p (e))
430	{
431	  e->resolution = LDPR_RESOLVED_IR;
432	  continue;
433	}
434
435      /* Set a default resolution - the final prevailing one will get
436         adjusted later.  */
437      e->resolution = LDPR_PREEMPTED_IR;
438      if (!lto_symtab_resolve_replaceable_p (e))
439	{
440	  if (prevailing)
441	    {
442	      error_at (DECL_SOURCE_LOCATION (e->decl),
443			"%qD has already been defined", e->decl);
444	      inform (DECL_SOURCE_LOCATION (prevailing->decl),
445		      "previously defined here");
446	    }
447	  prevailing = e;
448	}
449    }
450  if (prevailing)
451    goto found;
452
453  /* Do a second round choosing one from the replaceable prevailing decls.  */
454  for (e = (lto_symtab_entry_t) *slot; e; e = e->next)
455    {
456      if (e->resolution != LDPR_PREEMPTED_IR)
457	continue;
458
459      /* Choose the first function that can prevail as prevailing.  */
460      if (TREE_CODE (e->decl) == FUNCTION_DECL)
461	{
462	  prevailing = e;
463	  break;
464	}
465
466      /* From variables that can prevail choose the largest one.  */
467      if (!prevailing
468	  || tree_int_cst_lt (DECL_SIZE (prevailing->decl),
469			      DECL_SIZE (e->decl)))
470	prevailing = e;
471    }
472
473  if (!prevailing)
474    return;
475
476found:
477  if (TREE_CODE (prevailing->decl) == VAR_DECL
478      && TREE_READONLY (prevailing->decl))
479    prevailing->resolution = LDPR_PREVAILING_DEF_IRONLY;
480  else
481    prevailing->resolution = LDPR_PREVAILING_DEF;
482}
483
484/* Merge all decls in the symbol table chain to the prevailing decl and
485   issue diagnostics about type mismatches.  */
486
487static void
488lto_symtab_merge_decls_2 (void **slot)
489{
490  lto_symtab_entry_t prevailing, e;
491  VEC(tree, heap) *mismatches = NULL;
492  unsigned i;
493  tree decl;
494  bool diagnosed_p = false;
495
496  /* Nothing to do for a single entry.  */
497  prevailing = (lto_symtab_entry_t) *slot;
498  if (!prevailing->next)
499    return;
500
501  /* Try to merge each entry with the prevailing one.  */
502  for (e = prevailing->next; e; e = e->next)
503    {
504      if (!lto_symtab_merge (prevailing, e))
505	VEC_safe_push (tree, heap, mismatches, e->decl);
506    }
507  if (VEC_empty (tree, mismatches))
508    return;
509
510  /* Diagnose all mismatched re-declarations.  */
511  for (i = 0; VEC_iterate (tree, mismatches, i, decl); ++i)
512    {
513      if (TREE_TYPE (prevailing->decl) != TREE_TYPE (decl))
514	diagnosed_p |= warning_at (DECL_SOURCE_LOCATION (decl), 0,
515				   "type of %qD does not match original "
516				   "declaration", decl);
517
518      else if ((DECL_USER_ALIGN (prevailing->decl) && DECL_USER_ALIGN (decl))
519	       && DECL_ALIGN (prevailing->decl) < DECL_ALIGN (decl))
520	{
521	  diagnosed_p |= warning_at (DECL_SOURCE_LOCATION (decl), 0,
522				     "alignment of %qD is bigger than "
523				     "original declaration", decl);
524	}
525    }
526  if (diagnosed_p)
527    inform (DECL_SOURCE_LOCATION (prevailing->decl),
528	    "previously declared here");
529
530  VEC_free (tree, heap, mismatches);
531}
532
533/* Helper to process the decl chain for the symbol table entry *SLOT.  */
534
535static int
536lto_symtab_merge_decls_1 (void **slot, void *data ATTRIBUTE_UNUSED)
537{
538  lto_symtab_entry_t e, prevailing;
539  bool diagnosed_p = false;
540
541  /* Compute the symbol resolutions.  This is a no-op when using the
542     linker plugin.  */
543  lto_symtab_resolve_symbols (slot);
544
545  /* Find the prevailing decl.  */
546  for (prevailing = (lto_symtab_entry_t) *slot;
547       prevailing
548       && prevailing->resolution != LDPR_PREVAILING_DEF_IRONLY
549       && prevailing->resolution != LDPR_PREVAILING_DEF;
550       prevailing = prevailing->next)
551    ;
552
553  /* Assert it's the only one.  */
554  if (prevailing)
555    for (e = prevailing->next; e; e = e->next)
556      gcc_assert (e->resolution != LDPR_PREVAILING_DEF_IRONLY
557		  && e->resolution != LDPR_PREVAILING_DEF);
558
559  /* If there's not a prevailing symbol yet it's an external reference.
560     Happens a lot during ltrans.  Choose the first symbol with a
561     cgraph or a varpool node.  */
562  if (!prevailing)
563    {
564      prevailing = (lto_symtab_entry_t) *slot;
565      /* For functions choose one with a cgraph node.  */
566      if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
567	while (!prevailing->node
568	       && prevailing->next)
569	  prevailing = prevailing->next;
570      /* We do not stream varpool nodes, so the first decl has to
571	 be good enough for now.
572	 ???  For QOI choose a variable with readonly initializer
573	 if there is one.  This matches C++
574	 struct Foo { static const int i = 1; }; without a real
575	 definition.  */
576      if (TREE_CODE (prevailing->decl) == VAR_DECL)
577	while (!(TREE_READONLY (prevailing->decl)
578		 && DECL_INITIAL (prevailing->decl))
579	       && prevailing->next)
580	  prevailing = prevailing->next;
581    }
582
583  /* Move it first in the list.  */
584  if ((lto_symtab_entry_t) *slot != prevailing)
585    {
586      for (e = (lto_symtab_entry_t) *slot; e->next != prevailing; e = e->next)
587	;
588      e->next = prevailing->next;
589      prevailing->next = (lto_symtab_entry_t) *slot;
590      *slot = (void *) prevailing;
591    }
592
593  /* Record the prevailing variable.  */
594  if (TREE_CODE (prevailing->decl) == VAR_DECL)
595    VEC_safe_push (tree, gc, lto_global_var_decls, prevailing->decl);
596
597  /* Diagnose mismatched objects.  */
598  for (e = prevailing->next; e; e = e->next)
599    {
600      if (TREE_CODE (prevailing->decl) == TREE_CODE (e->decl))
601	continue;
602
603      switch (TREE_CODE (prevailing->decl))
604	{
605	case VAR_DECL:
606	  gcc_assert (TREE_CODE (e->decl) == FUNCTION_DECL);
607	  error_at (DECL_SOURCE_LOCATION (e->decl),
608		    "variable %qD redeclared as function", prevailing->decl);
609	  break;
610
611	case FUNCTION_DECL:
612	  gcc_assert (TREE_CODE (e->decl) == VAR_DECL);
613	  error_at (DECL_SOURCE_LOCATION (e->decl),
614		    "function %qD redeclared as variable", prevailing->decl);
615	  break;
616
617	default:
618	  gcc_unreachable ();
619	}
620
621      diagnosed_p = true;
622    }
623  if (diagnosed_p)
624      inform (DECL_SOURCE_LOCATION (prevailing->decl),
625	      "previously declared here");
626
627  /* Register and adjust types of the entries.  */
628  for (e = (lto_symtab_entry_t) *slot; e; e = e->next)
629    TREE_TYPE (e->decl) = gimple_register_type (TREE_TYPE (e->decl));
630
631  /* Merge the chain to the single prevailing decl and diagnose
632     mismatches.  */
633  lto_symtab_merge_decls_2 (slot);
634
635  /* Drop all but the prevailing decl from the symtab.  */
636  if (TREE_CODE (prevailing->decl) != FUNCTION_DECL)
637    prevailing->next = NULL;
638
639  return 1;
640}
641
642/* Resolve and merge all symbol table chains to a prevailing decl.  */
643
644void
645lto_symtab_merge_decls (void)
646{
647  lto_symtab_maybe_init_hash_table ();
648  htab_traverse (lto_symtab_identifiers, lto_symtab_merge_decls_1, NULL);
649}
650
651/* Helper to process the decl chain for the symbol table entry *SLOT.  */
652
653static int
654lto_symtab_merge_cgraph_nodes_1 (void **slot, void *data ATTRIBUTE_UNUSED)
655{
656  lto_symtab_entry_t e, prevailing = (lto_symtab_entry_t) *slot;
657
658  if (!prevailing->next)
659    return 1;
660
661  gcc_assert (TREE_CODE (prevailing->decl) == FUNCTION_DECL);
662
663  /* Replace the cgraph node of each entry with the prevailing one.  */
664  for (e = prevailing->next; e; e = e->next)
665    {
666      if (e->node != NULL)
667	{
668	  if (e->node->decl != e->decl && e->node->same_body)
669	    {
670	      struct cgraph_node *alias;
671
672	      for (alias = e->node->same_body; alias; alias = alias->next)
673		if (alias->decl == e->decl)
674		  break;
675	      if (alias)
676		{
677		  cgraph_remove_same_body_alias (alias);
678		  continue;
679		}
680	    }
681	  lto_cgraph_replace_node (e->node, prevailing->node);
682	}
683    }
684
685  /* Drop all but the prevailing decl from the symtab.  */
686  prevailing->next = NULL;
687
688  return 1;
689}
690
691/* Merge cgraph nodes according to the symbol merging done by
692   lto_symtab_merge_decls.  */
693
694void
695lto_symtab_merge_cgraph_nodes (void)
696{
697  lto_symtab_maybe_init_hash_table ();
698  htab_traverse (lto_symtab_identifiers, lto_symtab_merge_cgraph_nodes_1, NULL);
699}
700
701/* Given the decl DECL, return the prevailing decl with the same name. */
702
703tree
704lto_symtab_prevailing_decl (tree decl)
705{
706  lto_symtab_entry_t ret;
707
708  /* Builtins and local symbols are their own prevailing decl.  */
709  if (!TREE_PUBLIC (decl) || is_builtin_fn (decl))
710    return decl;
711
712  /* DECL_ABSTRACTs are their own prevailng decl.  */
713  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_ABSTRACT (decl))
714    return decl;
715
716  /* Ensure DECL_ASSEMBLER_NAME will not set assembler name.  */
717  gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
718
719  /* Walk through the list of candidates and return the one we merged to.  */
720  ret = lto_symtab_get (DECL_ASSEMBLER_NAME (decl));
721  if (!ret)
722    return NULL_TREE;
723
724  return ret->decl;
725}
726
727#include "gt-lto-symtab.h"
728