OSDN Git Service

fortran/
[pf3gnuchains/gcc-fork.git] / gcc / lto-streamer-in.c
1 /* Read the GIMPLE representation from a file stream.
2
3    Copyright 2009, 2010 Free Software Foundation, Inc.
4    Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
5    Re-implemented by Diego Novillo <dnovillo@google.com>
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "toplev.h"
28 #include "tree.h"
29 #include "expr.h"
30 #include "flags.h"
31 #include "params.h"
32 #include "input.h"
33 #include "hashtab.h"
34 #include "basic-block.h"
35 #include "tree-flow.h"
36 #include "tree-pass.h"
37 #include "cgraph.h"
38 #include "function.h"
39 #include "ggc.h"
40 #include "diagnostic.h"
41 #include "libfuncs.h"
42 #include "except.h"
43 #include "debug.h"
44 #include "vec.h"
45 #include "timevar.h"
46 #include "output.h"
47 #include "ipa-utils.h"
48 #include "lto-streamer.h"
49 #include "tree-pass.h"
50
51 /* Data structure used to hash file names in the source_location field.  */
52 struct string_slot
53 {
54   const char *s;
55   unsigned int slot_num;
56 };
57
58 /* The table to hold the file names.  */
59 static htab_t file_name_hash_table;
60
61
62 /* Check that tag ACTUAL has one of the given values.  NUM_TAGS is the
63    number of valid tag values to check.  */
64
65 static void
66 lto_tag_check_set (enum LTO_tags actual, int ntags, ...)
67 {
68   va_list ap;
69   int i;
70
71   va_start (ap, ntags);
72   for (i = 0; i < ntags; i++)
73     if ((unsigned) actual == va_arg (ap, unsigned))
74       {
75         va_end (ap);
76         return;
77       }
78
79   va_end (ap);
80   internal_error ("bytecode stream: unexpected tag %s", lto_tag_name (actual));
81 }
82
83
84 /* Check that tag ACTUAL is in the range [TAG1, TAG2].  */
85
86 static void
87 lto_tag_check_range (enum LTO_tags actual, enum LTO_tags tag1,
88                      enum LTO_tags tag2)
89 {
90   if (actual < tag1 || actual > tag2)
91     internal_error ("bytecode stream: tag %s is not in the expected range "
92                     "[%s, %s]",
93                     lto_tag_name (actual),
94                     lto_tag_name (tag1),
95                     lto_tag_name (tag2));
96 }
97
98
99 /* Check that tag ACTUAL == EXPECTED.  */
100
101 static void
102 lto_tag_check (enum LTO_tags actual, enum LTO_tags expected)
103 {
104   if (actual != expected)
105     internal_error ("bytecode stream: expected tag %s instead of %s",
106                     lto_tag_name (expected), lto_tag_name (actual));
107 }
108
109
110 /* Return a hash code for P.  */
111
112 static hashval_t
113 hash_string_slot_node (const void *p)
114 {
115   const struct string_slot *ds = (const struct string_slot *) p;
116   return (hashval_t) htab_hash_string (ds->s);
117 }
118
119
120 /* Returns nonzero if P1 and P2 are equal.  */
121
122 static int
123 eq_string_slot_node (const void *p1, const void *p2)
124 {
125   const struct string_slot *ds1 = (const struct string_slot *) p1;
126   const struct string_slot *ds2 = (const struct string_slot *) p2;
127   return strcmp (ds1->s, ds2->s) == 0;
128 }
129
130
131 /* Read a string from the string table in DATA_IN using input block
132    IB.  Write the length to RLEN.  */
133
134 static const char *
135 input_string_internal (struct data_in *data_in, struct lto_input_block *ib,
136                        unsigned int *rlen)
137 {
138   struct lto_input_block str_tab;
139   unsigned int len;
140   unsigned int loc;
141   const char *result;
142
143   loc = lto_input_uleb128 (ib);
144   LTO_INIT_INPUT_BLOCK (str_tab, data_in->strings, loc, data_in->strings_len);
145   len = lto_input_uleb128 (&str_tab);
146   *rlen = len;
147
148   if (str_tab.p + len > data_in->strings_len)
149     internal_error ("bytecode stream: string too long for the string table");
150
151   result = (const char *)(data_in->strings + str_tab.p);
152
153   return result;
154 }
155
156
157 /* Read a STRING_CST from the string table in DATA_IN using input
158    block IB.  */
159
160 static tree
161 input_string_cst (struct data_in *data_in, struct lto_input_block *ib)
162 {
163   unsigned int len;
164   const char * ptr;
165   unsigned int is_null;
166
167   is_null = lto_input_uleb128 (ib);
168   if (is_null)
169     return NULL;
170
171   ptr = input_string_internal (data_in, ib, &len);
172   return build_string (len, ptr);
173 }
174
175
176 /* Read an IDENTIFIER from the string table in DATA_IN using input
177    block IB.  */
178
179 static tree
180 input_identifier (struct data_in *data_in, struct lto_input_block *ib)
181 {
182   unsigned int len;
183   const char *ptr;
184   unsigned int is_null;
185
186   is_null = lto_input_uleb128 (ib);
187   if (is_null)
188     return NULL;
189
190   ptr = input_string_internal (data_in, ib, &len);
191   return get_identifier_with_length (ptr, len);
192 }
193
194 /* Read a NULL terminated string from the string table in DATA_IN.  */
195
196 static const char *
197 input_string (struct data_in *data_in, struct lto_input_block *ib)
198 {
199   unsigned int len;
200   const char *ptr;
201   unsigned int is_null;
202
203   is_null = lto_input_uleb128 (ib);
204   if (is_null)
205     return NULL;
206
207   ptr = input_string_internal (data_in, ib, &len);
208   if (ptr[len - 1] != '\0')
209     internal_error ("bytecode stream: found non-null terminated string");
210
211   return ptr;
212 }
213
214
215 /* Return the next tag in the input block IB.  */
216
217 static enum LTO_tags
218 input_record_start (struct lto_input_block *ib)
219 {
220   enum LTO_tags tag = (enum LTO_tags) lto_input_uleb128 (ib);
221   return tag;
222 }
223
224
225 /* Lookup STRING in file_name_hash_table.  If found, return the existing
226    string, otherwise insert STRING as the canonical version.  */
227
228 static const char *
229 canon_file_name (const char *string)
230 {
231   void **slot;
232   struct string_slot s_slot;
233   s_slot.s = string;
234
235   slot = htab_find_slot (file_name_hash_table, &s_slot, INSERT);
236   if (*slot == NULL)
237     {
238       size_t len;
239       char *saved_string;
240       struct string_slot *new_slot;
241
242       len = strlen (string);
243       saved_string = (char *) xmalloc (len + 1);
244       new_slot = XCNEW (struct string_slot);
245       strcpy (saved_string, string);
246       new_slot->s = saved_string;
247       *slot = new_slot;
248       return saved_string;
249     }
250   else
251     {
252       struct string_slot *old_slot = (struct string_slot *) *slot;
253       return old_slot->s;
254     }
255 }
256
257
258 /* Clear the line info stored in DATA_IN.  */
259
260 static void
261 clear_line_info (struct data_in *data_in)
262 {
263   if (data_in->current_file)
264     linemap_add (line_table, LC_LEAVE, false, NULL, 0);
265   data_in->current_file = NULL;
266   data_in->current_line = 0;
267   data_in->current_col = 0;
268 }
269
270
271 /* Read a location from input block IB.  */
272
273 static location_t
274 lto_input_location (struct lto_input_block *ib, struct data_in *data_in)
275 {
276   expanded_location xloc;
277
278   xloc.file = input_string (data_in, ib);
279   if (xloc.file == NULL)
280     return UNKNOWN_LOCATION;
281
282   xloc.file = canon_file_name (xloc.file);
283   xloc.line = lto_input_sleb128 (ib);
284   xloc.column = lto_input_sleb128 (ib);
285   xloc.sysp = lto_input_sleb128 (ib);
286
287   if (data_in->current_file != xloc.file)
288     {
289       if (data_in->current_file)
290         linemap_add (line_table, LC_LEAVE, false, NULL, 0);
291
292       linemap_add (line_table, LC_ENTER, xloc.sysp, xloc.file, xloc.line);
293     }
294   else if (data_in->current_line != xloc.line)
295     linemap_line_start (line_table, xloc.line, xloc.column);
296
297   data_in->current_file = xloc.file;
298   data_in->current_line = xloc.line;
299   data_in->current_col = xloc.column;
300
301   return linemap_position_for_column (line_table, xloc.column);
302 }
303
304
305 /* Read a reference to a tree node from DATA_IN using input block IB.
306    TAG is the expected node that should be found in IB, if TAG belongs
307    to one of the indexable trees, expect to read a reference index to
308    be looked up in one of the symbol tables, otherwise read the pysical
309    representation of the tree using lto_input_tree.  FN is the
310    function scope for the read tree.  */
311
312 static tree
313 lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in,
314                     struct function *fn, enum LTO_tags tag)
315 {
316   unsigned HOST_WIDE_INT ix_u;
317   tree result = NULL_TREE;
318
319   lto_tag_check_range (tag, LTO_field_decl_ref, LTO_global_decl_ref);
320
321   switch (tag)
322     {
323     case LTO_type_ref:
324       ix_u = lto_input_uleb128 (ib);
325       result = lto_file_decl_data_get_type (data_in->file_data, ix_u);
326       break;
327
328     case LTO_ssa_name_ref:
329       ix_u = lto_input_uleb128 (ib);
330       result = VEC_index (tree, SSANAMES (fn), ix_u);
331       break;
332
333     case LTO_field_decl_ref:
334       ix_u = lto_input_uleb128 (ib);
335       result = lto_file_decl_data_get_field_decl (data_in->file_data, ix_u);
336       break;
337
338     case LTO_function_decl_ref:
339       ix_u = lto_input_uleb128 (ib);
340       result = lto_file_decl_data_get_fn_decl (data_in->file_data, ix_u);
341       break;
342
343     case LTO_type_decl_ref:
344       ix_u = lto_input_uleb128 (ib);
345       result = lto_file_decl_data_get_type_decl (data_in->file_data, ix_u);
346       break;
347
348     case LTO_namespace_decl_ref:
349       ix_u = lto_input_uleb128 (ib);
350       result = lto_file_decl_data_get_namespace_decl (data_in->file_data, ix_u);
351       break;
352
353     case LTO_global_decl_ref:
354     case LTO_result_decl_ref:
355     case LTO_const_decl_ref:
356     case LTO_imported_decl_ref:
357     case LTO_label_decl_ref:
358       ix_u = lto_input_uleb128 (ib);
359       result = lto_file_decl_data_get_var_decl (data_in->file_data, ix_u);
360       break;
361
362     default:
363       gcc_unreachable ();
364     }
365
366   gcc_assert (result);
367
368   return result;
369 }
370
371
372 /* Read and return a double-linked list of catch handlers from input
373    block IB, using descriptors in DATA_IN.  */
374
375 static struct eh_catch_d *
376 lto_input_eh_catch_list (struct lto_input_block *ib, struct data_in *data_in,
377                          eh_catch *last_p)
378 {
379   eh_catch first;
380   enum LTO_tags tag;
381
382   *last_p = first = NULL;
383   tag = input_record_start (ib);
384   while (tag)
385     {
386       tree list;
387       eh_catch n;
388
389       lto_tag_check_range (tag, LTO_eh_catch, LTO_eh_catch);
390
391       /* Read the catch node.  */
392       n = ggc_alloc_cleared_eh_catch_d ();
393       n->type_list = lto_input_tree (ib, data_in);
394       n->filter_list = lto_input_tree (ib, data_in);
395       n->label = lto_input_tree (ib, data_in);
396
397       /* Register all the types in N->FILTER_LIST.  */
398       for (list = n->filter_list; list; list = TREE_CHAIN (list))
399         add_type_for_runtime (TREE_VALUE (list));
400
401       /* Chain N to the end of the list.  */
402       if (*last_p)
403         (*last_p)->next_catch = n;
404       n->prev_catch = *last_p;
405       *last_p = n;
406
407       /* Set the head of the list the first time through the loop.  */
408       if (first == NULL)
409         first = n;
410
411       tag = input_record_start (ib);
412     }
413
414   return first;
415 }
416
417
418 /* Read and return EH region IX from input block IB, using descriptors
419    in DATA_IN.  */
420
421 static eh_region
422 input_eh_region (struct lto_input_block *ib, struct data_in *data_in, int ix)
423 {
424   enum LTO_tags tag;
425   eh_region r;
426
427   /* Read the region header.  */
428   tag = input_record_start (ib);
429   if (tag == LTO_null)
430     return NULL;
431
432   r = ggc_alloc_cleared_eh_region_d ();
433   r->index = lto_input_sleb128 (ib);
434
435   gcc_assert (r->index == ix);
436
437   /* Read all the region pointers as region numbers.  We'll fix up
438      the pointers once the whole array has been read.  */
439   r->outer = (eh_region) (intptr_t) lto_input_sleb128 (ib);
440   r->inner = (eh_region) (intptr_t) lto_input_sleb128 (ib);
441   r->next_peer = (eh_region) (intptr_t) lto_input_sleb128 (ib);
442
443   switch (tag)
444     {
445       case LTO_ert_cleanup:
446         r->type = ERT_CLEANUP;
447         break;
448
449       case LTO_ert_try:
450         {
451           struct eh_catch_d *last_catch;
452           r->type = ERT_TRY;
453           r->u.eh_try.first_catch = lto_input_eh_catch_list (ib, data_in,
454                                                              &last_catch);
455           r->u.eh_try.last_catch = last_catch;
456           break;
457         }
458
459       case LTO_ert_allowed_exceptions:
460         {
461           tree l;
462
463           r->type = ERT_ALLOWED_EXCEPTIONS;
464           r->u.allowed.type_list = lto_input_tree (ib, data_in);
465           r->u.allowed.label = lto_input_tree (ib, data_in);
466           r->u.allowed.filter = lto_input_uleb128 (ib);
467
468           for (l = r->u.allowed.type_list; l ; l = TREE_CHAIN (l))
469             add_type_for_runtime (TREE_VALUE (l));
470         }
471         break;
472
473       case LTO_ert_must_not_throw:
474         r->type = ERT_MUST_NOT_THROW;
475         r->u.must_not_throw.failure_decl = lto_input_tree (ib, data_in);
476         r->u.must_not_throw.failure_loc = lto_input_location (ib, data_in);
477         break;
478
479       default:
480         gcc_unreachable ();
481     }
482
483   r->landing_pads = (eh_landing_pad) (intptr_t) lto_input_sleb128 (ib);
484
485   return r;
486 }
487
488
489 /* Read and return EH landing pad IX from input block IB, using descriptors
490    in DATA_IN.  */
491
492 static eh_landing_pad
493 input_eh_lp (struct lto_input_block *ib, struct data_in *data_in, int ix)
494 {
495   enum LTO_tags tag;
496   eh_landing_pad lp;
497
498   /* Read the landing pad header.  */
499   tag = input_record_start (ib);
500   if (tag == LTO_null)
501     return NULL;
502
503   lto_tag_check_range (tag, LTO_eh_landing_pad, LTO_eh_landing_pad);
504
505   lp = ggc_alloc_cleared_eh_landing_pad_d ();
506   lp->index = lto_input_sleb128 (ib);
507   gcc_assert (lp->index == ix);
508   lp->next_lp = (eh_landing_pad) (intptr_t) lto_input_sleb128 (ib);
509   lp->region = (eh_region) (intptr_t) lto_input_sleb128 (ib);
510   lp->post_landing_pad = lto_input_tree (ib, data_in);
511
512   return lp;
513 }
514
515
516 /* After reading the EH regions, pointers to peer and children regions
517    are region numbers.  This converts all these region numbers into
518    real pointers into the rematerialized regions for FN.  ROOT_REGION
519    is the region number for the root EH region in FN.  */
520
521 static void
522 fixup_eh_region_pointers (struct function *fn, HOST_WIDE_INT root_region)
523 {
524   unsigned i;
525   VEC(eh_region,gc) *eh_array = fn->eh->region_array;
526   VEC(eh_landing_pad,gc) *lp_array = fn->eh->lp_array;
527   eh_region r;
528   eh_landing_pad lp;
529
530   gcc_assert (eh_array && lp_array);
531
532   gcc_assert (root_region >= 0);
533   fn->eh->region_tree = VEC_index (eh_region, eh_array, root_region);
534
535 #define FIXUP_EH_REGION(r) (r) = VEC_index (eh_region, eh_array, \
536                                             (HOST_WIDE_INT) (intptr_t) (r))
537 #define FIXUP_EH_LP(p) (p) = VEC_index (eh_landing_pad, lp_array, \
538                                         (HOST_WIDE_INT) (intptr_t) (p))
539
540   /* Convert all the index numbers stored in pointer fields into
541      pointers to the corresponding slots in the EH region array.  */
542   FOR_EACH_VEC_ELT (eh_region, eh_array, i, r)
543     {
544       /* The array may contain NULL regions.  */
545       if (r == NULL)
546         continue;
547
548       gcc_assert (i == (unsigned) r->index);
549       FIXUP_EH_REGION (r->outer);
550       FIXUP_EH_REGION (r->inner);
551       FIXUP_EH_REGION (r->next_peer);
552       FIXUP_EH_LP (r->landing_pads);
553     }
554
555   /* Convert all the index numbers stored in pointer fields into
556      pointers to the corresponding slots in the EH landing pad array.  */
557   FOR_EACH_VEC_ELT (eh_landing_pad, lp_array, i, lp)
558     {
559       /* The array may contain NULL landing pads.  */
560       if (lp == NULL)
561         continue;
562
563       gcc_assert (i == (unsigned) lp->index);
564       FIXUP_EH_LP (lp->next_lp);
565       FIXUP_EH_REGION (lp->region);
566     }
567
568 #undef FIXUP_EH_REGION
569 #undef FIXUP_EH_LP
570 }
571
572
573 /* Initialize EH support.  */
574
575 static void
576 lto_init_eh (void)
577 {
578   static bool eh_initialized_p = false;
579
580   if (eh_initialized_p)
581     return;
582
583   /* Contrary to most other FEs, we only initialize EH support when at
584      least one of the files in the set contains exception regions in
585      it.  Since this happens much later than the call to init_eh in
586      lang_dependent_init, we have to set flag_exceptions and call
587      init_eh again to initialize the EH tables.  */
588   flag_exceptions = 1;
589   init_eh ();
590
591   /* Initialize dwarf2 tables.  Since dwarf2out_do_frame() returns
592      true only when exceptions are enabled, this initialization is
593      never done during lang_dependent_init.  */
594 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
595   if (dwarf2out_do_frame ())
596     dwarf2out_frame_init ();
597 #endif
598
599   eh_initialized_p = true;
600 }
601
602
603 /* Read the exception table for FN from IB using the data descriptors
604    in DATA_IN.  */
605
606 static void
607 input_eh_regions (struct lto_input_block *ib, struct data_in *data_in,
608                   struct function *fn)
609 {
610   HOST_WIDE_INT i, root_region, len;
611   enum LTO_tags tag;
612
613   tag = input_record_start (ib);
614   if (tag == LTO_null)
615     return;
616
617   lto_tag_check_range (tag, LTO_eh_table, LTO_eh_table);
618
619   /* If the file contains EH regions, then it was compiled with
620      -fexceptions.  In that case, initialize the backend EH
621      machinery.  */
622   lto_init_eh ();
623
624   gcc_assert (fn->eh);
625
626   root_region = lto_input_sleb128 (ib);
627   gcc_assert (root_region == (int) root_region);
628
629   /* Read the EH region array.  */
630   len = lto_input_sleb128 (ib);
631   gcc_assert (len == (int) len);
632   if (len > 0)
633     {
634       VEC_safe_grow (eh_region, gc, fn->eh->region_array, len);
635       for (i = 0; i < len; i++)
636         {
637           eh_region r = input_eh_region (ib, data_in, i);
638           VEC_replace (eh_region, fn->eh->region_array, i, r);
639         }
640     }
641
642   /* Read the landing pads.  */
643   len = lto_input_sleb128 (ib);
644   gcc_assert (len == (int) len);
645   if (len > 0)
646     {
647       VEC_safe_grow (eh_landing_pad, gc, fn->eh->lp_array, len);
648       for (i = 0; i < len; i++)
649         {
650           eh_landing_pad lp = input_eh_lp (ib, data_in, i);
651           VEC_replace (eh_landing_pad, fn->eh->lp_array, i, lp);
652         }
653     }
654
655   /* Read the runtime type data.  */
656   len = lto_input_sleb128 (ib);
657   gcc_assert (len == (int) len);
658   if (len > 0)
659     {
660       VEC_safe_grow (tree, gc, fn->eh->ttype_data, len);
661       for (i = 0; i < len; i++)
662         {
663           tree ttype = lto_input_tree (ib, data_in);
664           VEC_replace (tree, fn->eh->ttype_data, i, ttype);
665         }
666     }
667
668   /* Read the table of action chains.  */
669   len = lto_input_sleb128 (ib);
670   gcc_assert (len == (int) len);
671   if (len > 0)
672     {
673       if (targetm.arm_eabi_unwinder)
674         {
675           VEC_safe_grow (tree, gc, fn->eh->ehspec_data.arm_eabi, len);
676           for (i = 0; i < len; i++)
677             {
678               tree t = lto_input_tree (ib, data_in);
679               VEC_replace (tree, fn->eh->ehspec_data.arm_eabi, i, t);
680             }
681         }
682       else
683         {
684           VEC_safe_grow (uchar, gc, fn->eh->ehspec_data.other, len);
685           for (i = 0; i < len; i++)
686             {
687               uchar c = lto_input_1_unsigned (ib);
688               VEC_replace (uchar, fn->eh->ehspec_data.other, i, c);
689             }
690         }
691     }
692
693   /* Reconstruct the EH region tree by fixing up the peer/children
694      pointers.  */
695   fixup_eh_region_pointers (fn, root_region);
696
697   tag = input_record_start (ib);
698   lto_tag_check_range (tag, LTO_null, LTO_null);
699 }
700
701
702 /* Make a new basic block with index INDEX in function FN.  */
703
704 static basic_block
705 make_new_block (struct function *fn, unsigned int index)
706 {
707   basic_block bb = alloc_block ();
708   bb->index = index;
709   SET_BASIC_BLOCK_FOR_FUNCTION (fn, index, bb);
710   bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
711   n_basic_blocks_for_function (fn)++;
712   bb->flags = 0;
713   set_bb_seq (bb, gimple_seq_alloc ());
714   return bb;
715 }
716
717
718 /* Read the CFG for function FN from input block IB.  */
719
720 static void
721 input_cfg (struct lto_input_block *ib, struct function *fn)
722 {
723   unsigned int bb_count;
724   basic_block p_bb;
725   unsigned int i;
726   int index;
727
728   init_empty_tree_cfg_for_function (fn);
729   init_ssa_operands ();
730
731   profile_status_for_function (fn) =
732     (enum profile_status_d) lto_input_uleb128 (ib);
733
734   bb_count = lto_input_uleb128 (ib);
735
736   last_basic_block_for_function (fn) = bb_count;
737   if (bb_count > VEC_length (basic_block, basic_block_info_for_function (fn)))
738     VEC_safe_grow_cleared (basic_block, gc,
739                            basic_block_info_for_function (fn), bb_count);
740
741   if (bb_count > VEC_length (basic_block, label_to_block_map_for_function (fn)))
742     VEC_safe_grow_cleared (basic_block, gc,
743                            label_to_block_map_for_function (fn), bb_count);
744
745   index = lto_input_sleb128 (ib);
746   while (index != -1)
747     {
748       basic_block bb = BASIC_BLOCK_FOR_FUNCTION (fn, index);
749       unsigned int edge_count;
750
751       if (bb == NULL)
752         bb = make_new_block (fn, index);
753
754       edge_count = lto_input_uleb128 (ib);
755
756       /* Connect up the CFG.  */
757       for (i = 0; i < edge_count; i++)
758         {
759           unsigned int dest_index;
760           unsigned int edge_flags;
761           basic_block dest;
762           int probability;
763           gcov_type count;
764           edge e;
765
766           dest_index = lto_input_uleb128 (ib);
767           probability = (int) lto_input_sleb128 (ib);
768           count = (gcov_type) lto_input_sleb128 (ib);
769           edge_flags = lto_input_uleb128 (ib);
770
771           dest = BASIC_BLOCK_FOR_FUNCTION (fn, dest_index);
772
773           if (dest == NULL)
774             dest = make_new_block (fn, dest_index);
775
776           e = make_edge (bb, dest, edge_flags);
777           e->probability = probability;
778           e->count = count;
779         }
780
781       index = lto_input_sleb128 (ib);
782     }
783
784   p_bb = ENTRY_BLOCK_PTR_FOR_FUNCTION(fn);
785   index = lto_input_sleb128 (ib);
786   while (index != -1)
787     {
788       basic_block bb = BASIC_BLOCK_FOR_FUNCTION (fn, index);
789       bb->prev_bb = p_bb;
790       p_bb->next_bb = bb;
791       p_bb = bb;
792       index = lto_input_sleb128 (ib);
793     }
794 }
795
796
797 /* Read a PHI function for basic block BB in function FN.  DATA_IN is
798    the file being read.  IB is the input block to use for reading.  */
799
800 static gimple
801 input_phi (struct lto_input_block *ib, basic_block bb, struct data_in *data_in,
802            struct function *fn)
803 {
804   unsigned HOST_WIDE_INT ix;
805   tree phi_result;
806   int i, len;
807   gimple result;
808
809   ix = lto_input_uleb128 (ib);
810   phi_result = VEC_index (tree, SSANAMES (fn), ix);
811   len = EDGE_COUNT (bb->preds);
812   result = create_phi_node (phi_result, bb);
813   SSA_NAME_DEF_STMT (phi_result) = result;
814
815   /* We have to go through a lookup process here because the preds in the
816      reconstructed graph are generally in a different order than they
817      were in the original program.  */
818   for (i = 0; i < len; i++)
819     {
820       tree def = lto_input_tree (ib, data_in);
821       int src_index = lto_input_uleb128 (ib);
822       location_t arg_loc = lto_input_location (ib, data_in);
823       basic_block sbb = BASIC_BLOCK_FOR_FUNCTION (fn, src_index);
824
825       edge e = NULL;
826       int j;
827
828       for (j = 0; j < len; j++)
829         if (EDGE_PRED (bb, j)->src == sbb)
830           {
831             e = EDGE_PRED (bb, j);
832             break;
833           }
834
835       add_phi_arg (result, def, e, arg_loc);
836     }
837
838   return result;
839 }
840
841
842 /* Read the SSA names array for function FN from DATA_IN using input
843    block IB.  */
844
845 static void
846 input_ssa_names (struct lto_input_block *ib, struct data_in *data_in,
847                  struct function *fn)
848 {
849   unsigned int i, size;
850
851   size = lto_input_uleb128 (ib);
852   init_ssanames (fn, size);
853
854   i = lto_input_uleb128 (ib);
855   while (i)
856     {
857       tree ssa_name, name;
858       bool is_default_def;
859
860       /* Skip over the elements that had been freed.  */
861       while (VEC_length (tree, SSANAMES (fn)) < i)
862         VEC_quick_push (tree, SSANAMES (fn), NULL_TREE);
863
864       is_default_def = (lto_input_1_unsigned (ib) != 0);
865       name = lto_input_tree (ib, data_in);
866       ssa_name = make_ssa_name_fn (fn, name, gimple_build_nop ());
867
868       if (is_default_def)
869         set_default_def (SSA_NAME_VAR (ssa_name), ssa_name);
870
871       i = lto_input_uleb128 (ib);
872     }
873 }
874
875 /* Read a statement with tag TAG in function FN from block IB using
876    descriptors in DATA_IN.  */
877
878 static gimple
879 input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in,
880                    struct function *fn, enum LTO_tags tag)
881 {
882   gimple stmt;
883   enum gimple_code code;
884   unsigned HOST_WIDE_INT num_ops;
885   size_t i;
886   struct bitpack_d bp;
887
888   code = lto_tag_to_gimple_code (tag);
889
890   /* Read the tuple header.  */
891   bp = lto_input_bitpack (ib);
892   num_ops = bp_unpack_value (&bp, sizeof (unsigned) * 8);
893   stmt = gimple_alloc (code, num_ops);
894   stmt->gsbase.no_warning = bp_unpack_value (&bp, 1);
895   if (is_gimple_assign (stmt))
896     stmt->gsbase.nontemporal_move = bp_unpack_value (&bp, 1);
897   stmt->gsbase.has_volatile_ops = bp_unpack_value (&bp, 1);
898   stmt->gsbase.subcode = bp_unpack_value (&bp, 16);
899
900   /* Read location information.  */
901   gimple_set_location (stmt, lto_input_location (ib, data_in));
902
903   /* Read lexical block reference.  */
904   gimple_set_block (stmt, lto_input_tree (ib, data_in));
905
906   /* Read in all the operands.  */
907   switch (code)
908     {
909     case GIMPLE_RESX:
910       gimple_resx_set_region (stmt, lto_input_sleb128 (ib));
911       break;
912
913     case GIMPLE_EH_MUST_NOT_THROW:
914       gimple_eh_must_not_throw_set_fndecl (stmt, lto_input_tree (ib, data_in));
915       break;
916
917     case GIMPLE_EH_DISPATCH:
918       gimple_eh_dispatch_set_region (stmt, lto_input_sleb128 (ib));
919       break;
920
921     case GIMPLE_ASM:
922       {
923         /* FIXME lto.  Move most of this into a new gimple_asm_set_string().  */
924         tree str;
925         stmt->gimple_asm.ni = lto_input_uleb128 (ib);
926         stmt->gimple_asm.no = lto_input_uleb128 (ib);
927         stmt->gimple_asm.nc = lto_input_uleb128 (ib);
928         stmt->gimple_asm.nl = lto_input_uleb128 (ib);
929         str = input_string_cst (data_in, ib);
930         stmt->gimple_asm.string = TREE_STRING_POINTER (str);
931       }
932       /* Fallthru  */
933
934     case GIMPLE_ASSIGN:
935     case GIMPLE_CALL:
936     case GIMPLE_RETURN:
937     case GIMPLE_SWITCH:
938     case GIMPLE_LABEL:
939     case GIMPLE_COND:
940     case GIMPLE_GOTO:
941     case GIMPLE_DEBUG:
942       for (i = 0; i < num_ops; i++)
943         {
944           tree op = lto_input_tree (ib, data_in);
945           gimple_set_op (stmt, i, op);
946           if (!op)
947             continue;
948
949           /* Fixup FIELD_DECLs in COMPONENT_REFs, they are not handled
950              by decl merging.  */
951           if (TREE_CODE (op) == ADDR_EXPR)
952             op = TREE_OPERAND (op, 0);
953           while (handled_component_p (op))
954             {
955               if (TREE_CODE (op) == COMPONENT_REF)
956                 {
957                   tree field, type, tem;
958                   field = TREE_OPERAND (op, 1);
959                   type = DECL_CONTEXT (field);
960                   for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
961                     {
962                       if (tem == field
963                           || (gimple_types_compatible_p (TREE_TYPE (tem),
964                                                          TREE_TYPE (field),
965                                                          GTC_DIAG)
966                               && DECL_NONADDRESSABLE_P (tem)
967                                  == DECL_NONADDRESSABLE_P (field)
968                               && gimple_compare_field_offset (tem, field)))
969                         break;
970                     }
971                   /* In case of type mismatches across units we can fail
972                      to unify some types and thus not find a proper
973                      field-decl here.  So only assert here if checking
974                      is enabled.  */
975 #ifdef ENABLE_CHECKING
976                   gcc_assert (tem != NULL_TREE);
977 #endif
978                   if (tem != NULL_TREE)
979                     TREE_OPERAND (op, 1) = tem;
980                 }
981
982               op = TREE_OPERAND (op, 0);
983             }
984         }
985       break;
986
987     case GIMPLE_NOP:
988     case GIMPLE_PREDICT:
989       break;
990
991     default:
992       internal_error ("bytecode stream: unknown GIMPLE statement tag %s",
993                       lto_tag_name (tag));
994     }
995
996   /* Update the properties of symbols, SSA names and labels associated
997      with STMT.  */
998   if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL)
999     {
1000       tree lhs = gimple_get_lhs (stmt);
1001       if (lhs && TREE_CODE (lhs) == SSA_NAME)
1002         SSA_NAME_DEF_STMT (lhs) = stmt;
1003     }
1004   else if (code == GIMPLE_LABEL)
1005     gcc_assert (emit_label_in_global_context_p (gimple_label_label (stmt))
1006                 || DECL_CONTEXT (gimple_label_label (stmt)) == fn->decl);
1007   else if (code == GIMPLE_ASM)
1008     {
1009       unsigned i;
1010
1011       for (i = 0; i < gimple_asm_noutputs (stmt); i++)
1012         {
1013           tree op = TREE_VALUE (gimple_asm_output_op (stmt, i));
1014           if (TREE_CODE (op) == SSA_NAME)
1015             SSA_NAME_DEF_STMT (op) = stmt;
1016         }
1017     }
1018
1019   /* Reset alias information.  */
1020   if (code == GIMPLE_CALL)
1021     gimple_call_reset_alias_info (stmt);
1022
1023   /* Mark the statement modified so its operand vectors can be filled in.  */
1024   gimple_set_modified (stmt, true);
1025
1026   return stmt;
1027 }
1028
1029
1030 /* Read a basic block with tag TAG from DATA_IN using input block IB.
1031    FN is the function being processed.  */
1032
1033 static void
1034 input_bb (struct lto_input_block *ib, enum LTO_tags tag,
1035           struct data_in *data_in, struct function *fn)
1036 {
1037   unsigned int index;
1038   basic_block bb;
1039   gimple_stmt_iterator bsi;
1040
1041   /* This routine assumes that CFUN is set to FN, as it needs to call
1042      basic GIMPLE routines that use CFUN.  */
1043   gcc_assert (cfun == fn);
1044
1045   index = lto_input_uleb128 (ib);
1046   bb = BASIC_BLOCK_FOR_FUNCTION (fn, index);
1047
1048   bb->count = lto_input_sleb128 (ib);
1049   bb->loop_depth = lto_input_sleb128 (ib);
1050   bb->frequency = lto_input_sleb128 (ib);
1051   bb->flags = lto_input_sleb128 (ib);
1052
1053   /* LTO_bb1 has statements.  LTO_bb0 does not.  */
1054   if (tag == LTO_bb0)
1055     return;
1056
1057   bsi = gsi_start_bb (bb);
1058   tag = input_record_start (ib);
1059   while (tag)
1060     {
1061       gimple stmt = input_gimple_stmt (ib, data_in, fn, tag);
1062
1063       find_referenced_vars_in (stmt);
1064       gsi_insert_after (&bsi, stmt, GSI_NEW_STMT);
1065
1066       /* After the statement, expect a 0 delimiter or the EH region
1067          that the previous statement belongs to.  */
1068       tag = input_record_start (ib);
1069       lto_tag_check_set (tag, 2, LTO_eh_region, LTO_null);
1070
1071       if (tag == LTO_eh_region)
1072         {
1073           HOST_WIDE_INT region = lto_input_sleb128 (ib);
1074           gcc_assert (region == (int) region);
1075           add_stmt_to_eh_lp (stmt, region);
1076         }
1077
1078       tag = input_record_start (ib);
1079     }
1080
1081   tag = input_record_start (ib);
1082   while (tag)
1083     {
1084       gimple phi = input_phi (ib, bb, data_in, fn);
1085       find_referenced_vars_in (phi);
1086       tag = input_record_start (ib);
1087     }
1088 }
1089
1090 /* Go through all NODE edges and fixup call_stmt pointers
1091    so they point to STMTS.  */
1092
1093 static void
1094 fixup_call_stmt_edges_1 (struct cgraph_node *node, gimple *stmts)
1095 {
1096   struct cgraph_edge *cedge;
1097   for (cedge = node->callees; cedge; cedge = cedge->next_callee)
1098     cedge->call_stmt = stmts[cedge->lto_stmt_uid];
1099   for (cedge = node->indirect_calls; cedge; cedge = cedge->next_callee)
1100     cedge->call_stmt = stmts[cedge->lto_stmt_uid];
1101 }
1102
1103 /* Fixup call_stmt pointers in NODE and all clones.  */
1104
1105 static void
1106 fixup_call_stmt_edges (struct cgraph_node *orig, gimple *stmts)
1107 {
1108   struct cgraph_node *node;
1109
1110   while (orig->clone_of)
1111     orig = orig->clone_of;
1112
1113   fixup_call_stmt_edges_1 (orig, stmts);
1114   if (orig->clones)
1115     for (node = orig->clones; node != orig;)
1116       {
1117         fixup_call_stmt_edges_1 (node, stmts);
1118         if (node->clones)
1119           node = node->clones;
1120         else if (node->next_sibling_clone)
1121           node = node->next_sibling_clone;
1122         else
1123           {
1124             while (node != orig && !node->next_sibling_clone)
1125               node = node->clone_of;
1126             if (node != orig)
1127               node = node->next_sibling_clone;
1128           }
1129       }
1130 }
1131
1132 /* Read the body of function FN_DECL from DATA_IN using input block IB.  */
1133
1134 static void
1135 input_function (tree fn_decl, struct data_in *data_in,
1136                 struct lto_input_block *ib)
1137 {
1138   struct function *fn;
1139   enum LTO_tags tag;
1140   gimple *stmts;
1141   basic_block bb;
1142   struct bitpack_d bp;
1143   struct cgraph_node *node;
1144   tree args, narg, oarg;
1145   int len;
1146
1147   fn = DECL_STRUCT_FUNCTION (fn_decl);
1148   tag = input_record_start (ib);
1149   clear_line_info (data_in);
1150
1151   gimple_register_cfg_hooks ();
1152   lto_tag_check (tag, LTO_function);
1153
1154   /* Read all the attributes for FN.  */
1155   bp = lto_input_bitpack (ib);
1156   fn->is_thunk = bp_unpack_value (&bp, 1);
1157   fn->has_local_explicit_reg_vars = bp_unpack_value (&bp, 1);
1158   fn->after_tree_profile = bp_unpack_value (&bp, 1);
1159   fn->returns_pcc_struct = bp_unpack_value (&bp, 1);
1160   fn->returns_struct = bp_unpack_value (&bp, 1);
1161   fn->can_throw_non_call_exceptions = bp_unpack_value (&bp, 1);
1162   fn->always_inline_functions_inlined = bp_unpack_value (&bp, 1);
1163   fn->after_inlining = bp_unpack_value (&bp, 1);
1164   fn->dont_save_pending_sizes_p = bp_unpack_value (&bp, 1);
1165   fn->stdarg = bp_unpack_value (&bp, 1);
1166   fn->has_nonlocal_label = bp_unpack_value (&bp, 1);
1167   fn->calls_alloca = bp_unpack_value (&bp, 1);
1168   fn->calls_setjmp = bp_unpack_value (&bp, 1);
1169   fn->va_list_fpr_size = bp_unpack_value (&bp, 8);
1170   fn->va_list_gpr_size = bp_unpack_value (&bp, 8);
1171
1172   /* Input the current IL state of the function.  */
1173   fn->curr_properties = lto_input_uleb128 (ib);
1174
1175   /* Read the static chain and non-local goto save area.  */
1176   fn->static_chain_decl = lto_input_tree (ib, data_in);
1177   fn->nonlocal_goto_save_area = lto_input_tree (ib, data_in);
1178
1179   /* Read all the local symbols.  */
1180   len = lto_input_sleb128 (ib);
1181   if (len > 0)
1182     {
1183       int i;
1184       VEC_safe_grow (tree, gc, fn->local_decls, len);
1185       for (i = 0; i < len; i++)
1186         {
1187           tree t = lto_input_tree (ib, data_in);
1188           VEC_replace (tree, fn->local_decls, i, t);
1189         }
1190     }
1191
1192   /* Read all function arguments.  We need to re-map them here to the
1193      arguments of the merged function declaration.  */
1194   args = lto_input_tree (ib, data_in);
1195   for (oarg = args, narg = DECL_ARGUMENTS (fn_decl);
1196        oarg && narg;
1197        oarg = TREE_CHAIN (oarg), narg = TREE_CHAIN (narg))
1198     {
1199       int ix;
1200       bool res;
1201       res = lto_streamer_cache_lookup (data_in->reader_cache, oarg, &ix);
1202       gcc_assert (res);
1203       /* Replace the argument in the streamer cache.  */
1204       lto_streamer_cache_insert_at (data_in->reader_cache, narg, ix);
1205     }
1206   gcc_assert (!oarg && !narg);
1207
1208   /* Read all the SSA names.  */
1209   input_ssa_names (ib, data_in, fn);
1210
1211   /* Read the exception handling regions in the function.  */
1212   input_eh_regions (ib, data_in, fn);
1213
1214   /* Read the tree of lexical scopes for the function.  */
1215   DECL_INITIAL (fn_decl) = lto_input_tree (ib, data_in);
1216   gcc_assert (DECL_INITIAL (fn_decl));
1217   DECL_SAVED_TREE (fn_decl) = NULL_TREE;
1218
1219   /* Read all the basic blocks.  */
1220   tag = input_record_start (ib);
1221   while (tag)
1222     {
1223       input_bb (ib, tag, data_in, fn);
1224       tag = input_record_start (ib);
1225     }
1226
1227   /* Fix up the call statements that are mentioned in the callgraph
1228      edges.  */
1229   renumber_gimple_stmt_uids ();
1230   stmts = (gimple *) xcalloc (gimple_stmt_max_uid (fn), sizeof (gimple));
1231   FOR_ALL_BB (bb)
1232     {
1233       gimple_stmt_iterator bsi = gsi_start_bb (bb);
1234       while (!gsi_end_p (bsi))
1235         {
1236           gimple stmt = gsi_stmt (bsi);
1237           /* If we're recompiling LTO objects with debug stmts but
1238              we're not supposed to have debug stmts, remove them now.
1239              We can't remove them earlier because this would cause uid
1240              mismatches in fixups, but we can do it at this point, as
1241              long as debug stmts don't require fixups.  */
1242           if (!MAY_HAVE_DEBUG_STMTS && is_gimple_debug (stmt))
1243             {
1244               gimple_stmt_iterator gsi = bsi;
1245               gsi_next (&bsi);
1246               gsi_remove (&gsi, true);
1247             }
1248           else
1249             {
1250               gsi_next (&bsi);
1251               stmts[gimple_uid (stmt)] = stmt;
1252             }
1253         }
1254     }
1255
1256   /* Set the gimple body to the statement sequence in the entry
1257      basic block.  FIXME lto, this is fairly hacky.  The existence
1258      of a gimple body is used by the cgraph routines, but we should
1259      really use the presence of the CFG.  */
1260   {
1261     edge_iterator ei = ei_start (ENTRY_BLOCK_PTR->succs);
1262     gimple_set_body (fn_decl, bb_seq (ei_edge (ei)->dest));
1263   }
1264
1265   node = cgraph_node (fn_decl);
1266   fixup_call_stmt_edges (node, stmts);
1267   execute_all_ipa_stmt_fixups (node, stmts);
1268
1269   update_ssa (TODO_update_ssa_only_virtuals);
1270   free_dominance_info (CDI_DOMINATORS);
1271   free_dominance_info (CDI_POST_DOMINATORS);
1272   free (stmts);
1273 }
1274
1275
1276 /* Read initializer expressions for public statics.  DATA_IN is the
1277    file being read.  IB is the input block used for reading.  */
1278
1279 static void
1280 input_alias_pairs (struct lto_input_block *ib, struct data_in *data_in)
1281 {
1282   tree var;
1283
1284   clear_line_info (data_in);
1285
1286   /* Skip over all the unreferenced globals.  */
1287   do
1288     var = lto_input_tree (ib, data_in);
1289   while (var);
1290
1291   var = lto_input_tree (ib, data_in);
1292   while (var)
1293     {
1294       const char *orig_name, *new_name;
1295       alias_pair *p;
1296
1297       p = VEC_safe_push (alias_pair, gc, alias_pairs, NULL);
1298       p->decl = var;
1299       p->target = lto_input_tree (ib, data_in);
1300
1301       /* If the target is a static object, we may have registered a
1302          new name for it to avoid clashes between statics coming from
1303          different files.  In that case, use the new name.  */
1304       orig_name = IDENTIFIER_POINTER (p->target);
1305       new_name = lto_get_decl_name_mapping (data_in->file_data, orig_name);
1306       if (strcmp (orig_name, new_name) != 0)
1307         p->target = get_identifier (new_name);
1308
1309       var = lto_input_tree (ib, data_in);
1310     }
1311 }
1312
1313
1314 /* Read the body from DATA for function FN_DECL and fill it in.
1315    FILE_DATA are the global decls and types.  SECTION_TYPE is either
1316    LTO_section_function_body or LTO_section_static_initializer.  If
1317    section type is LTO_section_function_body, FN must be the decl for
1318    that function.  */
1319
1320 static void
1321 lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl,
1322                const char *data, enum lto_section_type section_type)
1323 {
1324   const struct lto_function_header *header;
1325   struct data_in *data_in;
1326   int32_t cfg_offset;
1327   int32_t main_offset;
1328   int32_t string_offset;
1329   struct lto_input_block ib_cfg;
1330   struct lto_input_block ib_main;
1331
1332   header = (const struct lto_function_header *) data;
1333   cfg_offset = sizeof (struct lto_function_header);
1334   main_offset = cfg_offset + header->cfg_size;
1335   string_offset = main_offset + header->main_size;
1336
1337   LTO_INIT_INPUT_BLOCK (ib_cfg,
1338                         data + cfg_offset,
1339                         0,
1340                         header->cfg_size);
1341
1342   LTO_INIT_INPUT_BLOCK (ib_main,
1343                         data + main_offset,
1344                         0,
1345                         header->main_size);
1346
1347   data_in = lto_data_in_create (file_data, data + string_offset,
1348                                 header->string_size, NULL);
1349
1350   /* Make sure the file was generated by the exact same compiler.  */
1351   lto_check_version (header->lto_header.major_version,
1352                      header->lto_header.minor_version);
1353
1354   if (section_type == LTO_section_function_body)
1355     {
1356       struct function *fn = DECL_STRUCT_FUNCTION (fn_decl);
1357       struct lto_in_decl_state *decl_state;
1358
1359       push_cfun (fn);
1360       init_tree_ssa (fn);
1361
1362       /* Use the function's decl state. */
1363       decl_state = lto_get_function_in_decl_state (file_data, fn_decl);
1364       gcc_assert (decl_state);
1365       file_data->current_decl_state = decl_state;
1366
1367       input_cfg (&ib_cfg, fn);
1368
1369       /* Set up the struct function.  */
1370       input_function (fn_decl, data_in, &ib_main);
1371
1372       /* We should now be in SSA.  */
1373       cfun->gimple_df->in_ssa_p = true;
1374
1375       /* Restore decl state */
1376       file_data->current_decl_state = file_data->global_decl_state;
1377
1378       pop_cfun ();
1379     }
1380   else
1381     {
1382       input_alias_pairs (&ib_main, data_in);
1383     }
1384
1385   clear_line_info (data_in);
1386   lto_data_in_delete (data_in);
1387 }
1388
1389
1390 /* Read the body of FN_DECL using DATA.  FILE_DATA holds the global
1391    decls and types.  */
1392
1393 void
1394 lto_input_function_body (struct lto_file_decl_data *file_data,
1395                          tree fn_decl, const char *data)
1396 {
1397   current_function_decl = fn_decl;
1398   lto_read_body (file_data, fn_decl, data, LTO_section_function_body);
1399 }
1400
1401
1402 /* Read in VAR_DECL using DATA.  FILE_DATA holds the global decls and
1403    types.  */
1404
1405 void
1406 lto_input_constructors_and_inits (struct lto_file_decl_data *file_data,
1407                                   const char *data)
1408 {
1409   lto_read_body (file_data, NULL, data, LTO_section_static_initializer);
1410 }
1411
1412
1413 /* Return the resolution for the decl with index INDEX from DATA_IN. */
1414
1415 static enum ld_plugin_symbol_resolution
1416 get_resolution (struct data_in *data_in, unsigned index)
1417 {
1418   if (data_in->globals_resolution)
1419     {
1420       ld_plugin_symbol_resolution_t ret;
1421       /* We can have references to not emitted functions in
1422          DECL_FUNCTION_PERSONALITY at least.  So we can and have
1423          to indeed return LDPR_UNKNOWN in some cases.   */
1424       if (VEC_length (ld_plugin_symbol_resolution_t,
1425                       data_in->globals_resolution) <= index)
1426         return LDPR_UNKNOWN;
1427       ret = VEC_index (ld_plugin_symbol_resolution_t,
1428                        data_in->globals_resolution,
1429                        index);
1430       return ret;
1431     }
1432   else
1433     /* Delay resolution finding until decl merging.  */
1434     return LDPR_UNKNOWN;
1435 }
1436
1437
1438 /* Unpack all the non-pointer fields of the TS_BASE structure of
1439    expression EXPR from bitpack BP.  */
1440
1441 static void
1442 unpack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
1443 {
1444   /* Note that the code for EXPR has already been unpacked to create EXPR in
1445      lto_materialize_tree.  */
1446   if (!TYPE_P (expr))
1447     {
1448       TREE_SIDE_EFFECTS (expr) = (unsigned) bp_unpack_value (bp, 1);
1449       TREE_CONSTANT (expr) = (unsigned) bp_unpack_value (bp, 1);
1450       TREE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
1451
1452       /* TREE_PUBLIC is used on types to indicate that the type
1453          has a TYPE_CACHED_VALUES vector.  This is not streamed out,
1454          so we skip it here.  */
1455       TREE_PUBLIC (expr) = (unsigned) bp_unpack_value (bp, 1);
1456     }
1457   else
1458     bp_unpack_value (bp, 4);
1459   TREE_ADDRESSABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
1460   TREE_THIS_VOLATILE (expr) = (unsigned) bp_unpack_value (bp, 1);
1461   if (DECL_P (expr))
1462     DECL_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
1463   else if (TYPE_P (expr))
1464     TYPE_UNSIGNED (expr) = (unsigned) bp_unpack_value (bp, 1);
1465   else
1466     bp_unpack_value (bp, 1);
1467   TREE_ASM_WRITTEN (expr) = (unsigned) bp_unpack_value (bp, 1);
1468   TREE_NO_WARNING (expr) = (unsigned) bp_unpack_value (bp, 1);
1469   TREE_USED (expr) = (unsigned) bp_unpack_value (bp, 1);
1470   TREE_NOTHROW (expr) = (unsigned) bp_unpack_value (bp, 1);
1471   TREE_STATIC (expr) = (unsigned) bp_unpack_value (bp, 1);
1472   TREE_PRIVATE (expr) = (unsigned) bp_unpack_value (bp, 1);
1473   TREE_PROTECTED (expr) = (unsigned) bp_unpack_value (bp, 1);
1474   TREE_DEPRECATED (expr) = (unsigned) bp_unpack_value (bp, 1);
1475   if (TYPE_P (expr))
1476     TYPE_SATURATING (expr) = (unsigned) bp_unpack_value (bp, 1);
1477   else if (TREE_CODE (expr) == SSA_NAME)
1478     SSA_NAME_IS_DEFAULT_DEF (expr) = (unsigned) bp_unpack_value (bp, 1);
1479   else
1480     bp_unpack_value (bp, 1);
1481 }
1482
1483
1484 /* Unpack all the non-pointer fields of the TS_REAL_CST structure of
1485    expression EXPR from bitpack BP.  */
1486
1487 static void
1488 unpack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
1489 {
1490   unsigned i;
1491   REAL_VALUE_TYPE r;
1492   REAL_VALUE_TYPE *rp;
1493
1494   r.cl = (unsigned) bp_unpack_value (bp, 2);
1495   r.decimal = (unsigned) bp_unpack_value (bp, 1);
1496   r.sign = (unsigned) bp_unpack_value (bp, 1);
1497   r.signalling = (unsigned) bp_unpack_value (bp, 1);
1498   r.canonical = (unsigned) bp_unpack_value (bp, 1);
1499   r.uexp = (unsigned) bp_unpack_value (bp, EXP_BITS);
1500   for (i = 0; i < SIGSZ; i++)
1501     r.sig[i] = (unsigned long) bp_unpack_value (bp, HOST_BITS_PER_LONG);
1502
1503   rp = ggc_alloc_real_value ();
1504   memcpy (rp, &r, sizeof (REAL_VALUE_TYPE));
1505   TREE_REAL_CST_PTR (expr) = rp;
1506 }
1507
1508
1509 /* Unpack all the non-pointer fields of the TS_FIXED_CST structure of
1510    expression EXPR from bitpack BP.  */
1511
1512 static void
1513 unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
1514 {
1515   struct fixed_value fv;
1516
1517   fv.data.low = (HOST_WIDE_INT) bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);
1518   fv.data.high = (HOST_WIDE_INT) bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);
1519   fv.mode = (enum machine_mode) bp_unpack_value (bp, HOST_BITS_PER_INT);
1520   TREE_FIXED_CST (expr) = fv;
1521 }
1522
1523
1524 /* Unpack all the non-pointer fields of the TS_DECL_COMMON structure
1525    of expression EXPR from bitpack BP.  */
1526
1527 static void
1528 unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
1529 {
1530   DECL_MODE (expr) = (enum machine_mode) bp_unpack_value (bp, 8);
1531   DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
1532   DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1533   DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1534   DECL_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
1535   DECL_ARTIFICIAL (expr) = (unsigned) bp_unpack_value (bp, 1);
1536   DECL_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
1537   DECL_PRESERVE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1538   DECL_DEBUG_EXPR_IS_FROM (expr) = (unsigned) bp_unpack_value (bp, 1);
1539   DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
1540   DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1541   DECL_ALIGN (expr) = (unsigned) bp_unpack_value (bp, HOST_BITS_PER_INT);
1542
1543   if (TREE_CODE (expr) == LABEL_DECL)
1544     {
1545       DECL_ERROR_ISSUED (expr) = (unsigned) bp_unpack_value (bp, 1);
1546       EH_LANDING_PAD_NR (expr) = (int) bp_unpack_value (bp, HOST_BITS_PER_INT);
1547
1548       /* Always assume an initial value of -1 for LABEL_DECL_UID to
1549          force gimple_set_bb to recreate label_to_block_map.  */
1550       LABEL_DECL_UID (expr) = -1;
1551     }
1552
1553   if (TREE_CODE (expr) == FIELD_DECL)
1554     {
1555       unsigned HOST_WIDE_INT off_align;
1556       DECL_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
1557       DECL_NONADDRESSABLE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1558       off_align = (unsigned HOST_WIDE_INT) bp_unpack_value (bp, 8);
1559       SET_DECL_OFFSET_ALIGN (expr, off_align);
1560     }
1561
1562   if (TREE_CODE (expr) == RESULT_DECL
1563       || TREE_CODE (expr) == PARM_DECL
1564       || TREE_CODE (expr) == VAR_DECL)
1565     {
1566       DECL_BY_REFERENCE (expr) = (unsigned) bp_unpack_value (bp, 1);
1567       if (TREE_CODE (expr) == VAR_DECL
1568           || TREE_CODE (expr) == PARM_DECL)
1569         DECL_HAS_VALUE_EXPR_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1570       DECL_RESTRICTED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1571     }
1572 }
1573
1574
1575 /* Unpack all the non-pointer fields of the TS_DECL_WRTL structure
1576    of expression EXPR from bitpack BP.  */
1577
1578 static void
1579 unpack_ts_decl_wrtl_value_fields (struct bitpack_d *bp, tree expr)
1580 {
1581   DECL_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
1582 }
1583
1584
1585 /* Unpack all the non-pointer fields of the TS_DECL_WITH_VIS structure
1586    of expression EXPR from bitpack BP.  */
1587
1588 static void
1589 unpack_ts_decl_with_vis_value_fields (struct bitpack_d *bp, tree expr)
1590 {
1591   DECL_DEFER_OUTPUT (expr) = (unsigned) bp_unpack_value (bp, 1);
1592   DECL_COMMON (expr) = (unsigned) bp_unpack_value (bp, 1);
1593   DECL_DLLIMPORT_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1594   DECL_WEAK (expr) = (unsigned) bp_unpack_value (bp, 1);
1595   DECL_SEEN_IN_BIND_EXPR_P (expr) = (unsigned) bp_unpack_value (bp,  1);
1596   DECL_COMDAT (expr) = (unsigned) bp_unpack_value (bp,  1);
1597   DECL_VISIBILITY (expr) = (enum symbol_visibility) bp_unpack_value (bp,  2);
1598   DECL_VISIBILITY_SPECIFIED (expr) = (unsigned) bp_unpack_value (bp,  1);
1599
1600   if (TREE_CODE (expr) == VAR_DECL)
1601     {
1602       DECL_HARD_REGISTER (expr) = (unsigned) bp_unpack_value (bp, 1);
1603       DECL_IN_TEXT_SECTION (expr) = (unsigned) bp_unpack_value (bp, 1);
1604       DECL_IN_CONSTANT_POOL (expr) = (unsigned) bp_unpack_value (bp, 1);
1605       DECL_TLS_MODEL (expr) = (enum tls_model) bp_unpack_value (bp,  3);
1606     }
1607
1608   if (VAR_OR_FUNCTION_DECL_P (expr))
1609     {
1610       priority_type p;
1611       p = (priority_type) bp_unpack_value (bp, HOST_BITS_PER_SHORT);
1612       SET_DECL_INIT_PRIORITY (expr, p);
1613     }
1614 }
1615
1616
1617 /* Unpack all the non-pointer fields of the TS_FUNCTION_DECL structure
1618    of expression EXPR from bitpack BP.  */
1619
1620 static void
1621 unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
1622 {
1623   DECL_FUNCTION_CODE (expr) = (enum built_in_function) bp_unpack_value (bp, 11);
1624   DECL_BUILT_IN_CLASS (expr) = (enum built_in_class) bp_unpack_value (bp, 2);
1625   DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
1626   DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
1627   DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
1628   DECL_POSSIBLY_INLINED (expr) = (unsigned) bp_unpack_value (bp, 1);
1629   DECL_IS_NOVOPS (expr) = (unsigned) bp_unpack_value (bp, 1);
1630   DECL_IS_RETURNS_TWICE (expr) = (unsigned) bp_unpack_value (bp, 1);
1631   DECL_IS_MALLOC (expr) = (unsigned) bp_unpack_value (bp, 1);
1632   DECL_IS_OPERATOR_NEW (expr) = (unsigned) bp_unpack_value (bp, 1);
1633   DECL_DECLARED_INLINE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1634   DECL_STATIC_CHAIN (expr) = (unsigned) bp_unpack_value (bp, 1);
1635   DECL_NO_INLINE_WARNING_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1636   DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (expr)
1637                         = (unsigned) bp_unpack_value (bp, 1);
1638   DECL_NO_LIMIT_STACK (expr) = (unsigned) bp_unpack_value (bp, 1);
1639   DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
1640   DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1641   DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
1642 }
1643
1644
1645 /* Unpack all the non-pointer fields of the TS_TYPE structure
1646    of expression EXPR from bitpack BP.  */
1647
1648 static void
1649 unpack_ts_type_value_fields (struct bitpack_d *bp, tree expr)
1650 {
1651   enum machine_mode mode;
1652
1653   TYPE_PRECISION (expr) = (unsigned) bp_unpack_value (bp, 10);
1654   mode = (enum machine_mode) bp_unpack_value (bp, 8);
1655   SET_TYPE_MODE (expr, mode);
1656   TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
1657   TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
1658   TYPE_NEEDS_CONSTRUCTING (expr) = (unsigned) bp_unpack_value (bp, 1);
1659   if (RECORD_OR_UNION_TYPE_P (expr))
1660     TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1);
1661   TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
1662   TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
1663   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr)
1664         = (unsigned) bp_unpack_value (bp, 2);
1665   TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
1666   TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
1667   TYPE_ALIGN (expr) = (unsigned) bp_unpack_value (bp, HOST_BITS_PER_INT);
1668   TYPE_ALIAS_SET (expr) = bp_unpack_value (bp, HOST_BITS_PER_INT);
1669 }
1670
1671
1672 /* Unpack all the non-pointer fields of the TS_BLOCK structure
1673    of expression EXPR from bitpack BP.  */
1674
1675 static void
1676 unpack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
1677 {
1678   BLOCK_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
1679   BLOCK_NUMBER (expr) = (unsigned) bp_unpack_value (bp, 31);
1680 }
1681
1682
1683 /* Unpack all the non-pointer fields in EXPR into a bit pack.  */
1684
1685 static void
1686 unpack_value_fields (struct bitpack_d *bp, tree expr)
1687 {
1688   enum tree_code code;
1689
1690   code = TREE_CODE (expr);
1691
1692   /* Note that all these functions are highly sensitive to changes in
1693      the types and sizes of each of the fields being packed.  */
1694   unpack_ts_base_value_fields (bp, expr);
1695
1696   if (CODE_CONTAINS_STRUCT (code, TS_REAL_CST))
1697     unpack_ts_real_cst_value_fields (bp, expr);
1698
1699   if (CODE_CONTAINS_STRUCT (code, TS_FIXED_CST))
1700     unpack_ts_fixed_cst_value_fields (bp, expr);
1701
1702   if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1703     unpack_ts_decl_common_value_fields (bp, expr);
1704
1705   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WRTL))
1706     unpack_ts_decl_wrtl_value_fields (bp, expr);
1707
1708   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
1709     unpack_ts_decl_with_vis_value_fields (bp, expr);
1710
1711   if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
1712     unpack_ts_function_decl_value_fields (bp, expr);
1713
1714   if (CODE_CONTAINS_STRUCT (code, TS_TYPE))
1715     unpack_ts_type_value_fields (bp, expr);
1716
1717   if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
1718     unpack_ts_block_value_fields (bp, expr);
1719
1720   if (CODE_CONTAINS_STRUCT (code, TS_SSA_NAME))
1721     {
1722       /* We only stream the version number of SSA names.  */
1723       gcc_unreachable ();
1724     }
1725
1726   if (CODE_CONTAINS_STRUCT (code, TS_STATEMENT_LIST))
1727     {
1728       /* This is only used by GENERIC.  */
1729       gcc_unreachable ();
1730     }
1731
1732   if (CODE_CONTAINS_STRUCT (code, TS_OMP_CLAUSE))
1733     {
1734       /* This is only used by High GIMPLE.  */
1735       gcc_unreachable ();
1736     }
1737 }
1738
1739
1740 /* Materialize a new tree from input block IB using descriptors in
1741    DATA_IN.  The code for the new tree should match TAG.  Store in
1742    *IX_P the index into the reader cache where the new tree is stored.  */
1743
1744 static tree
1745 lto_materialize_tree (struct lto_input_block *ib, struct data_in *data_in,
1746                       enum LTO_tags tag, int *ix_p)
1747 {
1748   struct bitpack_d bp;
1749   enum tree_code code;
1750   tree result;
1751 #ifdef LTO_STREAMER_DEBUG
1752   HOST_WIDEST_INT orig_address_in_writer;
1753 #endif
1754   HOST_WIDE_INT ix;
1755
1756   result = NULL_TREE;
1757
1758   /* Read the header of the node we are about to create.  */
1759   ix = lto_input_sleb128 (ib);
1760   gcc_assert ((int) ix == ix);
1761   *ix_p = (int) ix;
1762
1763 #ifdef LTO_STREAMER_DEBUG
1764   /* Read the word representing the memory address for the tree
1765      as it was written by the writer.  This is useful when
1766      debugging differences between the writer and reader.  */
1767   orig_address_in_writer = lto_input_sleb128 (ib);
1768   gcc_assert ((intptr_t) orig_address_in_writer == orig_address_in_writer);
1769 #endif
1770
1771   code = lto_tag_to_tree_code (tag);
1772
1773   /* We should never see an SSA_NAME tree.  Only the version numbers of
1774      SSA names are ever written out.  See input_ssa_names.  */
1775   gcc_assert (code != SSA_NAME);
1776
1777   /* Instantiate a new tree using the header data.  */
1778   if (CODE_CONTAINS_STRUCT (code, TS_STRING))
1779     result = input_string_cst (data_in, ib);
1780   else if (CODE_CONTAINS_STRUCT (code, TS_IDENTIFIER))
1781     result = input_identifier (data_in, ib);
1782   else if (CODE_CONTAINS_STRUCT (code, TS_VEC))
1783     {
1784       HOST_WIDE_INT len = lto_input_sleb128 (ib);
1785       result = make_tree_vec (len);
1786     }
1787   else if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
1788     {
1789       unsigned HOST_WIDE_INT len = lto_input_uleb128 (ib);
1790       result = make_tree_binfo (len);
1791     }
1792   else
1793     {
1794       /* All other nodes can be materialized with a raw make_node
1795          call.  */
1796       result = make_node (code);
1797     }
1798
1799 #ifdef LTO_STREAMER_DEBUG
1800   /* Store the original address of the tree as seen by the writer
1801      in RESULT's aux field.  This is useful when debugging streaming
1802      problems.  This way, a debugging session can be started on
1803      both writer and reader with a breakpoint using this address
1804      value in both.  */
1805   lto_orig_address_map (result, (intptr_t) orig_address_in_writer);
1806 #endif
1807
1808   /* Read the bitpack of non-pointer values from IB.  */
1809   bp = lto_input_bitpack (ib);
1810
1811   /* The first word in BP contains the code of the tree that we
1812      are about to read.  */
1813   code = (enum tree_code) bp_unpack_value (&bp, 16);
1814   lto_tag_check (lto_tree_code_to_tag (code), tag);
1815
1816   /* Unpack all the value fields from BP.  */
1817   unpack_value_fields (&bp, result);
1818
1819   /* Enter RESULT in the reader cache.  This will make RESULT
1820      available so that circular references in the rest of the tree
1821      structure can be resolved in subsequent calls to lto_input_tree.  */
1822   lto_streamer_cache_insert_at (data_in->reader_cache, result, ix);
1823
1824   return result;
1825 }
1826
1827
1828 /* Read a chain of tree nodes from input block IB. DATA_IN contains
1829    tables and descriptors for the file being read.  */
1830
1831 static tree
1832 lto_input_chain (struct lto_input_block *ib, struct data_in *data_in)
1833 {
1834   int i, count;
1835   tree first, prev, curr;
1836
1837   first = prev = NULL_TREE;
1838   count = lto_input_sleb128 (ib);
1839   for (i = 0; i < count; i++)
1840     {
1841       curr = lto_input_tree (ib, data_in);
1842       if (prev)
1843         TREE_CHAIN (prev) = curr;
1844       else
1845         first = curr;
1846
1847       TREE_CHAIN (curr) = NULL_TREE;
1848       prev = curr;
1849     }
1850
1851   return first;
1852 }
1853
1854
1855 /* Read all pointer fields in the TS_COMMON structure of EXPR from input
1856    block IB.  DATA_IN contains tables and descriptors for the
1857    file being read.  */
1858
1859
1860 static void
1861 lto_input_ts_common_tree_pointers (struct lto_input_block *ib,
1862                                    struct data_in *data_in, tree expr)
1863 {
1864   TREE_TYPE (expr) = lto_input_tree (ib, data_in);
1865 }
1866
1867
1868 /* Read all pointer fields in the TS_VECTOR structure of EXPR from input
1869    block IB.  DATA_IN contains tables and descriptors for the
1870    file being read.  */
1871
1872 static void
1873 lto_input_ts_vector_tree_pointers (struct lto_input_block *ib,
1874                                    struct data_in *data_in, tree expr)
1875 {
1876   TREE_VECTOR_CST_ELTS (expr) = lto_input_chain (ib, data_in);
1877 }
1878
1879
1880 /* Read all pointer fields in the TS_COMPLEX structure of EXPR from input
1881    block IB.  DATA_IN contains tables and descriptors for the
1882    file being read.  */
1883
1884 static void
1885 lto_input_ts_complex_tree_pointers (struct lto_input_block *ib,
1886                                     struct data_in *data_in, tree expr)
1887 {
1888   TREE_REALPART (expr) = lto_input_tree (ib, data_in);
1889   TREE_IMAGPART (expr) = lto_input_tree (ib, data_in);
1890 }
1891
1892
1893 /* Read all pointer fields in the TS_DECL_MINIMAL structure of EXPR
1894    from input block IB.  DATA_IN contains tables and descriptors for the
1895    file being read.  */
1896
1897 static void
1898 lto_input_ts_decl_minimal_tree_pointers (struct lto_input_block *ib,
1899                                          struct data_in *data_in, tree expr)
1900 {
1901   DECL_NAME (expr) = lto_input_tree (ib, data_in);
1902   DECL_CONTEXT (expr) = lto_input_tree (ib, data_in);
1903   DECL_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in);
1904 }
1905
1906
1907 /* Read all pointer fields in the TS_DECL_COMMON structure of EXPR from
1908    input block IB.  DATA_IN contains tables and descriptors for the
1909    file being read.  */
1910
1911 static void
1912 lto_input_ts_decl_common_tree_pointers (struct lto_input_block *ib,
1913                                         struct data_in *data_in, tree expr)
1914 {
1915   DECL_SIZE (expr) = lto_input_tree (ib, data_in);
1916   DECL_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
1917
1918   if (TREE_CODE (expr) != FUNCTION_DECL)
1919     DECL_INITIAL (expr) = lto_input_tree (ib, data_in);
1920
1921   DECL_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
1922   DECL_ABSTRACT_ORIGIN (expr) = lto_input_tree (ib, data_in);
1923
1924   if (TREE_CODE (expr) == PARM_DECL)
1925     TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
1926
1927   if ((TREE_CODE (expr) == VAR_DECL
1928        || TREE_CODE (expr) == PARM_DECL)
1929       && DECL_HAS_VALUE_EXPR_P (expr))
1930     SET_DECL_VALUE_EXPR (expr, lto_input_tree (ib, data_in));
1931 }
1932
1933
1934 /* Read all pointer fields in the TS_DECL_NON_COMMON structure of
1935    EXPR from input block IB.  DATA_IN contains tables and descriptors for the
1936    file being read.  */
1937
1938 static void
1939 lto_input_ts_decl_non_common_tree_pointers (struct lto_input_block *ib,
1940                                             struct data_in *data_in, tree expr)
1941 {
1942   if (TREE_CODE (expr) == FUNCTION_DECL)
1943     {
1944       DECL_ARGUMENTS (expr) = lto_input_tree (ib, data_in);
1945       DECL_RESULT (expr) = lto_input_tree (ib, data_in);
1946     }
1947   DECL_VINDEX (expr) = lto_input_tree (ib, data_in);
1948 }
1949
1950
1951 /* Read all pointer fields in the TS_DECL_WITH_VIS structure of EXPR
1952    from input block IB.  DATA_IN contains tables and descriptors for the
1953    file being read.  */
1954
1955 static void
1956 lto_input_ts_decl_with_vis_tree_pointers (struct lto_input_block *ib,
1957                                           struct data_in *data_in, tree expr)
1958 {
1959   tree id;
1960
1961   id = lto_input_tree (ib, data_in);
1962   if (id)
1963     {
1964       gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
1965       SET_DECL_ASSEMBLER_NAME (expr, id);
1966     }
1967
1968   DECL_SECTION_NAME (expr) = lto_input_tree (ib, data_in);
1969   DECL_COMDAT_GROUP (expr) = lto_input_tree (ib, data_in);
1970 }
1971
1972
1973 /* Read all pointer fields in the TS_FIELD_DECL structure of EXPR from
1974    input block IB.  DATA_IN contains tables and descriptors for the
1975    file being read.  */
1976
1977 static void
1978 lto_input_ts_field_decl_tree_pointers (struct lto_input_block *ib,
1979                                        struct data_in *data_in, tree expr)
1980 {
1981   DECL_FIELD_OFFSET (expr) = lto_input_tree (ib, data_in);
1982   DECL_BIT_FIELD_TYPE (expr) = lto_input_tree (ib, data_in);
1983   DECL_QUALIFIER (expr) = lto_input_tree (ib, data_in);
1984   DECL_FIELD_BIT_OFFSET (expr) = lto_input_tree (ib, data_in);
1985   DECL_FCONTEXT (expr) = lto_input_tree (ib, data_in);
1986   TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
1987 }
1988
1989
1990 /* Read all pointer fields in the TS_FUNCTION_DECL structure of EXPR
1991    from input block IB.  DATA_IN contains tables and descriptors for the
1992    file being read.  */
1993
1994 static void
1995 lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
1996                                           struct data_in *data_in, tree expr)
1997 {
1998   /* DECL_STRUCT_FUNCTION is handled by lto_input_function.  FIXME lto,
1999      maybe it should be handled here?  */
2000   DECL_FUNCTION_PERSONALITY (expr) = lto_input_tree (ib, data_in);
2001   DECL_FUNCTION_SPECIFIC_TARGET (expr) = lto_input_tree (ib, data_in);
2002   DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = lto_input_tree (ib, data_in);
2003
2004   /* If the file contains a function with an EH personality set,
2005      then it was compiled with -fexceptions.  In that case, initialize
2006      the backend EH machinery.  */
2007   if (DECL_FUNCTION_PERSONALITY (expr))
2008     lto_init_eh ();
2009 }
2010
2011
2012 /* Read all pointer fields in the TS_TYPE structure of EXPR from input
2013    block IB.  DATA_IN contains tables and descriptors for the
2014    file being read.  */
2015
2016 static void
2017 lto_input_ts_type_tree_pointers (struct lto_input_block *ib,
2018                                  struct data_in *data_in, tree expr)
2019 {
2020   if (TREE_CODE (expr) == ENUMERAL_TYPE)
2021     TYPE_VALUES (expr) = lto_input_tree (ib, data_in);
2022   else if (TREE_CODE (expr) == ARRAY_TYPE)
2023     TYPE_DOMAIN (expr) = lto_input_tree (ib, data_in);
2024   else if (RECORD_OR_UNION_TYPE_P (expr))
2025     TYPE_FIELDS (expr) = lto_input_tree (ib, data_in);
2026   else if (TREE_CODE (expr) == FUNCTION_TYPE
2027            || TREE_CODE (expr) == METHOD_TYPE)
2028     TYPE_ARG_TYPES (expr) = lto_input_tree (ib, data_in);
2029   else if (TREE_CODE (expr) == VECTOR_TYPE)
2030     TYPE_DEBUG_REPRESENTATION_TYPE (expr) = lto_input_tree (ib, data_in);
2031
2032   TYPE_SIZE (expr) = lto_input_tree (ib, data_in);
2033   TYPE_SIZE_UNIT (expr) = lto_input_tree (ib, data_in);
2034   TYPE_ATTRIBUTES (expr) = lto_input_tree (ib, data_in);
2035   TYPE_NAME (expr) = lto_input_tree (ib, data_in);
2036   /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO nor
2037      TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO.  */
2038   if (!POINTER_TYPE_P (expr))
2039     TYPE_MINVAL (expr) = lto_input_tree (ib, data_in);
2040   TYPE_MAXVAL (expr) = lto_input_tree (ib, data_in);
2041   TYPE_MAIN_VARIANT (expr) = lto_input_tree (ib, data_in);
2042   /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
2043      during fixup.  */
2044   if (RECORD_OR_UNION_TYPE_P (expr))
2045     TYPE_BINFO (expr) = lto_input_tree (ib, data_in);
2046   TYPE_CONTEXT (expr) = lto_input_tree (ib, data_in);
2047   /* TYPE_CANONICAL gets re-computed during type merging.  */
2048   TYPE_CANONICAL (expr) = NULL_TREE;
2049   TYPE_STUB_DECL (expr) = lto_input_tree (ib, data_in);
2050 }
2051
2052
2053 /* Read all pointer fields in the TS_LIST structure of EXPR from input
2054    block IB.  DATA_IN contains tables and descriptors for the
2055    file being read.  */
2056
2057 static void
2058 lto_input_ts_list_tree_pointers (struct lto_input_block *ib,
2059                                  struct data_in *data_in, tree expr)
2060 {
2061   TREE_PURPOSE (expr) = lto_input_tree (ib, data_in);
2062   TREE_VALUE (expr) = lto_input_tree (ib, data_in);
2063   TREE_CHAIN (expr) = lto_input_chain (ib, data_in);
2064 }
2065
2066
2067 /* Read all pointer fields in the TS_VEC structure of EXPR from input
2068    block IB.  DATA_IN contains tables and descriptors for the
2069    file being read.  */
2070
2071 static void
2072 lto_input_ts_vec_tree_pointers (struct lto_input_block *ib,
2073                                 struct data_in *data_in, tree expr)
2074 {
2075   int i;
2076
2077   /* Note that TREE_VEC_LENGTH was read by lto_materialize_tree to
2078      instantiate EXPR.  */
2079   for (i = 0; i < TREE_VEC_LENGTH (expr); i++)
2080     TREE_VEC_ELT (expr, i) = lto_input_tree (ib, data_in);
2081 }
2082
2083
2084 /* Read all pointer fields in the TS_EXP structure of EXPR from input
2085    block IB.  DATA_IN contains tables and descriptors for the
2086    file being read.  */
2087
2088
2089 static void
2090 lto_input_ts_exp_tree_pointers (struct lto_input_block *ib,
2091                                 struct data_in *data_in, tree expr)
2092 {
2093   int i, length;
2094   location_t loc;
2095
2096   length = lto_input_sleb128 (ib);
2097   gcc_assert (length == TREE_OPERAND_LENGTH (expr));
2098
2099   for (i = 0; i < length; i++)
2100     TREE_OPERAND (expr, i) = lto_input_tree (ib, data_in);
2101
2102   loc = lto_input_location (ib, data_in);
2103   SET_EXPR_LOCATION (expr, loc);
2104   TREE_BLOCK (expr) = lto_input_tree (ib, data_in);
2105 }
2106
2107
2108 /* Read all pointer fields in the TS_BLOCK structure of EXPR from input
2109    block IB.  DATA_IN contains tables and descriptors for the
2110    file being read.  */
2111
2112 static void
2113 lto_input_ts_block_tree_pointers (struct lto_input_block *ib,
2114                                   struct data_in *data_in, tree expr)
2115 {
2116   unsigned i, len;
2117
2118   BLOCK_SOURCE_LOCATION (expr) = lto_input_location (ib, data_in);
2119   BLOCK_VARS (expr) = lto_input_chain (ib, data_in);
2120
2121   len = lto_input_uleb128 (ib);
2122   for (i = 0; i < len; i++)
2123     {
2124       tree t = lto_input_tree (ib, data_in);
2125       VEC_safe_push (tree, gc, BLOCK_NONLOCALIZED_VARS (expr), t);
2126     }
2127
2128   BLOCK_SUPERCONTEXT (expr) = lto_input_tree (ib, data_in);
2129   BLOCK_ABSTRACT_ORIGIN (expr) = lto_input_tree (ib, data_in);
2130   BLOCK_FRAGMENT_ORIGIN (expr) = lto_input_tree (ib, data_in);
2131   BLOCK_FRAGMENT_CHAIN (expr) = lto_input_tree (ib, data_in);
2132   BLOCK_SUBBLOCKS (expr) = lto_input_chain (ib, data_in);
2133 }
2134
2135
2136 /* Read all pointer fields in the TS_BINFO structure of EXPR from input
2137    block IB.  DATA_IN contains tables and descriptors for the
2138    file being read.  */
2139
2140 static void
2141 lto_input_ts_binfo_tree_pointers (struct lto_input_block *ib,
2142                                   struct data_in *data_in, tree expr)
2143 {
2144   unsigned i, len;
2145   tree t;
2146
2147   /* Note that the number of slots in EXPR was read in
2148      lto_materialize_tree when instantiating EXPR.  However, the
2149      vector is empty so we cannot rely on VEC_length to know how many
2150      elements to read.  So, this list is emitted as a 0-terminated
2151      list on the writer side.  */
2152   do
2153     {
2154       t = lto_input_tree (ib, data_in);
2155       if (t)
2156         VEC_quick_push (tree, BINFO_BASE_BINFOS (expr), t);
2157     }
2158   while (t);
2159
2160   BINFO_OFFSET (expr) = lto_input_tree (ib, data_in);
2161   BINFO_VTABLE (expr) = lto_input_tree (ib, data_in);
2162   BINFO_VIRTUALS (expr) = lto_input_tree (ib, data_in);
2163   BINFO_VPTR_FIELD (expr) = lto_input_tree (ib, data_in);
2164
2165   len = lto_input_uleb128 (ib);
2166   for (i = 0; i < len; i++)
2167     {
2168       tree a = lto_input_tree (ib, data_in);
2169       VEC_safe_push (tree, gc, BINFO_BASE_ACCESSES (expr), a);
2170     }
2171
2172   BINFO_INHERITANCE_CHAIN (expr) = lto_input_tree (ib, data_in);
2173   BINFO_SUBVTT_INDEX (expr) = lto_input_tree (ib, data_in);
2174   BINFO_VPTR_INDEX (expr) = lto_input_tree (ib, data_in);
2175 }
2176
2177
2178 /* Read all pointer fields in the TS_CONSTRUCTOR structure of EXPR from
2179    input block IB.  DATA_IN contains tables and descriptors for the
2180    file being read.  */
2181
2182 static void
2183 lto_input_ts_constructor_tree_pointers (struct lto_input_block *ib,
2184                                         struct data_in *data_in, tree expr)
2185 {
2186   unsigned i, len;
2187
2188   len = lto_input_uleb128 (ib);
2189   for (i = 0; i < len; i++)
2190     {
2191       tree index, value;
2192
2193       index = lto_input_tree (ib, data_in);
2194       value = lto_input_tree (ib, data_in);
2195       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (expr), index, value);
2196     }
2197 }
2198
2199
2200 /* Helper for lto_input_tree.  Read all pointer fields in EXPR from
2201    input block IB.  DATA_IN contains tables and descriptors for the
2202    file being read.  */
2203
2204 static void
2205 lto_input_tree_pointers (struct lto_input_block *ib, struct data_in *data_in,
2206                          tree expr)
2207 {
2208   enum tree_code code;
2209
2210   code = TREE_CODE (expr);
2211
2212   if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
2213     lto_input_ts_common_tree_pointers (ib, data_in, expr);
2214
2215   if (CODE_CONTAINS_STRUCT (code, TS_VECTOR))
2216     lto_input_ts_vector_tree_pointers (ib, data_in, expr);
2217
2218   if (CODE_CONTAINS_STRUCT (code, TS_COMPLEX))
2219     lto_input_ts_complex_tree_pointers (ib, data_in, expr);
2220
2221   if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL))
2222     lto_input_ts_decl_minimal_tree_pointers (ib, data_in, expr);
2223
2224   if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
2225     lto_input_ts_decl_common_tree_pointers (ib, data_in, expr);
2226
2227   if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
2228     lto_input_ts_decl_non_common_tree_pointers (ib, data_in, expr);
2229
2230   if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
2231     lto_input_ts_decl_with_vis_tree_pointers (ib, data_in, expr);
2232
2233   if (CODE_CONTAINS_STRUCT (code, TS_FIELD_DECL))
2234     lto_input_ts_field_decl_tree_pointers (ib, data_in, expr);
2235
2236   if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL))
2237     lto_input_ts_function_decl_tree_pointers (ib, data_in, expr);
2238
2239   if (CODE_CONTAINS_STRUCT (code, TS_TYPE))
2240     lto_input_ts_type_tree_pointers (ib, data_in, expr);
2241
2242   if (CODE_CONTAINS_STRUCT (code, TS_LIST))
2243     lto_input_ts_list_tree_pointers (ib, data_in, expr);
2244
2245   if (CODE_CONTAINS_STRUCT (code, TS_VEC))
2246     lto_input_ts_vec_tree_pointers (ib, data_in, expr);
2247
2248   if (CODE_CONTAINS_STRUCT (code, TS_EXP))
2249     lto_input_ts_exp_tree_pointers (ib, data_in, expr);
2250
2251   if (CODE_CONTAINS_STRUCT (code, TS_SSA_NAME))
2252     {
2253       /* We only stream the version number of SSA names.  */
2254       gcc_unreachable ();
2255     }
2256
2257   if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
2258     lto_input_ts_block_tree_pointers (ib, data_in, expr);
2259
2260   if (CODE_CONTAINS_STRUCT (code, TS_BINFO))
2261     lto_input_ts_binfo_tree_pointers (ib, data_in, expr);
2262
2263   if (CODE_CONTAINS_STRUCT (code, TS_STATEMENT_LIST))
2264     {
2265       /* This should only appear in GENERIC.  */
2266       gcc_unreachable ();
2267     }
2268
2269   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
2270     lto_input_ts_constructor_tree_pointers (ib, data_in, expr);
2271
2272   if (CODE_CONTAINS_STRUCT (code, TS_OMP_CLAUSE))
2273     {
2274       /* This should only appear in High GIMPLE.  */
2275       gcc_unreachable ();
2276     }
2277
2278   if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
2279     {
2280       sorry ("optimization options not supported yet");
2281     }
2282
2283   if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
2284     {
2285       sorry ("target optimization options not supported yet");
2286     }
2287 }
2288
2289
2290 /* Register DECL with the global symbol table and change its
2291    name if necessary to avoid name clashes for static globals across
2292    different files.  */
2293
2294 static void
2295 lto_register_var_decl_in_symtab (struct data_in *data_in, tree decl)
2296 {
2297   /* Register symbols with file or global scope to mark what input
2298      file has their definition.  */
2299   if (decl_function_context (decl) == NULL_TREE)
2300     {
2301       /* Variable has file scope, not local. Need to ensure static variables
2302          between different files don't clash unexpectedly.  */
2303       if (!TREE_PUBLIC (decl))
2304         {
2305           /* ??? We normally pre-mangle names before we serialize them
2306              out.  Here, in lto1, we do not know the language, and
2307              thus cannot do the mangling again. Instead, we just
2308              append a suffix to the mangled name.  The resulting name,
2309              however, is not a properly-formed mangled name, and will
2310              confuse any attempt to unmangle it.  */
2311           const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2312           char *label;
2313
2314           ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
2315           SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
2316           rest_of_decl_compilation (decl, 1, 0);
2317         }
2318     }
2319
2320   /* If this variable has already been declared, queue the
2321      declaration for merging.  */
2322   if (TREE_PUBLIC (decl))
2323     {
2324       int ix;
2325       if (!lto_streamer_cache_lookup (data_in->reader_cache, decl, &ix))
2326         gcc_unreachable ();
2327       lto_symtab_register_decl (decl, get_resolution (data_in, ix),
2328                                 data_in->file_data);
2329     }
2330 }
2331
2332
2333
2334 /* Register DECL with the global symbol table and change its
2335    name if necessary to avoid name clashes for static globals across
2336    different files.  DATA_IN contains descriptors and tables for the
2337    file being read.  */
2338
2339 static void
2340 lto_register_function_decl_in_symtab (struct data_in *data_in, tree decl)
2341 {
2342   /* Need to ensure static entities between different files
2343      don't clash unexpectedly.  */
2344   if (!TREE_PUBLIC (decl))
2345     {
2346       /* We must not use the DECL_ASSEMBLER_NAME macro here, as it
2347          may set the assembler name where it was previously empty.  */
2348       tree old_assembler_name = decl->decl_with_vis.assembler_name;
2349
2350       /* FIXME lto: We normally pre-mangle names before we serialize
2351          them out.  Here, in lto1, we do not know the language, and
2352          thus cannot do the mangling again. Instead, we just append a
2353          suffix to the mangled name.  The resulting name, however, is
2354          not a properly-formed mangled name, and will confuse any
2355          attempt to unmangle it.  */
2356       const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
2357       char *label;
2358
2359       ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
2360       SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
2361
2362       /* We may arrive here with the old assembler name not set
2363          if the function body is not needed, e.g., it has been
2364          inlined away and does not appear in the cgraph.  */
2365       if (old_assembler_name)
2366         {
2367           tree new_assembler_name = DECL_ASSEMBLER_NAME (decl);
2368
2369           /* Make the original assembler name available for later use.
2370              We may have used it to indicate the section within its
2371              object file where the function body may be found.
2372              FIXME lto: Find a better way to maintain the function decl
2373              to body section mapping so we don't need this hack.  */
2374           lto_record_renamed_decl (data_in->file_data,
2375                                    IDENTIFIER_POINTER (old_assembler_name),
2376                                    IDENTIFIER_POINTER (new_assembler_name));
2377
2378           /* Also register the reverse mapping so that we can find the
2379              new name given to an existing assembler name (used when
2380              restoring alias pairs in input_constructors_or_inits.  */
2381           lto_record_renamed_decl (data_in->file_data,
2382                                    IDENTIFIER_POINTER (new_assembler_name),
2383                                    IDENTIFIER_POINTER (old_assembler_name));
2384         }
2385     }
2386
2387   /* If this variable has already been declared, queue the
2388      declaration for merging.  */
2389   if (TREE_PUBLIC (decl) && !DECL_ABSTRACT (decl))
2390     {
2391       int ix;
2392       if (!lto_streamer_cache_lookup (data_in->reader_cache, decl, &ix))
2393         gcc_unreachable ();
2394       lto_symtab_register_decl (decl, get_resolution (data_in, ix),
2395                                 data_in->file_data);
2396     }
2397 }
2398
2399
2400 /* Read an index IX from input block IB and return the tree node at
2401    DATA_IN->FILE_DATA->GLOBALS_INDEX[IX].  */
2402
2403 static tree
2404 lto_get_pickled_tree (struct lto_input_block *ib, struct data_in *data_in)
2405 {
2406   HOST_WIDE_INT ix;
2407   tree result;
2408   enum LTO_tags expected_tag;
2409   unsigned HOST_WIDE_INT orig_offset;
2410
2411   ix = lto_input_sleb128 (ib);
2412   expected_tag = (enum LTO_tags) lto_input_uleb128 (ib);
2413
2414   orig_offset = lto_input_uleb128 (ib);
2415   gcc_assert (orig_offset == (unsigned) orig_offset);
2416
2417   result = lto_streamer_cache_get (data_in->reader_cache, ix);
2418   if (result == NULL_TREE)
2419     {
2420       /* We have not yet read the cache slot IX.  Go to the offset
2421          in the stream where the physical tree node is, and materialize
2422          it from there.  */
2423       struct lto_input_block fwd_ib;
2424
2425       /* If we are trying to go back in the stream, something is wrong.
2426          We should've read the node at the earlier position already.  */
2427       if (ib->p >= orig_offset)
2428         internal_error ("bytecode stream: tried to jump backwards in the "
2429                         "stream");
2430
2431       LTO_INIT_INPUT_BLOCK (fwd_ib, ib->data, orig_offset, ib->len);
2432       result = lto_input_tree (&fwd_ib, data_in);
2433     }
2434
2435   gcc_assert (result
2436               && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag));
2437
2438   return result;
2439 }
2440
2441
2442 /* Read a code and class from input block IB and return the
2443    corresponding builtin.  DATA_IN is as in lto_input_tree.  */
2444
2445 static tree
2446 lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
2447 {
2448   enum built_in_class fclass;
2449   enum built_in_function fcode;
2450   const char *asmname;
2451   tree result;
2452   int ix;
2453
2454   fclass = (enum built_in_class) lto_input_uleb128 (ib);
2455   gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD);
2456
2457   fcode = (enum built_in_function) lto_input_uleb128 (ib);
2458
2459   ix = lto_input_sleb128 (ib);
2460   gcc_assert (ix == (int) ix);
2461
2462   if (fclass == BUILT_IN_NORMAL)
2463     {
2464       gcc_assert (fcode < END_BUILTINS);
2465       result = built_in_decls[fcode];
2466       gcc_assert (result);
2467     }
2468   else if (fclass == BUILT_IN_MD)
2469     {
2470       result = targetm.builtin_decl (fcode, true);
2471       if (!result || result == error_mark_node)
2472         fatal_error ("target specific builtin not available");
2473     }
2474   else
2475     gcc_unreachable ();
2476
2477   asmname = input_string (data_in, ib);
2478   if (asmname)
2479     set_builtin_user_assembler_name (result, asmname);
2480
2481   lto_streamer_cache_insert_at (data_in->reader_cache, result, ix);
2482
2483   return result;
2484 }
2485
2486
2487 /* Read the physical representation of a tree node with tag TAG from
2488    input block IB using the per-file context in DATA_IN.  */
2489
2490 static tree
2491 lto_read_tree (struct lto_input_block *ib, struct data_in *data_in,
2492                enum LTO_tags tag)
2493 {
2494   tree result;
2495   int ix;
2496
2497   result = lto_materialize_tree (ib, data_in, tag, &ix);
2498
2499   /* Read all the pointer fields in RESULT.  */
2500   lto_input_tree_pointers (ib, data_in, result);
2501
2502   /* We should never try to instantiate an MD or NORMAL builtin here.  */
2503   if (TREE_CODE (result) == FUNCTION_DECL)
2504     gcc_assert (!lto_stream_as_builtin_p (result));
2505
2506   if (TREE_CODE (result) == VAR_DECL)
2507     lto_register_var_decl_in_symtab (data_in, result);
2508   else if (TREE_CODE (result) == FUNCTION_DECL && !DECL_BUILT_IN (result))
2509     lto_register_function_decl_in_symtab (data_in, result);
2510
2511   /* end_marker = */ lto_input_1_unsigned (ib);
2512
2513 #ifdef LTO_STREAMER_DEBUG
2514   /* Remove the mapping to RESULT's original address set by
2515      lto_materialize_tree.  */
2516   lto_orig_address_remove (result);
2517 #endif
2518
2519   return result;
2520 }
2521
2522
2523 /* Read and INTEGER_CST node from input block IB using the per-file
2524    context in DATA_IN.  */
2525
2526 static tree
2527 lto_input_integer_cst (struct lto_input_block *ib, struct data_in *data_in)
2528 {
2529   tree result, type;
2530   HOST_WIDE_INT low, high;
2531   bool overflow_p;
2532
2533   type = lto_input_tree (ib, data_in);
2534   overflow_p = (lto_input_1_unsigned (ib) != 0);
2535   low = lto_input_uleb128 (ib);
2536   high = lto_input_uleb128 (ib);
2537   result = build_int_cst_wide (type, low, high);
2538
2539   /* If the original constant had overflown, build a replica of RESULT to
2540      avoid modifying the shared constant returned by build_int_cst_wide.  */
2541   if (overflow_p)
2542     {
2543       result = copy_node (result);
2544       TREE_OVERFLOW (result) = 1;
2545     }
2546
2547   return result;
2548 }
2549
2550
2551 /* Read a tree from input block IB using the per-file context in
2552    DATA_IN.  This context is used, for example, to resolve references
2553    to previously read nodes.  */
2554
2555 tree
2556 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
2557 {
2558   enum LTO_tags tag;
2559   tree result;
2560
2561   tag = input_record_start (ib);
2562   gcc_assert ((unsigned) tag < (unsigned) LTO_NUM_TAGS);
2563
2564   if (tag == LTO_null)
2565     result = NULL_TREE;
2566   else if (tag >= LTO_field_decl_ref && tag <= LTO_global_decl_ref)
2567     {
2568       /* If TAG is a reference to an indexable tree, the next value
2569          in IB is the index into the table where we expect to find
2570          that tree.  */
2571       result = lto_input_tree_ref (ib, data_in, cfun, tag);
2572     }
2573   else if (tag == LTO_tree_pickle_reference)
2574     {
2575       /* If TAG is a reference to a previously read tree, look it up in
2576          the reader cache.  */
2577       result = lto_get_pickled_tree (ib, data_in);
2578     }
2579   else if (tag == LTO_builtin_decl)
2580     {
2581       /* If we are going to read a built-in function, all we need is
2582          the code and class.  */
2583       result = lto_get_builtin_tree (ib, data_in);
2584     }
2585   else if (tag == lto_tree_code_to_tag (INTEGER_CST))
2586     {
2587       /* For integer constants we only need the type and its hi/low
2588          words.  */
2589       result = lto_input_integer_cst (ib, data_in);
2590     }
2591   else
2592     {
2593       /* Otherwise, materialize a new node from IB.  */
2594       result = lto_read_tree (ib, data_in, tag);
2595     }
2596
2597   return result;
2598 }
2599
2600
2601 /* Initialization for the LTO reader.  */
2602
2603 void
2604 lto_init_reader (void)
2605 {
2606   lto_streamer_init ();
2607
2608   memset (&lto_stats, 0, sizeof (lto_stats));
2609   bitmap_obstack_initialize (NULL);
2610
2611   file_name_hash_table = htab_create (37, hash_string_slot_node,
2612                                       eq_string_slot_node, free);
2613
2614   gimple_register_cfg_hooks ();
2615 }
2616
2617
2618 /* Create a new data_in object for FILE_DATA. STRINGS is the string
2619    table to use with LEN strings.  RESOLUTIONS is the vector of linker
2620    resolutions (NULL if not using a linker plugin).  */
2621
2622 struct data_in *
2623 lto_data_in_create (struct lto_file_decl_data *file_data, const char *strings,
2624                     unsigned len,
2625                     VEC(ld_plugin_symbol_resolution_t,heap) *resolutions)
2626 {
2627   struct data_in *data_in = XCNEW (struct data_in);
2628   data_in->file_data = file_data;
2629   data_in->strings = strings;
2630   data_in->strings_len = len;
2631   data_in->globals_resolution = resolutions;
2632   data_in->reader_cache = lto_streamer_cache_create ();
2633
2634   return data_in;
2635 }
2636
2637
2638 /* Remove DATA_IN.  */
2639
2640 void
2641 lto_data_in_delete (struct data_in *data_in)
2642 {
2643   VEC_free (ld_plugin_symbol_resolution_t, heap, data_in->globals_resolution);
2644   lto_streamer_cache_delete (data_in->reader_cache);
2645   free (data_in->labels);
2646   free (data_in);
2647 }