OSDN Git Service

76be316eef9f58bdbdc85c9fb7aefbd3164ca361
[pf3gnuchains/gcc-fork.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* This file contains the low level primitives for operating on tree nodes,
23    including allocation, list operations, interning of identifiers,
24    construction of data type nodes and statement nodes,
25    and construction of type conversion nodes.  It also contains
26    tables index by tree code that describe how to take apart
27    nodes of that code.
28
29    It is intended to be language-independent, but occasionally
30    calls language-dependent routines defined (for C) in typecheck.c.  */
31
32 #include "config.h"
33 #include "system.h"
34 #include "coretypes.h"
35 #include "tm.h"
36 #include "flags.h"
37 #include "tree.h"
38 #include "real.h"
39 #include "tm_p.h"
40 #include "function.h"
41 #include "obstack.h"
42 #include "toplev.h"
43 #include "ggc.h"
44 #include "hashtab.h"
45 #include "output.h"
46 #include "target.h"
47 #include "langhooks.h"
48 #include "tree-inline.h"
49 #include "tree-iterator.h"
50 #include "basic-block.h"
51 #include "tree-flow.h"
52 #include "params.h"
53 #include "pointer-set.h"
54 #include "fixed-value.h"
55 #include "tree-pass.h"
56 #include "langhooks-def.h"
57 #include "diagnostic.h"
58 #include "cgraph.h"
59 #include "timevar.h"
60 #include "except.h"
61 #include "debug.h"
62 #include "intl.h"
63
64 /* Tree code classes.  */
65
66 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
67 #define END_OF_BASE_TREE_CODES tcc_exceptional,
68
69 const enum tree_code_class tree_code_type[] = {
70 #include "all-tree.def"
71 };
72
73 #undef DEFTREECODE
74 #undef END_OF_BASE_TREE_CODES
75
76 /* Table indexed by tree code giving number of expression
77    operands beyond the fixed part of the node structure.
78    Not used for types or decls.  */
79
80 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
81 #define END_OF_BASE_TREE_CODES 0,
82
83 const unsigned char tree_code_length[] = {
84 #include "all-tree.def"
85 };
86
87 #undef DEFTREECODE
88 #undef END_OF_BASE_TREE_CODES
89
90 /* Names of tree components.
91    Used for printing out the tree and error messages.  */
92 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
93 #define END_OF_BASE_TREE_CODES "@dummy",
94
95 const char *const tree_code_name[] = {
96 #include "all-tree.def"
97 };
98
99 #undef DEFTREECODE
100 #undef END_OF_BASE_TREE_CODES
101
102 /* Each tree code class has an associated string representation.
103    These must correspond to the tree_code_class entries.  */
104
105 const char *const tree_code_class_strings[] =
106 {
107   "exceptional",
108   "constant",
109   "type",
110   "declaration",
111   "reference",
112   "comparison",
113   "unary",
114   "binary",
115   "statement",
116   "vl_exp",
117   "expression"
118 };
119
120 /* obstack.[ch] explicitly declined to prototype this.  */
121 extern int _obstack_allocated_p (struct obstack *h, void *obj);
122
123 #ifdef GATHER_STATISTICS
124 /* Statistics-gathering stuff.  */
125
126 int tree_node_counts[(int) all_kinds];
127 int tree_node_sizes[(int) all_kinds];
128
129 /* Keep in sync with tree.h:enum tree_node_kind.  */
130 static const char * const tree_node_kind_names[] = {
131   "decls",
132   "types",
133   "blocks",
134   "stmts",
135   "refs",
136   "exprs",
137   "constants",
138   "identifiers",
139   "perm_tree_lists",
140   "temp_tree_lists",
141   "vecs",
142   "binfos",
143   "ssa names",
144   "constructors",
145   "random kinds",
146   "lang_decl kinds",
147   "lang_type kinds",
148   "omp clauses",
149 };
150 #endif /* GATHER_STATISTICS */
151
152 /* Unique id for next decl created.  */
153 static GTY(()) int next_decl_uid;
154 /* Unique id for next type created.  */
155 static GTY(()) int next_type_uid = 1;
156 /* Unique id for next debug decl created.  Use negative numbers,
157    to catch erroneous uses.  */
158 static GTY(()) int next_debug_decl_uid;
159
160 /* Since we cannot rehash a type after it is in the table, we have to
161    keep the hash code.  */
162
163 struct GTY(()) type_hash {
164   unsigned long hash;
165   tree type;
166 };
167
168 /* Initial size of the hash table (rounded to next prime).  */
169 #define TYPE_HASH_INITIAL_SIZE 1000
170
171 /* Now here is the hash table.  When recording a type, it is added to
172    the slot whose index is the hash code.  Note that the hash table is
173    used for several kinds of types (function types, array types and
174    array index range types, for now).  While all these live in the
175    same table, they are completely independent, and the hash code is
176    computed differently for each of these.  */
177
178 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
179      htab_t type_hash_table;
180
181 /* Hash table and temporary node for larger integer const values.  */
182 static GTY (()) tree int_cst_node;
183 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
184      htab_t int_cst_hash_table;
185
186 /* Hash table for optimization flags and target option flags.  Use the same
187    hash table for both sets of options.  Nodes for building the current
188    optimization and target option nodes.  The assumption is most of the time
189    the options created will already be in the hash table, so we avoid
190    allocating and freeing up a node repeatably.  */
191 static GTY (()) tree cl_optimization_node;
192 static GTY (()) tree cl_target_option_node;
193 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
194      htab_t cl_option_hash_table;
195
196 /* General tree->tree mapping  structure for use in hash tables.  */
197
198
199 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
200      htab_t debug_expr_for_decl;
201
202 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
203      htab_t value_expr_for_decl;
204
205 static GTY ((if_marked ("tree_priority_map_marked_p"),
206              param_is (struct tree_priority_map)))
207   htab_t init_priority_for_decl;
208
209 static void set_type_quals (tree, int);
210 static int type_hash_eq (const void *, const void *);
211 static hashval_t type_hash_hash (const void *);
212 static hashval_t int_cst_hash_hash (const void *);
213 static int int_cst_hash_eq (const void *, const void *);
214 static hashval_t cl_option_hash_hash (const void *);
215 static int cl_option_hash_eq (const void *, const void *);
216 static void print_type_hash_statistics (void);
217 static void print_debug_expr_statistics (void);
218 static void print_value_expr_statistics (void);
219 static int type_hash_marked_p (const void *);
220 static unsigned int type_hash_list (const_tree, hashval_t);
221 static unsigned int attribute_hash_list (const_tree, hashval_t);
222
223 tree global_trees[TI_MAX];
224 tree integer_types[itk_none];
225
226 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
227
228 /* Number of operands for each OpenMP clause.  */
229 unsigned const char omp_clause_num_ops[] =
230 {
231   0, /* OMP_CLAUSE_ERROR  */
232   1, /* OMP_CLAUSE_PRIVATE  */
233   1, /* OMP_CLAUSE_SHARED  */
234   1, /* OMP_CLAUSE_FIRSTPRIVATE  */
235   2, /* OMP_CLAUSE_LASTPRIVATE  */
236   4, /* OMP_CLAUSE_REDUCTION  */
237   1, /* OMP_CLAUSE_COPYIN  */
238   1, /* OMP_CLAUSE_COPYPRIVATE  */
239   1, /* OMP_CLAUSE_IF  */
240   1, /* OMP_CLAUSE_NUM_THREADS  */
241   1, /* OMP_CLAUSE_SCHEDULE  */
242   0, /* OMP_CLAUSE_NOWAIT  */
243   0, /* OMP_CLAUSE_ORDERED  */
244   0, /* OMP_CLAUSE_DEFAULT  */
245   3, /* OMP_CLAUSE_COLLAPSE  */
246   0  /* OMP_CLAUSE_UNTIED   */
247 };
248
249 const char * const omp_clause_code_name[] =
250 {
251   "error_clause",
252   "private",
253   "shared",
254   "firstprivate",
255   "lastprivate",
256   "reduction",
257   "copyin",
258   "copyprivate",
259   "if",
260   "num_threads",
261   "schedule",
262   "nowait",
263   "ordered",
264   "default",
265   "collapse",
266   "untied"
267 };
268
269
270 /* Return the tree node structure used by tree code CODE.  */
271
272 static inline enum tree_node_structure_enum
273 tree_node_structure_for_code (enum tree_code code)
274 {
275   switch (TREE_CODE_CLASS (code))
276     {
277     case tcc_declaration:
278       {
279         switch (code)
280           {
281           case FIELD_DECL:
282             return TS_FIELD_DECL;
283           case PARM_DECL:
284             return TS_PARM_DECL;
285           case VAR_DECL:
286             return TS_VAR_DECL;
287           case LABEL_DECL:
288             return TS_LABEL_DECL;
289           case RESULT_DECL:
290             return TS_RESULT_DECL;
291           case DEBUG_EXPR_DECL:
292             return TS_DECL_WRTL;
293           case CONST_DECL:
294             return TS_CONST_DECL;
295           case TYPE_DECL:
296             return TS_TYPE_DECL;
297           case FUNCTION_DECL:
298             return TS_FUNCTION_DECL;
299           default:
300             return TS_DECL_NON_COMMON;
301           }
302       }
303     case tcc_type:
304       return TS_TYPE;
305     case tcc_reference:
306     case tcc_comparison:
307     case tcc_unary:
308     case tcc_binary:
309     case tcc_expression:
310     case tcc_statement:
311     case tcc_vl_exp:
312       return TS_EXP;
313     default:  /* tcc_constant and tcc_exceptional */
314       break;
315     }
316   switch (code)
317     {
318       /* tcc_constant cases.  */
319     case INTEGER_CST:           return TS_INT_CST;
320     case REAL_CST:              return TS_REAL_CST;
321     case FIXED_CST:             return TS_FIXED_CST;
322     case COMPLEX_CST:           return TS_COMPLEX;
323     case VECTOR_CST:            return TS_VECTOR;
324     case STRING_CST:            return TS_STRING;
325       /* tcc_exceptional cases.  */
326     case ERROR_MARK:            return TS_COMMON;
327     case IDENTIFIER_NODE:       return TS_IDENTIFIER;
328     case TREE_LIST:             return TS_LIST;
329     case TREE_VEC:              return TS_VEC;
330     case SSA_NAME:              return TS_SSA_NAME;
331     case PLACEHOLDER_EXPR:      return TS_COMMON;
332     case STATEMENT_LIST:        return TS_STATEMENT_LIST;
333     case BLOCK:                 return TS_BLOCK;
334     case CONSTRUCTOR:           return TS_CONSTRUCTOR;
335     case TREE_BINFO:            return TS_BINFO;
336     case OMP_CLAUSE:            return TS_OMP_CLAUSE;
337     case OPTIMIZATION_NODE:     return TS_OPTIMIZATION;
338     case TARGET_OPTION_NODE:    return TS_TARGET_OPTION;
339
340     default:
341       gcc_unreachable ();
342     }
343 }
344
345
346 /* Initialize tree_contains_struct to describe the hierarchy of tree
347    nodes.  */
348
349 static void
350 initialize_tree_contains_struct (void)
351 {
352   unsigned i;
353
354 #define MARK_TS_BASE(C)                                 \
355   do {                                                  \
356     tree_contains_struct[C][TS_BASE] = 1;               \
357   } while (0)
358
359 #define MARK_TS_COMMON(C)                               \
360   do {                                                  \
361     MARK_TS_BASE (C);                                   \
362     tree_contains_struct[C][TS_COMMON] = 1;             \
363   } while (0)
364
365 #define MARK_TS_DECL_MINIMAL(C)                         \
366   do {                                                  \
367     MARK_TS_COMMON (C);                                 \
368     tree_contains_struct[C][TS_DECL_MINIMAL] = 1;       \
369   } while (0)
370
371 #define MARK_TS_DECL_COMMON(C)                          \
372   do {                                                  \
373     MARK_TS_DECL_MINIMAL (C);                           \
374     tree_contains_struct[C][TS_DECL_COMMON] = 1;        \
375   } while (0)
376
377 #define MARK_TS_DECL_WRTL(C)                            \
378   do {                                                  \
379     MARK_TS_DECL_COMMON (C);                            \
380     tree_contains_struct[C][TS_DECL_WRTL] = 1;          \
381   } while (0)
382
383 #define MARK_TS_DECL_WITH_VIS(C)                        \
384   do {                                                  \
385     MARK_TS_DECL_WRTL (C);                              \
386     tree_contains_struct[C][TS_DECL_WITH_VIS] = 1;      \
387   } while (0)
388
389 #define MARK_TS_DECL_NON_COMMON(C)                      \
390   do {                                                  \
391     MARK_TS_DECL_WITH_VIS (C);                          \
392     tree_contains_struct[C][TS_DECL_NON_COMMON] = 1;    \
393   } while (0)
394
395   for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
396     {
397       enum tree_code code;
398       enum tree_node_structure_enum ts_code;
399
400       code = (enum tree_code) i;
401       ts_code = tree_node_structure_for_code (code);
402
403       /* Mark the TS structure itself.  */
404       tree_contains_struct[code][ts_code] = 1;
405
406       /* Mark all the structures that TS is derived from.  */
407       switch (ts_code)
408         {
409         case TS_COMMON:
410           MARK_TS_BASE (code);
411           break;
412
413         case TS_INT_CST:
414         case TS_REAL_CST:
415         case TS_FIXED_CST:
416         case TS_VECTOR:
417         case TS_STRING:
418         case TS_COMPLEX:
419         case TS_IDENTIFIER:
420         case TS_DECL_MINIMAL:
421         case TS_TYPE:
422         case TS_LIST:
423         case TS_VEC:
424         case TS_EXP:
425         case TS_SSA_NAME:
426         case TS_BLOCK:
427         case TS_BINFO:
428         case TS_STATEMENT_LIST:
429         case TS_CONSTRUCTOR:
430         case TS_OMP_CLAUSE:
431         case TS_OPTIMIZATION:
432         case TS_TARGET_OPTION:
433           MARK_TS_COMMON (code);
434           break;
435
436         case TS_DECL_COMMON:
437           MARK_TS_DECL_MINIMAL (code);
438           break;
439
440         case TS_DECL_WRTL:
441           MARK_TS_DECL_COMMON (code);
442           break;
443
444         case TS_DECL_NON_COMMON:
445           MARK_TS_DECL_WITH_VIS (code);
446           break;
447
448         case TS_DECL_WITH_VIS:
449         case TS_PARM_DECL:
450         case TS_LABEL_DECL:
451         case TS_RESULT_DECL:
452         case TS_CONST_DECL:
453           MARK_TS_DECL_WRTL (code);
454           break;
455
456         case TS_FIELD_DECL:
457           MARK_TS_DECL_COMMON (code);
458           break;
459
460         case TS_VAR_DECL:
461           MARK_TS_DECL_WITH_VIS (code);
462           break;
463
464         case TS_TYPE_DECL:
465         case TS_FUNCTION_DECL:
466           MARK_TS_DECL_NON_COMMON (code);
467           break;
468
469         default:
470           gcc_unreachable ();
471         }
472     }
473
474   /* Basic consistency checks for attributes used in fold.  */
475   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
476   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_NON_COMMON]);
477   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
478   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
479   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
480   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
481   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
482   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
483   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
484   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
485   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
486   gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
487   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_WRTL]);
488   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
489   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
490   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
491   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
492   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
493   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
494   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
495   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
496   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
497   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
498   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
499   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
500   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
501   gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
502   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
503   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
504   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
505   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_WITH_VIS]);
506   gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
507   gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
508   gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
509   gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
510   gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
511   gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
512   gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
513   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
514   gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
515   gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
516
517 #undef MARK_TS_BASE
518 #undef MARK_TS_COMMON
519 #undef MARK_TS_DECL_MINIMAL
520 #undef MARK_TS_DECL_COMMON
521 #undef MARK_TS_DECL_WRTL
522 #undef MARK_TS_DECL_WITH_VIS
523 #undef MARK_TS_DECL_NON_COMMON
524 }
525
526
527 /* Init tree.c.  */
528
529 void
530 init_ttree (void)
531 {
532   /* Initialize the hash table of types.  */
533   type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
534                                      type_hash_eq, 0);
535
536   debug_expr_for_decl = htab_create_ggc (512, tree_map_hash,
537                                          tree_map_eq, 0);
538
539   value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
540                                          tree_map_eq, 0);
541   init_priority_for_decl = htab_create_ggc (512, tree_priority_map_hash,
542                                             tree_priority_map_eq, 0);
543
544   int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
545                                         int_cst_hash_eq, NULL);
546
547   int_cst_node = make_node (INTEGER_CST);
548
549   cl_option_hash_table = htab_create_ggc (64, cl_option_hash_hash,
550                                           cl_option_hash_eq, NULL);
551
552   cl_optimization_node = make_node (OPTIMIZATION_NODE);
553   cl_target_option_node = make_node (TARGET_OPTION_NODE);
554
555   /* Initialize the tree_contains_struct array.  */
556   initialize_tree_contains_struct ();
557   lang_hooks.init_ts ();
558 }
559
560 \f
561 /* The name of the object as the assembler will see it (but before any
562    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
563    as DECL_NAME.  It is an IDENTIFIER_NODE.  */
564 tree
565 decl_assembler_name (tree decl)
566 {
567   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
568     lang_hooks.set_decl_assembler_name (decl);
569   return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
570 }
571
572 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
573
574 bool
575 decl_assembler_name_equal (tree decl, const_tree asmname)
576 {
577   tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
578   const char *decl_str;
579   const char *asmname_str;
580   bool test = false;
581
582   if (decl_asmname == asmname)
583     return true;
584
585   decl_str = IDENTIFIER_POINTER (decl_asmname);
586   asmname_str = IDENTIFIER_POINTER (asmname);
587
588
589   /* If the target assembler name was set by the user, things are trickier.
590      We have a leading '*' to begin with.  After that, it's arguable what
591      is the correct thing to do with -fleading-underscore.  Arguably, we've
592      historically been doing the wrong thing in assemble_alias by always
593      printing the leading underscore.  Since we're not changing that, make
594      sure user_label_prefix follows the '*' before matching.  */
595   if (decl_str[0] == '*')
596     {
597       size_t ulp_len = strlen (user_label_prefix);
598
599       decl_str ++;
600
601       if (ulp_len == 0)
602         test = true;
603       else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
604         decl_str += ulp_len, test=true;
605       else
606         decl_str --;
607     }
608   if (asmname_str[0] == '*')
609     {
610       size_t ulp_len = strlen (user_label_prefix);
611
612       asmname_str ++;
613
614       if (ulp_len == 0)
615         test = true;
616       else if (strncmp (asmname_str, user_label_prefix, ulp_len) == 0)
617         asmname_str += ulp_len, test=true;
618       else
619         asmname_str --;
620     }
621
622   if (!test)
623     return false;
624   return strcmp (decl_str, asmname_str) == 0;
625 }
626
627 /* Hash asmnames ignoring the user specified marks.  */
628
629 hashval_t
630 decl_assembler_name_hash (const_tree asmname)
631 {
632   if (IDENTIFIER_POINTER (asmname)[0] == '*')
633     {
634       const char *decl_str = IDENTIFIER_POINTER (asmname) + 1;
635       size_t ulp_len = strlen (user_label_prefix);
636
637       if (ulp_len == 0)
638         ;
639       else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
640         decl_str += ulp_len;
641
642       return htab_hash_string (decl_str);
643     }
644
645   return htab_hash_string (IDENTIFIER_POINTER (asmname));
646 }
647
648 /* Compute the number of bytes occupied by a tree with code CODE.
649    This function cannot be used for nodes that have variable sizes,
650    including TREE_VEC, STRING_CST, and CALL_EXPR.  */
651 size_t
652 tree_code_size (enum tree_code code)
653 {
654   switch (TREE_CODE_CLASS (code))
655     {
656     case tcc_declaration:  /* A decl node */
657       {
658         switch (code)
659           {
660           case FIELD_DECL:
661             return sizeof (struct tree_field_decl);
662           case PARM_DECL:
663             return sizeof (struct tree_parm_decl);
664           case VAR_DECL:
665             return sizeof (struct tree_var_decl);
666           case LABEL_DECL:
667             return sizeof (struct tree_label_decl);
668           case RESULT_DECL:
669             return sizeof (struct tree_result_decl);
670           case CONST_DECL:
671             return sizeof (struct tree_const_decl);
672           case TYPE_DECL:
673             return sizeof (struct tree_type_decl);
674           case FUNCTION_DECL:
675             return sizeof (struct tree_function_decl);
676           case DEBUG_EXPR_DECL:
677             return sizeof (struct tree_decl_with_rtl);
678           default:
679             return sizeof (struct tree_decl_non_common);
680           }
681       }
682
683     case tcc_type:  /* a type node */
684       return sizeof (struct tree_type);
685
686     case tcc_reference:   /* a reference */
687     case tcc_expression:  /* an expression */
688     case tcc_statement:   /* an expression with side effects */
689     case tcc_comparison:  /* a comparison expression */
690     case tcc_unary:       /* a unary arithmetic expression */
691     case tcc_binary:      /* a binary arithmetic expression */
692       return (sizeof (struct tree_exp)
693               + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
694
695     case tcc_constant:  /* a constant */
696       switch (code)
697         {
698         case INTEGER_CST:       return sizeof (struct tree_int_cst);
699         case REAL_CST:          return sizeof (struct tree_real_cst);
700         case FIXED_CST:         return sizeof (struct tree_fixed_cst);
701         case COMPLEX_CST:       return sizeof (struct tree_complex);
702         case VECTOR_CST:        return sizeof (struct tree_vector);
703         case STRING_CST:        gcc_unreachable ();
704         default:
705           return lang_hooks.tree_size (code);
706         }
707
708     case tcc_exceptional:  /* something random, like an identifier.  */
709       switch (code)
710         {
711         case IDENTIFIER_NODE:   return lang_hooks.identifier_size;
712         case TREE_LIST:         return sizeof (struct tree_list);
713
714         case ERROR_MARK:
715         case PLACEHOLDER_EXPR:  return sizeof (struct tree_common);
716
717         case TREE_VEC:
718         case OMP_CLAUSE:        gcc_unreachable ();
719
720         case SSA_NAME:          return sizeof (struct tree_ssa_name);
721
722         case STATEMENT_LIST:    return sizeof (struct tree_statement_list);
723         case BLOCK:             return sizeof (struct tree_block);
724         case CONSTRUCTOR:       return sizeof (struct tree_constructor);
725         case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
726         case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
727
728         default:
729           return lang_hooks.tree_size (code);
730         }
731
732     default:
733       gcc_unreachable ();
734     }
735 }
736
737 /* Compute the number of bytes occupied by NODE.  This routine only
738    looks at TREE_CODE, except for those nodes that have variable sizes.  */
739 size_t
740 tree_size (const_tree node)
741 {
742   const enum tree_code code = TREE_CODE (node);
743   switch (code)
744     {
745     case TREE_BINFO:
746       return (offsetof (struct tree_binfo, base_binfos)
747               + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
748
749     case TREE_VEC:
750       return (sizeof (struct tree_vec)
751               + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
752
753     case STRING_CST:
754       return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
755
756     case OMP_CLAUSE:
757       return (sizeof (struct tree_omp_clause)
758               + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
759                 * sizeof (tree));
760
761     default:
762       if (TREE_CODE_CLASS (code) == tcc_vl_exp)
763         return (sizeof (struct tree_exp)
764                 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
765       else
766         return tree_code_size (code);
767     }
768 }
769
770 /* Return a newly allocated node of code CODE.  For decl and type
771    nodes, some other fields are initialized.  The rest of the node is
772    initialized to zero.  This function cannot be used for TREE_VEC or
773    OMP_CLAUSE nodes, which is enforced by asserts in tree_code_size.
774
775    Achoo!  I got a code in the node.  */
776
777 tree
778 make_node_stat (enum tree_code code MEM_STAT_DECL)
779 {
780   tree t;
781   enum tree_code_class type = TREE_CODE_CLASS (code);
782   size_t length = tree_code_size (code);
783 #ifdef GATHER_STATISTICS
784   tree_node_kind kind;
785
786   switch (type)
787     {
788     case tcc_declaration:  /* A decl node */
789       kind = d_kind;
790       break;
791
792     case tcc_type:  /* a type node */
793       kind = t_kind;
794       break;
795
796     case tcc_statement:  /* an expression with side effects */
797       kind = s_kind;
798       break;
799
800     case tcc_reference:  /* a reference */
801       kind = r_kind;
802       break;
803
804     case tcc_expression:  /* an expression */
805     case tcc_comparison:  /* a comparison expression */
806     case tcc_unary:  /* a unary arithmetic expression */
807     case tcc_binary:  /* a binary arithmetic expression */
808       kind = e_kind;
809       break;
810
811     case tcc_constant:  /* a constant */
812       kind = c_kind;
813       break;
814
815     case tcc_exceptional:  /* something random, like an identifier.  */
816       switch (code)
817         {
818         case IDENTIFIER_NODE:
819           kind = id_kind;
820           break;
821
822         case TREE_VEC:
823           kind = vec_kind;
824           break;
825
826         case TREE_BINFO:
827           kind = binfo_kind;
828           break;
829
830         case SSA_NAME:
831           kind = ssa_name_kind;
832           break;
833
834         case BLOCK:
835           kind = b_kind;
836           break;
837
838         case CONSTRUCTOR:
839           kind = constr_kind;
840           break;
841
842         default:
843           kind = x_kind;
844           break;
845         }
846       break;
847
848     default:
849       gcc_unreachable ();
850     }
851
852   tree_node_counts[(int) kind]++;
853   tree_node_sizes[(int) kind] += length;
854 #endif
855
856   if (code == IDENTIFIER_NODE)
857     t = (tree) ggc_alloc_zone_pass_stat (length, &tree_id_zone);
858   else
859     t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
860
861   memset (t, 0, length);
862
863   TREE_SET_CODE (t, code);
864
865   switch (type)
866     {
867     case tcc_statement:
868       TREE_SIDE_EFFECTS (t) = 1;
869       break;
870
871     case tcc_declaration:
872       if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
873         {
874           if (code == FUNCTION_DECL)
875             {
876               DECL_ALIGN (t) = FUNCTION_BOUNDARY;
877               DECL_MODE (t) = FUNCTION_MODE;
878             }
879           else
880             DECL_ALIGN (t) = 1;
881         }
882       DECL_SOURCE_LOCATION (t) = input_location;
883       if (TREE_CODE (t) == DEBUG_EXPR_DECL)
884         DECL_UID (t) = --next_debug_decl_uid;
885       else
886         {
887           DECL_UID (t) = next_decl_uid++;
888           SET_DECL_PT_UID (t, -1);
889         }
890       if (TREE_CODE (t) == LABEL_DECL)
891         LABEL_DECL_UID (t) = -1;
892
893       break;
894
895     case tcc_type:
896       TYPE_UID (t) = next_type_uid++;
897       TYPE_ALIGN (t) = BITS_PER_UNIT;
898       TYPE_USER_ALIGN (t) = 0;
899       TYPE_MAIN_VARIANT (t) = t;
900       TYPE_CANONICAL (t) = t;
901
902       /* Default to no attributes for type, but let target change that.  */
903       TYPE_ATTRIBUTES (t) = NULL_TREE;
904       targetm.set_default_type_attributes (t);
905
906       /* We have not yet computed the alias set for this type.  */
907       TYPE_ALIAS_SET (t) = -1;
908       break;
909
910     case tcc_constant:
911       TREE_CONSTANT (t) = 1;
912       break;
913
914     case tcc_expression:
915       switch (code)
916         {
917         case INIT_EXPR:
918         case MODIFY_EXPR:
919         case VA_ARG_EXPR:
920         case PREDECREMENT_EXPR:
921         case PREINCREMENT_EXPR:
922         case POSTDECREMENT_EXPR:
923         case POSTINCREMENT_EXPR:
924           /* All of these have side-effects, no matter what their
925              operands are.  */
926           TREE_SIDE_EFFECTS (t) = 1;
927           break;
928
929         default:
930           break;
931         }
932       break;
933
934     default:
935       /* Other classes need no special treatment.  */
936       break;
937     }
938
939   return t;
940 }
941 \f
942 /* Return a new node with the same contents as NODE except that its
943    TREE_CHAIN is zero and it has a fresh uid.  */
944
945 tree
946 copy_node_stat (tree node MEM_STAT_DECL)
947 {
948   tree t;
949   enum tree_code code = TREE_CODE (node);
950   size_t length;
951
952   gcc_assert (code != STATEMENT_LIST);
953
954   length = tree_size (node);
955   t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
956   memcpy (t, node, length);
957
958   TREE_CHAIN (t) = 0;
959   TREE_ASM_WRITTEN (t) = 0;
960   TREE_VISITED (t) = 0;
961   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
962     *DECL_VAR_ANN_PTR (t) = 0;
963
964   if (TREE_CODE_CLASS (code) == tcc_declaration)
965     {
966       if (code == DEBUG_EXPR_DECL)
967         DECL_UID (t) = --next_debug_decl_uid;
968       else
969         {
970           DECL_UID (t) = next_decl_uid++;
971           if (DECL_PT_UID_SET_P (node))
972             SET_DECL_PT_UID (t, DECL_PT_UID (node));
973         }
974       if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
975           && DECL_HAS_VALUE_EXPR_P (node))
976         {
977           SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
978           DECL_HAS_VALUE_EXPR_P (t) = 1;
979         }
980       if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
981         {
982           SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
983           DECL_HAS_INIT_PRIORITY_P (t) = 1;
984         }
985     }
986   else if (TREE_CODE_CLASS (code) == tcc_type)
987     {
988       TYPE_UID (t) = next_type_uid++;
989       /* The following is so that the debug code for
990          the copy is different from the original type.
991          The two statements usually duplicate each other
992          (because they clear fields of the same union),
993          but the optimizer should catch that.  */
994       TYPE_SYMTAB_POINTER (t) = 0;
995       TYPE_SYMTAB_ADDRESS (t) = 0;
996
997       /* Do not copy the values cache.  */
998       if (TYPE_CACHED_VALUES_P(t))
999         {
1000           TYPE_CACHED_VALUES_P (t) = 0;
1001           TYPE_CACHED_VALUES (t) = NULL_TREE;
1002         }
1003     }
1004
1005   return t;
1006 }
1007
1008 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1009    For example, this can copy a list made of TREE_LIST nodes.  */
1010
1011 tree
1012 copy_list (tree list)
1013 {
1014   tree head;
1015   tree prev, next;
1016
1017   if (list == 0)
1018     return 0;
1019
1020   head = prev = copy_node (list);
1021   next = TREE_CHAIN (list);
1022   while (next)
1023     {
1024       TREE_CHAIN (prev) = copy_node (next);
1025       prev = TREE_CHAIN (prev);
1026       next = TREE_CHAIN (next);
1027     }
1028   return head;
1029 }
1030
1031 \f
1032 /* Create an INT_CST node with a LOW value sign extended.  */
1033
1034 tree
1035 build_int_cst (tree type, HOST_WIDE_INT low)
1036 {
1037   /* Support legacy code.  */
1038   if (!type)
1039     type = integer_type_node;
1040
1041   return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
1042 }
1043
1044 /* Create an INT_CST node with a LOW value in TYPE.  The value is sign extended
1045    if it is negative.  This function is similar to build_int_cst, but
1046    the extra bits outside of the type precision are cleared.  Constants
1047    with these extra bits may confuse the fold so that it detects overflows
1048    even in cases when they do not occur, and in general should be avoided.
1049    We cannot however make this a default behavior of build_int_cst without
1050    more intrusive changes, since there are parts of gcc that rely on the extra
1051    precision of the integer constants.  */
1052
1053 tree
1054 build_int_cst_type (tree type, HOST_WIDE_INT low)
1055 {
1056   unsigned HOST_WIDE_INT low1;
1057   HOST_WIDE_INT hi;
1058
1059   gcc_assert (type);
1060
1061   fit_double_type (low, low < 0 ? -1 : 0, &low1, &hi, type);
1062
1063   return build_int_cst_wide (type, low1, hi);
1064 }
1065
1066 /* Create an INT_CST node of TYPE and value HI:LOW.  The value is truncated
1067    and sign extended according to the value range of TYPE.  */
1068
1069 tree
1070 build_int_cst_wide_type (tree type,
1071                          unsigned HOST_WIDE_INT low, HOST_WIDE_INT high)
1072 {
1073   fit_double_type (low, high, &low, &high, type);
1074   return build_int_cst_wide (type, low, high);
1075 }
1076
1077 /* Constructs tree in type TYPE from with value given by CST.  Signedness
1078    of CST is assumed to be the same as the signedness of TYPE.  */
1079
1080 tree
1081 double_int_to_tree (tree type, double_int cst)
1082 {
1083   /* Size types *are* sign extended.  */
1084   bool sign_extended_type = (!TYPE_UNSIGNED (type)
1085                              || (TREE_CODE (type) == INTEGER_TYPE
1086                                  && TYPE_IS_SIZETYPE (type)));
1087
1088   cst = double_int_ext (cst, TYPE_PRECISION (type), !sign_extended_type);
1089
1090   return build_int_cst_wide (type, cst.low, cst.high);
1091 }
1092
1093 /* Returns true if CST fits into range of TYPE.  Signedness of CST is assumed
1094    to be the same as the signedness of TYPE.  */
1095
1096 bool
1097 double_int_fits_to_tree_p (const_tree type, double_int cst)
1098 {
1099   /* Size types *are* sign extended.  */
1100   bool sign_extended_type = (!TYPE_UNSIGNED (type)
1101                              || (TREE_CODE (type) == INTEGER_TYPE
1102                                  && TYPE_IS_SIZETYPE (type)));
1103
1104   double_int ext
1105     = double_int_ext (cst, TYPE_PRECISION (type), !sign_extended_type);
1106
1107   return double_int_equal_p (cst, ext);
1108 }
1109
1110 /* These are the hash table functions for the hash table of INTEGER_CST
1111    nodes of a sizetype.  */
1112
1113 /* Return the hash code code X, an INTEGER_CST.  */
1114
1115 static hashval_t
1116 int_cst_hash_hash (const void *x)
1117 {
1118   const_tree const t = (const_tree) x;
1119
1120   return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
1121           ^ htab_hash_pointer (TREE_TYPE (t)));
1122 }
1123
1124 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1125    is the same as that given by *Y, which is the same.  */
1126
1127 static int
1128 int_cst_hash_eq (const void *x, const void *y)
1129 {
1130   const_tree const xt = (const_tree) x;
1131   const_tree const yt = (const_tree) y;
1132
1133   return (TREE_TYPE (xt) == TREE_TYPE (yt)
1134           && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
1135           && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
1136 }
1137
1138 /* Create an INT_CST node of TYPE and value HI:LOW.
1139    The returned node is always shared.  For small integers we use a
1140    per-type vector cache, for larger ones we use a single hash table.  */
1141
1142 tree
1143 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
1144 {
1145   tree t;
1146   int ix = -1;
1147   int limit = 0;
1148
1149   gcc_assert (type);
1150
1151   switch (TREE_CODE (type))
1152     {
1153     case POINTER_TYPE:
1154     case REFERENCE_TYPE:
1155       /* Cache NULL pointer.  */
1156       if (!hi && !low)
1157         {
1158           limit = 1;
1159           ix = 0;
1160         }
1161       break;
1162
1163     case BOOLEAN_TYPE:
1164       /* Cache false or true.  */
1165       limit = 2;
1166       if (!hi && low < 2)
1167         ix = low;
1168       break;
1169
1170     case INTEGER_TYPE:
1171     case OFFSET_TYPE:
1172       if (TYPE_UNSIGNED (type))
1173         {
1174           /* Cache 0..N */
1175           limit = INTEGER_SHARE_LIMIT;
1176           if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1177             ix = low;
1178         }
1179       else
1180         {
1181           /* Cache -1..N */
1182           limit = INTEGER_SHARE_LIMIT + 1;
1183           if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1184             ix = low + 1;
1185           else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
1186             ix = 0;
1187         }
1188       break;
1189
1190     case ENUMERAL_TYPE:
1191       break;
1192
1193     default:
1194       gcc_unreachable ();
1195     }
1196
1197   if (ix >= 0)
1198     {
1199       /* Look for it in the type's vector of small shared ints.  */
1200       if (!TYPE_CACHED_VALUES_P (type))
1201         {
1202           TYPE_CACHED_VALUES_P (type) = 1;
1203           TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1204         }
1205
1206       t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1207       if (t)
1208         {
1209           /* Make sure no one is clobbering the shared constant.  */
1210           gcc_assert (TREE_TYPE (t) == type);
1211           gcc_assert (TREE_INT_CST_LOW (t) == low);
1212           gcc_assert (TREE_INT_CST_HIGH (t) == hi);
1213         }
1214       else
1215         {
1216           /* Create a new shared int.  */
1217           t = make_node (INTEGER_CST);
1218
1219           TREE_INT_CST_LOW (t) = low;
1220           TREE_INT_CST_HIGH (t) = hi;
1221           TREE_TYPE (t) = type;
1222
1223           TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1224         }
1225     }
1226   else
1227     {
1228       /* Use the cache of larger shared ints.  */
1229       void **slot;
1230
1231       TREE_INT_CST_LOW (int_cst_node) = low;
1232       TREE_INT_CST_HIGH (int_cst_node) = hi;
1233       TREE_TYPE (int_cst_node) = type;
1234
1235       slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
1236       t = (tree) *slot;
1237       if (!t)
1238         {
1239           /* Insert this one into the hash table.  */
1240           t = int_cst_node;
1241           *slot = t;
1242           /* Make a new node for next time round.  */
1243           int_cst_node = make_node (INTEGER_CST);
1244         }
1245     }
1246
1247   return t;
1248 }
1249
1250 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1251    and the rest are zeros.  */
1252
1253 tree
1254 build_low_bits_mask (tree type, unsigned bits)
1255 {
1256   double_int mask;
1257
1258   gcc_assert (bits <= TYPE_PRECISION (type));
1259
1260   if (bits == TYPE_PRECISION (type)
1261       && !TYPE_UNSIGNED (type))
1262     /* Sign extended all-ones mask.  */
1263     mask = double_int_minus_one;
1264   else
1265     mask = double_int_mask (bits);
1266
1267   return build_int_cst_wide (type, mask.low, mask.high);
1268 }
1269
1270 /* Checks that X is integer constant that can be expressed in (unsigned)
1271    HOST_WIDE_INT without loss of precision.  */
1272
1273 bool
1274 cst_and_fits_in_hwi (const_tree x)
1275 {
1276   if (TREE_CODE (x) != INTEGER_CST)
1277     return false;
1278
1279   if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
1280     return false;
1281
1282   return (TREE_INT_CST_HIGH (x) == 0
1283           || TREE_INT_CST_HIGH (x) == -1);
1284 }
1285
1286 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1287    are in a list pointed to by VALS.  */
1288
1289 tree
1290 build_vector (tree type, tree vals)
1291 {
1292   tree v = make_node (VECTOR_CST);
1293   int over = 0;
1294   tree link;
1295
1296   TREE_VECTOR_CST_ELTS (v) = vals;
1297   TREE_TYPE (v) = type;
1298
1299   /* Iterate through elements and check for overflow.  */
1300   for (link = vals; link; link = TREE_CHAIN (link))
1301     {
1302       tree value = TREE_VALUE (link);
1303
1304       /* Don't crash if we get an address constant.  */
1305       if (!CONSTANT_CLASS_P (value))
1306         continue;
1307
1308       over |= TREE_OVERFLOW (value);
1309     }
1310
1311   TREE_OVERFLOW (v) = over;
1312   return v;
1313 }
1314
1315 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1316    are extracted from V, a vector of CONSTRUCTOR_ELT.  */
1317
1318 tree
1319 build_vector_from_ctor (tree type, VEC(constructor_elt,gc) *v)
1320 {
1321   tree list = NULL_TREE;
1322   unsigned HOST_WIDE_INT idx;
1323   tree value;
1324
1325   FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1326     list = tree_cons (NULL_TREE, value, list);
1327   return build_vector (type, nreverse (list));
1328 }
1329
1330 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1331    are in the VEC pointed to by VALS.  */
1332 tree
1333 build_constructor (tree type, VEC(constructor_elt,gc) *vals)
1334 {
1335   tree c = make_node (CONSTRUCTOR);
1336   unsigned int i;
1337   constructor_elt *elt;
1338   bool constant_p = true;
1339
1340   TREE_TYPE (c) = type;
1341   CONSTRUCTOR_ELTS (c) = vals;
1342
1343   for (i = 0; VEC_iterate (constructor_elt, vals, i, elt); i++)
1344     if (!TREE_CONSTANT (elt->value))
1345       {
1346         constant_p = false;
1347         break;
1348       }
1349
1350   TREE_CONSTANT (c) = constant_p;
1351
1352   return c;
1353 }
1354
1355 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1356    INDEX and VALUE.  */
1357 tree
1358 build_constructor_single (tree type, tree index, tree value)
1359 {
1360   VEC(constructor_elt,gc) *v;
1361   constructor_elt *elt;
1362
1363   v = VEC_alloc (constructor_elt, gc, 1);
1364   elt = VEC_quick_push (constructor_elt, v, NULL);
1365   elt->index = index;
1366   elt->value = value;
1367
1368   return build_constructor (type, v);
1369 }
1370
1371
1372 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1373    are in a list pointed to by VALS.  */
1374 tree
1375 build_constructor_from_list (tree type, tree vals)
1376 {
1377   tree t;
1378   VEC(constructor_elt,gc) *v = NULL;
1379
1380   if (vals)
1381     {
1382       v = VEC_alloc (constructor_elt, gc, list_length (vals));
1383       for (t = vals; t; t = TREE_CHAIN (t))
1384         CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1385     }
1386
1387   return build_constructor (type, v);
1388 }
1389
1390 /* Return a new FIXED_CST node whose type is TYPE and value is F.  */
1391
1392 tree
1393 build_fixed (tree type, FIXED_VALUE_TYPE f)
1394 {
1395   tree v;
1396   FIXED_VALUE_TYPE *fp;
1397
1398   v = make_node (FIXED_CST);
1399   fp = GGC_NEW (FIXED_VALUE_TYPE);
1400   memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1401
1402   TREE_TYPE (v) = type;
1403   TREE_FIXED_CST_PTR (v) = fp;
1404   return v;
1405 }
1406
1407 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
1408
1409 tree
1410 build_real (tree type, REAL_VALUE_TYPE d)
1411 {
1412   tree v;
1413   REAL_VALUE_TYPE *dp;
1414   int overflow = 0;
1415
1416   /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1417      Consider doing it via real_convert now.  */
1418
1419   v = make_node (REAL_CST);
1420   dp = GGC_NEW (REAL_VALUE_TYPE);
1421   memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1422
1423   TREE_TYPE (v) = type;
1424   TREE_REAL_CST_PTR (v) = dp;
1425   TREE_OVERFLOW (v) = overflow;
1426   return v;
1427 }
1428
1429 /* Return a new REAL_CST node whose type is TYPE
1430    and whose value is the integer value of the INTEGER_CST node I.  */
1431
1432 REAL_VALUE_TYPE
1433 real_value_from_int_cst (const_tree type, const_tree i)
1434 {
1435   REAL_VALUE_TYPE d;
1436
1437   /* Clear all bits of the real value type so that we can later do
1438      bitwise comparisons to see if two values are the same.  */
1439   memset (&d, 0, sizeof d);
1440
1441   real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1442                      TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1443                      TYPE_UNSIGNED (TREE_TYPE (i)));
1444   return d;
1445 }
1446
1447 /* Given a tree representing an integer constant I, return a tree
1448    representing the same value as a floating-point constant of type TYPE.  */
1449
1450 tree
1451 build_real_from_int_cst (tree type, const_tree i)
1452 {
1453   tree v;
1454   int overflow = TREE_OVERFLOW (i);
1455
1456   v = build_real (type, real_value_from_int_cst (type, i));
1457
1458   TREE_OVERFLOW (v) |= overflow;
1459   return v;
1460 }
1461
1462 /* Return a newly constructed STRING_CST node whose value is
1463    the LEN characters at STR.
1464    The TREE_TYPE is not initialized.  */
1465
1466 tree
1467 build_string (int len, const char *str)
1468 {
1469   tree s;
1470   size_t length;
1471
1472   /* Do not waste bytes provided by padding of struct tree_string.  */
1473   length = len + offsetof (struct tree_string, str) + 1;
1474
1475 #ifdef GATHER_STATISTICS
1476   tree_node_counts[(int) c_kind]++;
1477   tree_node_sizes[(int) c_kind] += length;
1478 #endif
1479
1480   s = ggc_alloc_tree (length);
1481
1482   memset (s, 0, sizeof (struct tree_common));
1483   TREE_SET_CODE (s, STRING_CST);
1484   TREE_CONSTANT (s) = 1;
1485   TREE_STRING_LENGTH (s) = len;
1486   memcpy (s->string.str, str, len);
1487   s->string.str[len] = '\0';
1488
1489   return s;
1490 }
1491
1492 /* Return a newly constructed COMPLEX_CST node whose value is
1493    specified by the real and imaginary parts REAL and IMAG.
1494    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
1495    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
1496
1497 tree
1498 build_complex (tree type, tree real, tree imag)
1499 {
1500   tree t = make_node (COMPLEX_CST);
1501
1502   TREE_REALPART (t) = real;
1503   TREE_IMAGPART (t) = imag;
1504   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1505   TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1506   return t;
1507 }
1508
1509 /* Return a constant of arithmetic type TYPE which is the
1510    multiplicative identity of the set TYPE.  */
1511
1512 tree
1513 build_one_cst (tree type)
1514 {
1515   switch (TREE_CODE (type))
1516     {
1517     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1518     case POINTER_TYPE: case REFERENCE_TYPE:
1519     case OFFSET_TYPE:
1520       return build_int_cst (type, 1);
1521
1522     case REAL_TYPE:
1523       return build_real (type, dconst1);
1524
1525     case FIXED_POINT_TYPE:
1526       /* We can only generate 1 for accum types.  */
1527       gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1528       return build_fixed (type, FCONST1(TYPE_MODE (type)));
1529
1530     case VECTOR_TYPE:
1531       {
1532         tree scalar, cst;
1533         int i;
1534
1535         scalar = build_one_cst (TREE_TYPE (type));
1536
1537         /* Create 'vect_cst_ = {cst,cst,...,cst}'  */
1538         cst = NULL_TREE;
1539         for (i = TYPE_VECTOR_SUBPARTS (type); --i >= 0; )
1540           cst = tree_cons (NULL_TREE, scalar, cst);
1541
1542         return build_vector (type, cst);
1543       }
1544
1545     case COMPLEX_TYPE:
1546       return build_complex (type,
1547                             build_one_cst (TREE_TYPE (type)),
1548                             fold_convert (TREE_TYPE (type), integer_zero_node));
1549
1550     default:
1551       gcc_unreachable ();
1552     }
1553 }
1554
1555 /* Build a BINFO with LEN language slots.  */
1556
1557 tree
1558 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1559 {
1560   tree t;
1561   size_t length = (offsetof (struct tree_binfo, base_binfos)
1562                    + VEC_embedded_size (tree, base_binfos));
1563
1564 #ifdef GATHER_STATISTICS
1565   tree_node_counts[(int) binfo_kind]++;
1566   tree_node_sizes[(int) binfo_kind] += length;
1567 #endif
1568
1569   t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
1570
1571   memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1572
1573   TREE_SET_CODE (t, TREE_BINFO);
1574
1575   VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
1576
1577   return t;
1578 }
1579
1580
1581 /* Build a newly constructed TREE_VEC node of length LEN.  */
1582
1583 tree
1584 make_tree_vec_stat (int len MEM_STAT_DECL)
1585 {
1586   tree t;
1587   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1588
1589 #ifdef GATHER_STATISTICS
1590   tree_node_counts[(int) vec_kind]++;
1591   tree_node_sizes[(int) vec_kind] += length;
1592 #endif
1593
1594   t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
1595
1596   memset (t, 0, length);
1597
1598   TREE_SET_CODE (t, TREE_VEC);
1599   TREE_VEC_LENGTH (t) = len;
1600
1601   return t;
1602 }
1603 \f
1604 /* Return 1 if EXPR is the integer constant zero or a complex constant
1605    of zero.  */
1606
1607 int
1608 integer_zerop (const_tree expr)
1609 {
1610   STRIP_NOPS (expr);
1611
1612   return ((TREE_CODE (expr) == INTEGER_CST
1613            && TREE_INT_CST_LOW (expr) == 0
1614            && TREE_INT_CST_HIGH (expr) == 0)
1615           || (TREE_CODE (expr) == COMPLEX_CST
1616               && integer_zerop (TREE_REALPART (expr))
1617               && integer_zerop (TREE_IMAGPART (expr))));
1618 }
1619
1620 /* Return 1 if EXPR is the integer constant one or the corresponding
1621    complex constant.  */
1622
1623 int
1624 integer_onep (const_tree expr)
1625 {
1626   STRIP_NOPS (expr);
1627
1628   return ((TREE_CODE (expr) == INTEGER_CST
1629            && TREE_INT_CST_LOW (expr) == 1
1630            && TREE_INT_CST_HIGH (expr) == 0)
1631           || (TREE_CODE (expr) == COMPLEX_CST
1632               && integer_onep (TREE_REALPART (expr))
1633               && integer_zerop (TREE_IMAGPART (expr))));
1634 }
1635
1636 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1637    it contains.  Likewise for the corresponding complex constant.  */
1638
1639 int
1640 integer_all_onesp (const_tree expr)
1641 {
1642   int prec;
1643   int uns;
1644
1645   STRIP_NOPS (expr);
1646
1647   if (TREE_CODE (expr) == COMPLEX_CST
1648       && integer_all_onesp (TREE_REALPART (expr))
1649       && integer_zerop (TREE_IMAGPART (expr)))
1650     return 1;
1651
1652   else if (TREE_CODE (expr) != INTEGER_CST)
1653     return 0;
1654
1655   uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1656   if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1657       && TREE_INT_CST_HIGH (expr) == -1)
1658     return 1;
1659   if (!uns)
1660     return 0;
1661
1662   /* Note that using TYPE_PRECISION here is wrong.  We care about the
1663      actual bits, not the (arbitrary) range of the type.  */
1664   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1665   if (prec >= HOST_BITS_PER_WIDE_INT)
1666     {
1667       HOST_WIDE_INT high_value;
1668       int shift_amount;
1669
1670       shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1671
1672       /* Can not handle precisions greater than twice the host int size.  */
1673       gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
1674       if (shift_amount == HOST_BITS_PER_WIDE_INT)
1675         /* Shifting by the host word size is undefined according to the ANSI
1676            standard, so we must handle this as a special case.  */
1677         high_value = -1;
1678       else
1679         high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1680
1681       return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1682               && TREE_INT_CST_HIGH (expr) == high_value);
1683     }
1684   else
1685     return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1686 }
1687
1688 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1689    one bit on).  */
1690
1691 int
1692 integer_pow2p (const_tree expr)
1693 {
1694   int prec;
1695   HOST_WIDE_INT high, low;
1696
1697   STRIP_NOPS (expr);
1698
1699   if (TREE_CODE (expr) == COMPLEX_CST
1700       && integer_pow2p (TREE_REALPART (expr))
1701       && integer_zerop (TREE_IMAGPART (expr)))
1702     return 1;
1703
1704   if (TREE_CODE (expr) != INTEGER_CST)
1705     return 0;
1706
1707   prec = TYPE_PRECISION (TREE_TYPE (expr));
1708   high = TREE_INT_CST_HIGH (expr);
1709   low = TREE_INT_CST_LOW (expr);
1710
1711   /* First clear all bits that are beyond the type's precision in case
1712      we've been sign extended.  */
1713
1714   if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1715     ;
1716   else if (prec > HOST_BITS_PER_WIDE_INT)
1717     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1718   else
1719     {
1720       high = 0;
1721       if (prec < HOST_BITS_PER_WIDE_INT)
1722         low &= ~((HOST_WIDE_INT) (-1) << prec);
1723     }
1724
1725   if (high == 0 && low == 0)
1726     return 0;
1727
1728   return ((high == 0 && (low & (low - 1)) == 0)
1729           || (low == 0 && (high & (high - 1)) == 0));
1730 }
1731
1732 /* Return 1 if EXPR is an integer constant other than zero or a
1733    complex constant other than zero.  */
1734
1735 int
1736 integer_nonzerop (const_tree expr)
1737 {
1738   STRIP_NOPS (expr);
1739
1740   return ((TREE_CODE (expr) == INTEGER_CST
1741            && (TREE_INT_CST_LOW (expr) != 0
1742                || TREE_INT_CST_HIGH (expr) != 0))
1743           || (TREE_CODE (expr) == COMPLEX_CST
1744               && (integer_nonzerop (TREE_REALPART (expr))
1745                   || integer_nonzerop (TREE_IMAGPART (expr)))));
1746 }
1747
1748 /* Return 1 if EXPR is the fixed-point constant zero.  */
1749
1750 int
1751 fixed_zerop (const_tree expr)
1752 {
1753   return (TREE_CODE (expr) == FIXED_CST
1754           && double_int_zero_p (TREE_FIXED_CST (expr).data));
1755 }
1756
1757 /* Return the power of two represented by a tree node known to be a
1758    power of two.  */
1759
1760 int
1761 tree_log2 (const_tree expr)
1762 {
1763   int prec;
1764   HOST_WIDE_INT high, low;
1765
1766   STRIP_NOPS (expr);
1767
1768   if (TREE_CODE (expr) == COMPLEX_CST)
1769     return tree_log2 (TREE_REALPART (expr));
1770
1771   prec = TYPE_PRECISION (TREE_TYPE (expr));
1772   high = TREE_INT_CST_HIGH (expr);
1773   low = TREE_INT_CST_LOW (expr);
1774
1775   /* First clear all bits that are beyond the type's precision in case
1776      we've been sign extended.  */
1777
1778   if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1779     ;
1780   else if (prec > HOST_BITS_PER_WIDE_INT)
1781     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1782   else
1783     {
1784       high = 0;
1785       if (prec < HOST_BITS_PER_WIDE_INT)
1786         low &= ~((HOST_WIDE_INT) (-1) << prec);
1787     }
1788
1789   return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1790           : exact_log2 (low));
1791 }
1792
1793 /* Similar, but return the largest integer Y such that 2 ** Y is less
1794    than or equal to EXPR.  */
1795
1796 int
1797 tree_floor_log2 (const_tree expr)
1798 {
1799   int prec;
1800   HOST_WIDE_INT high, low;
1801
1802   STRIP_NOPS (expr);
1803
1804   if (TREE_CODE (expr) == COMPLEX_CST)
1805     return tree_log2 (TREE_REALPART (expr));
1806
1807   prec = TYPE_PRECISION (TREE_TYPE (expr));
1808   high = TREE_INT_CST_HIGH (expr);
1809   low = TREE_INT_CST_LOW (expr);
1810
1811   /* First clear all bits that are beyond the type's precision in case
1812      we've been sign extended.  Ignore if type's precision hasn't been set
1813      since what we are doing is setting it.  */
1814
1815   if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1816     ;
1817   else if (prec > HOST_BITS_PER_WIDE_INT)
1818     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1819   else
1820     {
1821       high = 0;
1822       if (prec < HOST_BITS_PER_WIDE_INT)
1823         low &= ~((HOST_WIDE_INT) (-1) << prec);
1824     }
1825
1826   return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1827           : floor_log2 (low));
1828 }
1829
1830 /* Return 1 if EXPR is the real constant zero.  Trailing zeroes matter for
1831    decimal float constants, so don't return 1 for them.  */
1832
1833 int
1834 real_zerop (const_tree expr)
1835 {
1836   STRIP_NOPS (expr);
1837
1838   return ((TREE_CODE (expr) == REAL_CST
1839            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0)
1840            && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1841           || (TREE_CODE (expr) == COMPLEX_CST
1842               && real_zerop (TREE_REALPART (expr))
1843               && real_zerop (TREE_IMAGPART (expr))));
1844 }
1845
1846 /* Return 1 if EXPR is the real constant one in real or complex form.
1847    Trailing zeroes matter for decimal float constants, so don't return
1848    1 for them.  */
1849
1850 int
1851 real_onep (const_tree expr)
1852 {
1853   STRIP_NOPS (expr);
1854
1855   return ((TREE_CODE (expr) == REAL_CST
1856            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1)
1857            && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1858           || (TREE_CODE (expr) == COMPLEX_CST
1859               && real_onep (TREE_REALPART (expr))
1860               && real_zerop (TREE_IMAGPART (expr))));
1861 }
1862
1863 /* Return 1 if EXPR is the real constant two.  Trailing zeroes matter
1864    for decimal float constants, so don't return 1 for them.  */
1865
1866 int
1867 real_twop (const_tree expr)
1868 {
1869   STRIP_NOPS (expr);
1870
1871   return ((TREE_CODE (expr) == REAL_CST
1872            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2)
1873            && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1874           || (TREE_CODE (expr) == COMPLEX_CST
1875               && real_twop (TREE_REALPART (expr))
1876               && real_zerop (TREE_IMAGPART (expr))));
1877 }
1878
1879 /* Return 1 if EXPR is the real constant minus one.  Trailing zeroes
1880    matter for decimal float constants, so don't return 1 for them.  */
1881
1882 int
1883 real_minus_onep (const_tree expr)
1884 {
1885   STRIP_NOPS (expr);
1886
1887   return ((TREE_CODE (expr) == REAL_CST
1888            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1)
1889            && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))))
1890           || (TREE_CODE (expr) == COMPLEX_CST
1891               && real_minus_onep (TREE_REALPART (expr))
1892               && real_zerop (TREE_IMAGPART (expr))));
1893 }
1894
1895 /* Nonzero if EXP is a constant or a cast of a constant.  */
1896
1897 int
1898 really_constant_p (const_tree exp)
1899 {
1900   /* This is not quite the same as STRIP_NOPS.  It does more.  */
1901   while (CONVERT_EXPR_P (exp)
1902          || TREE_CODE (exp) == NON_LVALUE_EXPR)
1903     exp = TREE_OPERAND (exp, 0);
1904   return TREE_CONSTANT (exp);
1905 }
1906 \f
1907 /* Return first list element whose TREE_VALUE is ELEM.
1908    Return 0 if ELEM is not in LIST.  */
1909
1910 tree
1911 value_member (tree elem, tree list)
1912 {
1913   while (list)
1914     {
1915       if (elem == TREE_VALUE (list))
1916         return list;
1917       list = TREE_CHAIN (list);
1918     }
1919   return NULL_TREE;
1920 }
1921
1922 /* Return first list element whose TREE_PURPOSE is ELEM.
1923    Return 0 if ELEM is not in LIST.  */
1924
1925 tree
1926 purpose_member (const_tree elem, tree list)
1927 {
1928   while (list)
1929     {
1930       if (elem == TREE_PURPOSE (list))
1931         return list;
1932       list = TREE_CHAIN (list);
1933     }
1934   return NULL_TREE;
1935 }
1936
1937 /* Returns element number IDX (zero-origin) of chain CHAIN, or
1938    NULL_TREE.  */
1939
1940 tree
1941 chain_index (int idx, tree chain)
1942 {
1943   for (; chain && idx > 0; --idx)
1944     chain = TREE_CHAIN (chain);
1945   return chain;
1946 }
1947
1948 /* Return nonzero if ELEM is part of the chain CHAIN.  */
1949
1950 int
1951 chain_member (const_tree elem, const_tree chain)
1952 {
1953   while (chain)
1954     {
1955       if (elem == chain)
1956         return 1;
1957       chain = TREE_CHAIN (chain);
1958     }
1959
1960   return 0;
1961 }
1962
1963 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1964    We expect a null pointer to mark the end of the chain.
1965    This is the Lisp primitive `length'.  */
1966
1967 int
1968 list_length (const_tree t)
1969 {
1970   const_tree p = t;
1971 #ifdef ENABLE_TREE_CHECKING
1972   const_tree q = t;
1973 #endif
1974   int len = 0;
1975
1976   while (p)
1977     {
1978       p = TREE_CHAIN (p);
1979 #ifdef ENABLE_TREE_CHECKING
1980       if (len % 2)
1981         q = TREE_CHAIN (q);
1982       gcc_assert (p != q);
1983 #endif
1984       len++;
1985     }
1986
1987   return len;
1988 }
1989
1990 /* Returns the number of FIELD_DECLs in TYPE.  */
1991
1992 int
1993 fields_length (const_tree type)
1994 {
1995   tree t = TYPE_FIELDS (type);
1996   int count = 0;
1997
1998   for (; t; t = TREE_CHAIN (t))
1999     if (TREE_CODE (t) == FIELD_DECL)
2000       ++count;
2001
2002   return count;
2003 }
2004
2005 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2006    UNION_TYPE TYPE, or NULL_TREE if none.  */
2007
2008 tree
2009 first_field (const_tree type)
2010 {
2011   tree t = TYPE_FIELDS (type);
2012   while (t && TREE_CODE (t) != FIELD_DECL)
2013     t = TREE_CHAIN (t);
2014   return t;
2015 }
2016
2017 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2018    by modifying the last node in chain 1 to point to chain 2.
2019    This is the Lisp primitive `nconc'.  */
2020
2021 tree
2022 chainon (tree op1, tree op2)
2023 {
2024   tree t1;
2025
2026   if (!op1)
2027     return op2;
2028   if (!op2)
2029     return op1;
2030
2031   for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2032     continue;
2033   TREE_CHAIN (t1) = op2;
2034
2035 #ifdef ENABLE_TREE_CHECKING
2036   {
2037     tree t2;
2038     for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2039       gcc_assert (t2 != t1);
2040   }
2041 #endif
2042
2043   return op1;
2044 }
2045
2046 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
2047
2048 tree
2049 tree_last (tree chain)
2050 {
2051   tree next;
2052   if (chain)
2053     while ((next = TREE_CHAIN (chain)))
2054       chain = next;
2055   return chain;
2056 }
2057
2058 /* Reverse the order of elements in the chain T,
2059    and return the new head of the chain (old last element).  */
2060
2061 tree
2062 nreverse (tree t)
2063 {
2064   tree prev = 0, decl, next;
2065   for (decl = t; decl; decl = next)
2066     {
2067       next = TREE_CHAIN (decl);
2068       TREE_CHAIN (decl) = prev;
2069       prev = decl;
2070     }
2071   return prev;
2072 }
2073 \f
2074 /* Return a newly created TREE_LIST node whose
2075    purpose and value fields are PARM and VALUE.  */
2076
2077 tree
2078 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2079 {
2080   tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2081   TREE_PURPOSE (t) = parm;
2082   TREE_VALUE (t) = value;
2083   return t;
2084 }
2085
2086 /* Build a chain of TREE_LIST nodes from a vector.  */
2087
2088 tree
2089 build_tree_list_vec_stat (const VEC(tree,gc) *vec MEM_STAT_DECL)
2090 {
2091   tree ret = NULL_TREE;
2092   tree *pp = &ret;
2093   unsigned int i;
2094   tree t;
2095   for (i = 0; VEC_iterate (tree, vec, i, t); ++i)
2096     {
2097       *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2098       pp = &TREE_CHAIN (*pp);
2099     }
2100   return ret;
2101 }
2102
2103 /* Return a newly created TREE_LIST node whose
2104    purpose and value fields are PURPOSE and VALUE
2105    and whose TREE_CHAIN is CHAIN.  */
2106
2107 tree
2108 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2109 {
2110   tree node;
2111
2112   node = (tree) ggc_alloc_zone_pass_stat (sizeof (struct tree_list), &tree_zone);
2113
2114   memset (node, 0, sizeof (struct tree_common));
2115
2116 #ifdef GATHER_STATISTICS
2117   tree_node_counts[(int) x_kind]++;
2118   tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
2119 #endif
2120
2121   TREE_SET_CODE (node, TREE_LIST);
2122   TREE_CHAIN (node) = chain;
2123   TREE_PURPOSE (node) = purpose;
2124   TREE_VALUE (node) = value;
2125   return node;
2126 }
2127
2128 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2129    trees.  */
2130
2131 VEC(tree,gc) *
2132 ctor_to_vec (tree ctor)
2133 {
2134   VEC(tree, gc) *vec = VEC_alloc (tree, gc, CONSTRUCTOR_NELTS (ctor));
2135   unsigned int ix;
2136   tree val;
2137
2138   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2139     VEC_quick_push (tree, vec, val);
2140
2141   return vec;
2142 }
2143 \f
2144 /* Return the size nominally occupied by an object of type TYPE
2145    when it resides in memory.  The value is measured in units of bytes,
2146    and its data type is that normally used for type sizes
2147    (which is the first type created by make_signed_type or
2148    make_unsigned_type).  */
2149
2150 tree
2151 size_in_bytes (const_tree type)
2152 {
2153   tree t;
2154
2155   if (type == error_mark_node)
2156     return integer_zero_node;
2157
2158   type = TYPE_MAIN_VARIANT (type);
2159   t = TYPE_SIZE_UNIT (type);
2160
2161   if (t == 0)
2162     {
2163       lang_hooks.types.incomplete_type_error (NULL_TREE, type);
2164       return size_zero_node;
2165     }
2166
2167   return t;
2168 }
2169
2170 /* Return the size of TYPE (in bytes) as a wide integer
2171    or return -1 if the size can vary or is larger than an integer.  */
2172
2173 HOST_WIDE_INT
2174 int_size_in_bytes (const_tree type)
2175 {
2176   tree t;
2177
2178   if (type == error_mark_node)
2179     return 0;
2180
2181   type = TYPE_MAIN_VARIANT (type);
2182   t = TYPE_SIZE_UNIT (type);
2183   if (t == 0
2184       || TREE_CODE (t) != INTEGER_CST
2185       || TREE_INT_CST_HIGH (t) != 0
2186       /* If the result would appear negative, it's too big to represent.  */
2187       || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
2188     return -1;
2189
2190   return TREE_INT_CST_LOW (t);
2191 }
2192
2193 /* Return the maximum size of TYPE (in bytes) as a wide integer
2194    or return -1 if the size can vary or is larger than an integer.  */
2195
2196 HOST_WIDE_INT
2197 max_int_size_in_bytes (const_tree type)
2198 {
2199   HOST_WIDE_INT size = -1;
2200   tree size_tree;
2201
2202   /* If this is an array type, check for a possible MAX_SIZE attached.  */
2203
2204   if (TREE_CODE (type) == ARRAY_TYPE)
2205     {
2206       size_tree = TYPE_ARRAY_MAX_SIZE (type);
2207
2208       if (size_tree && host_integerp (size_tree, 1))
2209         size = tree_low_cst (size_tree, 1);
2210     }
2211
2212   /* If we still haven't been able to get a size, see if the language
2213      can compute a maximum size.  */
2214
2215   if (size == -1)
2216     {
2217       size_tree = lang_hooks.types.max_size (type);
2218
2219       if (size_tree && host_integerp (size_tree, 1))
2220         size = tree_low_cst (size_tree, 1);
2221     }
2222
2223   return size;
2224 }
2225
2226 /* Returns a tree for the size of EXP in bytes.  */
2227
2228 tree
2229 tree_expr_size (const_tree exp)
2230 {
2231   if (DECL_P (exp)
2232       && DECL_SIZE_UNIT (exp) != 0)
2233     return DECL_SIZE_UNIT (exp);
2234   else
2235     return size_in_bytes (TREE_TYPE (exp));
2236 }
2237 \f
2238 /* Return the bit position of FIELD, in bits from the start of the record.
2239    This is a tree of type bitsizetype.  */
2240
2241 tree
2242 bit_position (const_tree field)
2243 {
2244   return bit_from_pos (DECL_FIELD_OFFSET (field),
2245                        DECL_FIELD_BIT_OFFSET (field));
2246 }
2247
2248 /* Likewise, but return as an integer.  It must be representable in
2249    that way (since it could be a signed value, we don't have the
2250    option of returning -1 like int_size_in_byte can.  */
2251
2252 HOST_WIDE_INT
2253 int_bit_position (const_tree field)
2254 {
2255   return tree_low_cst (bit_position (field), 0);
2256 }
2257 \f
2258 /* Return the byte position of FIELD, in bytes from the start of the record.
2259    This is a tree of type sizetype.  */
2260
2261 tree
2262 byte_position (const_tree field)
2263 {
2264   return byte_from_pos (DECL_FIELD_OFFSET (field),
2265                         DECL_FIELD_BIT_OFFSET (field));
2266 }
2267
2268 /* Likewise, but return as an integer.  It must be representable in
2269    that way (since it could be a signed value, we don't have the
2270    option of returning -1 like int_size_in_byte can.  */
2271
2272 HOST_WIDE_INT
2273 int_byte_position (const_tree field)
2274 {
2275   return tree_low_cst (byte_position (field), 0);
2276 }
2277 \f
2278 /* Return the strictest alignment, in bits, that T is known to have.  */
2279
2280 unsigned int
2281 expr_align (const_tree t)
2282 {
2283   unsigned int align0, align1;
2284
2285   switch (TREE_CODE (t))
2286     {
2287     CASE_CONVERT:  case NON_LVALUE_EXPR:
2288       /* If we have conversions, we know that the alignment of the
2289          object must meet each of the alignments of the types.  */
2290       align0 = expr_align (TREE_OPERAND (t, 0));
2291       align1 = TYPE_ALIGN (TREE_TYPE (t));
2292       return MAX (align0, align1);
2293
2294     case SAVE_EXPR:         case COMPOUND_EXPR:       case MODIFY_EXPR:
2295     case INIT_EXPR:         case TARGET_EXPR:         case WITH_CLEANUP_EXPR:
2296     case CLEANUP_POINT_EXPR:
2297       /* These don't change the alignment of an object.  */
2298       return expr_align (TREE_OPERAND (t, 0));
2299
2300     case COND_EXPR:
2301       /* The best we can do is say that the alignment is the least aligned
2302          of the two arms.  */
2303       align0 = expr_align (TREE_OPERAND (t, 1));
2304       align1 = expr_align (TREE_OPERAND (t, 2));
2305       return MIN (align0, align1);
2306
2307       /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
2308          meaningfully, it's always 1.  */
2309     case LABEL_DECL:     case CONST_DECL:
2310     case VAR_DECL:       case PARM_DECL:   case RESULT_DECL:
2311     case FUNCTION_DECL:
2312       gcc_assert (DECL_ALIGN (t) != 0);
2313       return DECL_ALIGN (t);
2314
2315     default:
2316       break;
2317     }
2318
2319   /* Otherwise take the alignment from that of the type.  */
2320   return TYPE_ALIGN (TREE_TYPE (t));
2321 }
2322 \f
2323 /* Return, as a tree node, the number of elements for TYPE (which is an
2324    ARRAY_TYPE) minus one. This counts only elements of the top array.  */
2325
2326 tree
2327 array_type_nelts (const_tree type)
2328 {
2329   tree index_type, min, max;
2330
2331   /* If they did it with unspecified bounds, then we should have already
2332      given an error about it before we got here.  */
2333   if (! TYPE_DOMAIN (type))
2334     return error_mark_node;
2335
2336   index_type = TYPE_DOMAIN (type);
2337   min = TYPE_MIN_VALUE (index_type);
2338   max = TYPE_MAX_VALUE (index_type);
2339
2340   return (integer_zerop (min)
2341           ? max
2342           : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
2343 }
2344 \f
2345 /* If arg is static -- a reference to an object in static storage -- then
2346    return the object.  This is not the same as the C meaning of `static'.
2347    If arg isn't static, return NULL.  */
2348
2349 tree
2350 staticp (tree arg)
2351 {
2352   switch (TREE_CODE (arg))
2353     {
2354     case FUNCTION_DECL:
2355       /* Nested functions are static, even though taking their address will
2356          involve a trampoline as we unnest the nested function and create
2357          the trampoline on the tree level.  */
2358       return arg;
2359
2360     case VAR_DECL:
2361       return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2362               && ! DECL_THREAD_LOCAL_P (arg)
2363               && ! DECL_DLLIMPORT_P (arg)
2364               ? arg : NULL);
2365
2366     case CONST_DECL:
2367       return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2368               ? arg : NULL);
2369
2370     case CONSTRUCTOR:
2371       return TREE_STATIC (arg) ? arg : NULL;
2372
2373     case LABEL_DECL:
2374     case STRING_CST:
2375       return arg;
2376
2377     case COMPONENT_REF:
2378       /* If the thing being referenced is not a field, then it is
2379          something language specific.  */
2380       gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
2381
2382       /* If we are referencing a bitfield, we can't evaluate an
2383          ADDR_EXPR at compile time and so it isn't a constant.  */
2384       if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
2385         return NULL;
2386
2387       return staticp (TREE_OPERAND (arg, 0));
2388
2389     case BIT_FIELD_REF:
2390       return NULL;
2391
2392     case MISALIGNED_INDIRECT_REF:
2393     case ALIGN_INDIRECT_REF:
2394     case INDIRECT_REF:
2395       return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
2396
2397     case ARRAY_REF:
2398     case ARRAY_RANGE_REF:
2399       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2400           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2401         return staticp (TREE_OPERAND (arg, 0));
2402       else
2403         return NULL;
2404
2405     case COMPOUND_LITERAL_EXPR:
2406       return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
2407
2408     default:
2409       return NULL;
2410     }
2411 }
2412
2413 \f
2414
2415
2416 /* Return whether OP is a DECL whose address is function-invariant.  */
2417
2418 bool
2419 decl_address_invariant_p (const_tree op)
2420 {
2421   /* The conditions below are slightly less strict than the one in
2422      staticp.  */
2423
2424   switch (TREE_CODE (op))
2425     {
2426     case PARM_DECL:
2427     case RESULT_DECL:
2428     case LABEL_DECL:
2429     case FUNCTION_DECL:
2430       return true;
2431
2432     case VAR_DECL:
2433       if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
2434            && !DECL_DLLIMPORT_P (op))
2435           || DECL_THREAD_LOCAL_P (op)
2436           || DECL_CONTEXT (op) == current_function_decl
2437           || decl_function_context (op) == current_function_decl)
2438         return true;
2439       break;
2440
2441     case CONST_DECL:
2442       if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
2443           || decl_function_context (op) == current_function_decl)
2444         return true;
2445       break;
2446
2447     default:
2448       break;
2449     }
2450
2451   return false;
2452 }
2453
2454 /* Return whether OP is a DECL whose address is interprocedural-invariant.  */
2455
2456 bool
2457 decl_address_ip_invariant_p (const_tree op)
2458 {
2459   /* The conditions below are slightly less strict than the one in
2460      staticp.  */
2461
2462   switch (TREE_CODE (op))
2463     {
2464     case LABEL_DECL:
2465     case FUNCTION_DECL:
2466     case STRING_CST:
2467       return true;
2468
2469     case VAR_DECL:
2470       if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
2471            && !DECL_DLLIMPORT_P (op))
2472           || DECL_THREAD_LOCAL_P (op))
2473         return true;
2474       break;
2475
2476     case CONST_DECL:
2477       if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
2478         return true;
2479       break;
2480
2481     default:
2482       break;
2483     }
2484
2485   return false;
2486 }
2487
2488
2489 /* Return true if T is function-invariant (internal function, does
2490    not handle arithmetic; that's handled in skip_simple_arithmetic and
2491    tree_invariant_p).  */
2492
2493 static bool tree_invariant_p (tree t);
2494
2495 static bool
2496 tree_invariant_p_1 (tree t)
2497 {
2498   tree op;
2499
2500   if (TREE_CONSTANT (t)
2501       || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
2502     return true;
2503
2504   switch (TREE_CODE (t))
2505     {
2506     case SAVE_EXPR:
2507       return true;
2508
2509     case ADDR_EXPR:
2510       op = TREE_OPERAND (t, 0);
2511       while (handled_component_p (op))
2512         {
2513           switch (TREE_CODE (op))
2514             {
2515             case ARRAY_REF:
2516             case ARRAY_RANGE_REF:
2517               if (!tree_invariant_p (TREE_OPERAND (op, 1))
2518                   || TREE_OPERAND (op, 2) != NULL_TREE
2519                   || TREE_OPERAND (op, 3) != NULL_TREE)
2520                 return false;
2521               break;
2522
2523             case COMPONENT_REF:
2524               if (TREE_OPERAND (op, 2) != NULL_TREE)
2525                 return false;
2526               break;
2527
2528             default:;
2529             }
2530           op = TREE_OPERAND (op, 0);
2531         }
2532
2533       return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
2534
2535     default:
2536       break;
2537     }
2538
2539   return false;
2540 }
2541
2542 /* Return true if T is function-invariant.  */
2543
2544 static bool
2545 tree_invariant_p (tree t)
2546 {
2547   tree inner = skip_simple_arithmetic (t);
2548   return tree_invariant_p_1 (inner);
2549 }
2550
2551 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2552    Do this to any expression which may be used in more than one place,
2553    but must be evaluated only once.
2554
2555    Normally, expand_expr would reevaluate the expression each time.
2556    Calling save_expr produces something that is evaluated and recorded
2557    the first time expand_expr is called on it.  Subsequent calls to
2558    expand_expr just reuse the recorded value.
2559
2560    The call to expand_expr that generates code that actually computes
2561    the value is the first call *at compile time*.  Subsequent calls
2562    *at compile time* generate code to use the saved value.
2563    This produces correct result provided that *at run time* control
2564    always flows through the insns made by the first expand_expr
2565    before reaching the other places where the save_expr was evaluated.
2566    You, the caller of save_expr, must make sure this is so.
2567
2568    Constants, and certain read-only nodes, are returned with no
2569    SAVE_EXPR because that is safe.  Expressions containing placeholders
2570    are not touched; see tree.def for an explanation of what these
2571    are used for.  */
2572
2573 tree
2574 save_expr (tree expr)
2575 {
2576   tree t = fold (expr);
2577   tree inner;
2578
2579   /* If the tree evaluates to a constant, then we don't want to hide that
2580      fact (i.e. this allows further folding, and direct checks for constants).
2581      However, a read-only object that has side effects cannot be bypassed.
2582      Since it is no problem to reevaluate literals, we just return the
2583      literal node.  */
2584   inner = skip_simple_arithmetic (t);
2585   if (TREE_CODE (inner) == ERROR_MARK)
2586     return inner;
2587
2588   if (tree_invariant_p_1 (inner))
2589     return t;
2590
2591   /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2592      it means that the size or offset of some field of an object depends on
2593      the value within another field.
2594
2595      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2596      and some variable since it would then need to be both evaluated once and
2597      evaluated more than once.  Front-ends must assure this case cannot
2598      happen by surrounding any such subexpressions in their own SAVE_EXPR
2599      and forcing evaluation at the proper time.  */
2600   if (contains_placeholder_p (inner))
2601     return t;
2602
2603   t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
2604   SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
2605
2606   /* This expression might be placed ahead of a jump to ensure that the
2607      value was computed on both sides of the jump.  So make sure it isn't
2608      eliminated as dead.  */
2609   TREE_SIDE_EFFECTS (t) = 1;
2610   return t;
2611 }
2612
2613 /* Look inside EXPR and into any simple arithmetic operations.  Return
2614    the innermost non-arithmetic node.  */
2615
2616 tree
2617 skip_simple_arithmetic (tree expr)
2618 {
2619   tree inner;
2620
2621   /* We don't care about whether this can be used as an lvalue in this
2622      context.  */
2623   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
2624     expr = TREE_OPERAND (expr, 0);
2625
2626   /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
2627      a constant, it will be more efficient to not make another SAVE_EXPR since
2628      it will allow better simplification and GCSE will be able to merge the
2629      computations if they actually occur.  */
2630   inner = expr;
2631   while (1)
2632     {
2633       if (UNARY_CLASS_P (inner))
2634         inner = TREE_OPERAND (inner, 0);
2635       else if (BINARY_CLASS_P (inner))
2636         {
2637           if (tree_invariant_p (TREE_OPERAND (inner, 1)))
2638             inner = TREE_OPERAND (inner, 0);
2639           else if (tree_invariant_p (TREE_OPERAND (inner, 0)))
2640             inner = TREE_OPERAND (inner, 1);
2641           else
2642             break;
2643         }
2644       else
2645         break;
2646     }
2647
2648   return inner;
2649 }
2650
2651
2652 /* Return which tree structure is used by T.  */
2653
2654 enum tree_node_structure_enum
2655 tree_node_structure (const_tree t)
2656 {
2657   const enum tree_code code = TREE_CODE (t);
2658   return tree_node_structure_for_code (code);
2659 }
2660
2661 /* Set various status flags when building a CALL_EXPR object T.  */
2662
2663 static void
2664 process_call_operands (tree t)
2665 {
2666   bool side_effects = TREE_SIDE_EFFECTS (t);
2667   bool read_only = false;
2668   int i = call_expr_flags (t);
2669
2670   /* Calls have side-effects, except those to const or pure functions.  */
2671   if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
2672     side_effects = true;
2673   /* Propagate TREE_READONLY of arguments for const functions.  */
2674   if (i & ECF_CONST)
2675     read_only = true;
2676
2677   if (!side_effects || read_only)
2678     for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
2679       {
2680         tree op = TREE_OPERAND (t, i);
2681         if (op && TREE_SIDE_EFFECTS (op))
2682           side_effects = true;
2683         if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
2684           read_only = false;
2685       }
2686
2687   TREE_SIDE_EFFECTS (t) = side_effects;
2688   TREE_READONLY (t) = read_only;
2689 }
2690 \f
2691 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2692    or offset that depends on a field within a record.  */
2693
2694 bool
2695 contains_placeholder_p (const_tree exp)
2696 {
2697   enum tree_code code;
2698
2699   if (!exp)
2700     return 0;
2701
2702   code = TREE_CODE (exp);
2703   if (code == PLACEHOLDER_EXPR)
2704     return 1;
2705
2706   switch (TREE_CODE_CLASS (code))
2707     {
2708     case tcc_reference:
2709       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2710          position computations since they will be converted into a
2711          WITH_RECORD_EXPR involving the reference, which will assume
2712          here will be valid.  */
2713       return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2714
2715     case tcc_exceptional:
2716       if (code == TREE_LIST)
2717         return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
2718                 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
2719       break;
2720
2721     case tcc_unary:
2722     case tcc_binary:
2723     case tcc_comparison:
2724     case tcc_expression:
2725       switch (code)
2726         {
2727         case COMPOUND_EXPR:
2728           /* Ignoring the first operand isn't quite right, but works best.  */
2729           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2730
2731         case COND_EXPR:
2732           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2733                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
2734                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
2735
2736         case SAVE_EXPR:
2737           /* The save_expr function never wraps anything containing
2738              a PLACEHOLDER_EXPR. */
2739           return 0;
2740
2741         default:
2742           break;
2743         }
2744
2745       switch (TREE_CODE_LENGTH (code))
2746         {
2747         case 1:
2748           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2749         case 2:
2750           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2751                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
2752         default:
2753           return 0;
2754         }
2755
2756     case tcc_vl_exp:
2757       switch (code)
2758         {
2759         case CALL_EXPR:
2760           {
2761             const_tree arg;
2762             const_call_expr_arg_iterator iter;
2763             FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
2764               if (CONTAINS_PLACEHOLDER_P (arg))
2765                 return 1;
2766             return 0;
2767           }
2768         default:
2769           return 0;
2770         }
2771
2772     default:
2773       return 0;
2774     }
2775   return 0;
2776 }
2777
2778 /* Return true if any part of the computation of TYPE involves a
2779    PLACEHOLDER_EXPR.  This includes size, bounds, qualifiers
2780    (for QUAL_UNION_TYPE) and field positions.  */
2781
2782 static bool
2783 type_contains_placeholder_1 (const_tree type)
2784 {
2785   /* If the size contains a placeholder or the parent type (component type in
2786      the case of arrays) type involves a placeholder, this type does.  */
2787   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2788       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2789       || (TREE_TYPE (type) != 0
2790           && type_contains_placeholder_p (TREE_TYPE (type))))
2791     return true;
2792
2793   /* Now do type-specific checks.  Note that the last part of the check above
2794      greatly limits what we have to do below.  */
2795   switch (TREE_CODE (type))
2796     {
2797     case VOID_TYPE:
2798     case COMPLEX_TYPE:
2799     case ENUMERAL_TYPE:
2800     case BOOLEAN_TYPE:
2801     case POINTER_TYPE:
2802     case OFFSET_TYPE:
2803     case REFERENCE_TYPE:
2804     case METHOD_TYPE:
2805     case FUNCTION_TYPE:
2806     case VECTOR_TYPE:
2807       return false;
2808
2809     case INTEGER_TYPE:
2810     case REAL_TYPE:
2811     case FIXED_POINT_TYPE:
2812       /* Here we just check the bounds.  */
2813       return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2814               || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2815
2816     case ARRAY_TYPE:
2817       /* We're already checked the component type (TREE_TYPE), so just check
2818          the index type.  */
2819       return type_contains_placeholder_p (TYPE_DOMAIN (type));
2820
2821     case RECORD_TYPE:
2822     case UNION_TYPE:
2823     case QUAL_UNION_TYPE:
2824       {
2825         tree field;
2826
2827         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2828           if (TREE_CODE (field) == FIELD_DECL
2829               && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2830                   || (TREE_CODE (type) == QUAL_UNION_TYPE
2831                       && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2832                   || type_contains_placeholder_p (TREE_TYPE (field))))
2833             return true;
2834
2835         return false;
2836       }
2837
2838     default:
2839       gcc_unreachable ();
2840     }
2841 }
2842
2843 bool
2844 type_contains_placeholder_p (tree type)
2845 {
2846   bool result;
2847
2848   /* If the contains_placeholder_bits field has been initialized,
2849      then we know the answer.  */
2850   if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
2851     return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
2852
2853   /* Indicate that we've seen this type node, and the answer is false.
2854      This is what we want to return if we run into recursion via fields.  */
2855   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
2856
2857   /* Compute the real value.  */
2858   result = type_contains_placeholder_1 (type);
2859
2860   /* Store the real value.  */
2861   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
2862
2863   return result;
2864 }
2865 \f
2866 /* Push tree EXP onto vector QUEUE if it is not already present.  */
2867
2868 static void
2869 push_without_duplicates (tree exp, VEC (tree, heap) **queue)
2870 {
2871   unsigned int i;
2872   tree iter;
2873
2874   for (i = 0; VEC_iterate (tree, *queue, i, iter); i++)
2875     if (simple_cst_equal (iter, exp) == 1)
2876       break;
2877
2878   if (!iter)
2879     VEC_safe_push (tree, heap, *queue, exp);
2880 }
2881
2882 /* Given a tree EXP, find all occurences of references to fields
2883    in a PLACEHOLDER_EXPR and place them in vector REFS without
2884    duplicates.  Also record VAR_DECLs and CONST_DECLs.  Note that
2885    we assume here that EXP contains only arithmetic expressions
2886    or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
2887    argument list.  */
2888
2889 void
2890 find_placeholder_in_expr (tree exp, VEC (tree, heap) **refs)
2891 {
2892   enum tree_code code = TREE_CODE (exp);
2893   tree inner;
2894   int i;
2895
2896   /* We handle TREE_LIST and COMPONENT_REF separately.  */
2897   if (code == TREE_LIST)
2898     {
2899       FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
2900       FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
2901     }
2902   else if (code == COMPONENT_REF)
2903     {
2904       for (inner = TREE_OPERAND (exp, 0);
2905            REFERENCE_CLASS_P (inner);
2906            inner = TREE_OPERAND (inner, 0))
2907         ;
2908
2909       if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
2910         push_without_duplicates (exp, refs);
2911       else
2912         FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
2913    }
2914   else
2915     switch (TREE_CODE_CLASS (code))
2916       {
2917       case tcc_constant:
2918         break;
2919
2920       case tcc_declaration:
2921         /* Variables allocated to static storage can stay.  */
2922         if (!TREE_STATIC (exp))
2923           push_without_duplicates (exp, refs);
2924         break;
2925
2926       case tcc_expression:
2927         /* This is the pattern built in ada/make_aligning_type.  */
2928         if (code == ADDR_EXPR
2929             && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
2930           {
2931             push_without_duplicates (exp, refs);
2932             break;
2933           }
2934
2935         /* Fall through...  */
2936
2937       case tcc_exceptional:
2938       case tcc_unary:
2939       case tcc_binary:
2940       case tcc_comparison:
2941       case tcc_reference:
2942         for (i = 0; i < TREE_CODE_LENGTH (code); i++)
2943           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
2944         break;
2945
2946       case tcc_vl_exp:
2947         for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
2948           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
2949         break;
2950
2951       default:
2952         gcc_unreachable ();
2953       }
2954 }
2955
2956 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2957    return a tree with all occurrences of references to F in a
2958    PLACEHOLDER_EXPR replaced by R.  Also handle VAR_DECLs and
2959    CONST_DECLs.  Note that we assume here that EXP contains only
2960    arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
2961    occurring only in their argument list.  */
2962
2963 tree
2964 substitute_in_expr (tree exp, tree f, tree r)
2965 {
2966   enum tree_code code = TREE_CODE (exp);
2967   tree op0, op1, op2, op3;
2968   tree new_tree;
2969
2970   /* We handle TREE_LIST and COMPONENT_REF separately.  */
2971   if (code == TREE_LIST)
2972     {
2973       op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
2974       op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
2975       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2976         return exp;
2977
2978       return tree_cons (TREE_PURPOSE (exp), op1, op0);
2979     }
2980   else if (code == COMPONENT_REF)
2981     {
2982       tree inner;
2983
2984       /* If this expression is getting a value from a PLACEHOLDER_EXPR
2985          and it is the right field, replace it with R.  */
2986       for (inner = TREE_OPERAND (exp, 0);
2987            REFERENCE_CLASS_P (inner);
2988            inner = TREE_OPERAND (inner, 0))
2989         ;
2990
2991       /* The field.  */
2992       op1 = TREE_OPERAND (exp, 1);
2993
2994       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
2995         return r;
2996
2997       /* If this expression hasn't been completed let, leave it alone.  */
2998       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
2999         return exp;
3000
3001       op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3002       if (op0 == TREE_OPERAND (exp, 0))
3003         return exp;
3004
3005       new_tree
3006         = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3007    }
3008   else
3009     switch (TREE_CODE_CLASS (code))
3010       {
3011       case tcc_constant:
3012         return exp;
3013
3014       case tcc_declaration:
3015         if (exp == f)
3016           return r;
3017         else
3018           return exp;
3019
3020       case tcc_expression:
3021         if (exp == f)
3022           return r;
3023
3024         /* Fall through...  */
3025
3026       case tcc_exceptional:
3027       case tcc_unary:
3028       case tcc_binary:
3029       case tcc_comparison:
3030       case tcc_reference:
3031         switch (TREE_CODE_LENGTH (code))
3032           {
3033           case 0:
3034             return exp;
3035
3036           case 1:
3037             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3038             if (op0 == TREE_OPERAND (exp, 0))
3039               return exp;
3040
3041             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3042             break;
3043
3044           case 2:
3045             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3046             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3047
3048             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3049               return exp;
3050
3051             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3052             break;
3053
3054           case 3:
3055             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3056             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3057             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3058
3059             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3060                 && op2 == TREE_OPERAND (exp, 2))
3061               return exp;
3062
3063             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3064             break;
3065
3066           case 4:
3067             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3068             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3069             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3070             op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3071
3072             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3073                 && op2 == TREE_OPERAND (exp, 2)
3074                 && op3 == TREE_OPERAND (exp, 3))
3075               return exp;
3076
3077             new_tree
3078               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3079             break;
3080
3081           default:
3082             gcc_unreachable ();
3083           }
3084         break;
3085
3086       case tcc_vl_exp:
3087         {
3088           int i;
3089
3090           new_tree = NULL_TREE;
3091
3092           /* If we are trying to replace F with a constant, inline back
3093              functions which do nothing else than computing a value from
3094              the arguments they are passed.  This makes it possible to
3095              fold partially or entirely the replacement expression.  */
3096           if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
3097             {
3098               tree t = maybe_inline_call_in_expr (exp);
3099               if (t)
3100                 return SUBSTITUTE_IN_EXPR (t, f, r);
3101             }
3102
3103           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3104             {
3105               tree op = TREE_OPERAND (exp, i);
3106               tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3107               if (new_op != op)
3108                 {
3109                   if (!new_tree)
3110                     new_tree = copy_node (exp);
3111                   TREE_OPERAND (new_tree, i) = new_op;
3112                 }
3113             }
3114
3115           if (new_tree)
3116             {
3117               new_tree = fold (new_tree);
3118               if (TREE_CODE (new_tree) == CALL_EXPR)
3119                 process_call_operands (new_tree);
3120             }
3121           else
3122             return exp;
3123         }
3124         break;
3125
3126       default:
3127         gcc_unreachable ();
3128       }
3129
3130   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3131   return new_tree;
3132 }
3133
3134 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3135    for it within OBJ, a tree that is an object or a chain of references.  */
3136
3137 tree
3138 substitute_placeholder_in_expr (tree exp, tree obj)
3139 {
3140   enum tree_code code = TREE_CODE (exp);
3141   tree op0, op1, op2, op3;
3142   tree new_tree;
3143
3144   /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3145      in the chain of OBJ.  */
3146   if (code == PLACEHOLDER_EXPR)
3147     {
3148       tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3149       tree elt;
3150
3151       for (elt = obj; elt != 0;
3152            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3153                    || TREE_CODE (elt) == COND_EXPR)
3154                   ? TREE_OPERAND (elt, 1)
3155                   : (REFERENCE_CLASS_P (elt)
3156                      || UNARY_CLASS_P (elt)
3157                      || BINARY_CLASS_P (elt)
3158                      || VL_EXP_CLASS_P (elt)
3159                      || EXPRESSION_CLASS_P (elt))
3160                   ? TREE_OPERAND (elt, 0) : 0))
3161         if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3162           return elt;
3163
3164       for (elt = obj; elt != 0;
3165            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3166                    || TREE_CODE (elt) == COND_EXPR)
3167                   ? TREE_OPERAND (elt, 1)
3168                   : (REFERENCE_CLASS_P (elt)
3169                      || UNARY_CLASS_P (elt)
3170                      || BINARY_CLASS_P (elt)
3171                      || VL_EXP_CLASS_P (elt)
3172                      || EXPRESSION_CLASS_P (elt))
3173                   ? TREE_OPERAND (elt, 0) : 0))
3174         if (POINTER_TYPE_P (TREE_TYPE (elt))
3175             && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3176                 == need_type))
3177           return fold_build1 (INDIRECT_REF, need_type, elt);
3178
3179       /* If we didn't find it, return the original PLACEHOLDER_EXPR.  If it
3180          survives until RTL generation, there will be an error.  */
3181       return exp;
3182     }
3183
3184   /* TREE_LIST is special because we need to look at TREE_VALUE
3185      and TREE_CHAIN, not TREE_OPERANDS.  */
3186   else if (code == TREE_LIST)
3187     {
3188       op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
3189       op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
3190       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3191         return exp;
3192
3193       return tree_cons (TREE_PURPOSE (exp), op1, op0);
3194     }
3195   else
3196     switch (TREE_CODE_CLASS (code))
3197       {
3198       case tcc_constant:
3199       case tcc_declaration:
3200         return exp;
3201
3202       case tcc_exceptional:
3203       case tcc_unary:
3204       case tcc_binary:
3205       case tcc_comparison:
3206       case tcc_expression:
3207       case tcc_reference:
3208       case tcc_statement:
3209         switch (TREE_CODE_LENGTH (code))
3210           {
3211           case 0:
3212             return exp;
3213
3214           case 1:
3215             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3216             if (op0 == TREE_OPERAND (exp, 0))
3217               return exp;
3218
3219             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3220             break;
3221
3222           case 2:
3223             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3224             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3225
3226             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3227               return exp;
3228
3229             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3230             break;
3231
3232           case 3:
3233             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3234             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3235             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3236
3237             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3238                 && op2 == TREE_OPERAND (exp, 2))
3239               return exp;
3240
3241             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3242             break;
3243
3244           case 4:
3245             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3246             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3247             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3248             op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
3249
3250             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3251                 && op2 == TREE_OPERAND (exp, 2)
3252                 && op3 == TREE_OPERAND (exp, 3))
3253               return exp;
3254
3255             new_tree
3256               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3257             break;
3258
3259           default:
3260             gcc_unreachable ();
3261           }
3262         break;
3263
3264       case tcc_vl_exp:
3265         {
3266           int i;
3267
3268           new_tree = NULL_TREE;
3269
3270           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3271             {
3272               tree op = TREE_OPERAND (exp, i);
3273               tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
3274               if (new_op != op)
3275                 {
3276                   if (!new_tree)
3277                     new_tree = copy_node (exp);
3278                   TREE_OPERAND (new_tree, i) = new_op;
3279                 }
3280             }
3281
3282           if (new_tree)
3283             {
3284               new_tree = fold (new_tree);
3285               if (TREE_CODE (new_tree) == CALL_EXPR)
3286                 process_call_operands (new_tree);
3287             }
3288           else
3289             return exp;
3290         }
3291         break;
3292
3293       default:
3294         gcc_unreachable ();
3295       }
3296
3297   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3298   return new_tree;
3299 }
3300 \f
3301 /* Stabilize a reference so that we can use it any number of times
3302    without causing its operands to be evaluated more than once.
3303    Returns the stabilized reference.  This works by means of save_expr,
3304    so see the caveats in the comments about save_expr.
3305
3306    Also allows conversion expressions whose operands are references.
3307    Any other kind of expression is returned unchanged.  */
3308
3309 tree
3310 stabilize_reference (tree ref)
3311 {
3312   tree result;
3313   enum tree_code code = TREE_CODE (ref);
3314
3315   switch (code)
3316     {
3317     case VAR_DECL:
3318     case PARM_DECL:
3319     case RESULT_DECL:
3320       /* No action is needed in this case.  */
3321       return ref;
3322
3323     CASE_CONVERT:
3324     case FLOAT_EXPR:
3325     case FIX_TRUNC_EXPR:
3326       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
3327       break;
3328
3329     case INDIRECT_REF:
3330       result = build_nt (INDIRECT_REF,
3331                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
3332       break;
3333
3334     case COMPONENT_REF:
3335       result = build_nt (COMPONENT_REF,
3336                          stabilize_reference (TREE_OPERAND (ref, 0)),
3337                          TREE_OPERAND (ref, 1), NULL_TREE);
3338       break;
3339
3340     case BIT_FIELD_REF:
3341       result = build_nt (BIT_FIELD_REF,
3342                          stabilize_reference (TREE_OPERAND (ref, 0)),
3343                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3344                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
3345       break;
3346
3347     case ARRAY_REF:
3348       result = build_nt (ARRAY_REF,
3349                          stabilize_reference (TREE_OPERAND (ref, 0)),
3350                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3351                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3352       break;
3353
3354     case ARRAY_RANGE_REF:
3355       result = build_nt (ARRAY_RANGE_REF,
3356                          stabilize_reference (TREE_OPERAND (ref, 0)),
3357                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3358                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3359       break;
3360
3361     case COMPOUND_EXPR:
3362       /* We cannot wrap the first expression in a SAVE_EXPR, as then
3363          it wouldn't be ignored.  This matters when dealing with
3364          volatiles.  */
3365       return stabilize_reference_1 (ref);
3366
3367       /* If arg isn't a kind of lvalue we recognize, make no change.
3368          Caller should recognize the error for an invalid lvalue.  */
3369     default:
3370       return ref;
3371
3372     case ERROR_MARK:
3373       return error_mark_node;
3374     }
3375
3376   TREE_TYPE (result) = TREE_TYPE (ref);
3377   TREE_READONLY (result) = TREE_READONLY (ref);
3378   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
3379   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
3380
3381   return result;
3382 }
3383
3384 /* Subroutine of stabilize_reference; this is called for subtrees of
3385    references.  Any expression with side-effects must be put in a SAVE_EXPR
3386    to ensure that it is only evaluated once.
3387
3388    We don't put SAVE_EXPR nodes around everything, because assigning very
3389    simple expressions to temporaries causes us to miss good opportunities
3390    for optimizations.  Among other things, the opportunity to fold in the
3391    addition of a constant into an addressing mode often gets lost, e.g.
3392    "y[i+1] += x;".  In general, we take the approach that we should not make
3393    an assignment unless we are forced into it - i.e., that any non-side effect
3394    operator should be allowed, and that cse should take care of coalescing
3395    multiple utterances of the same expression should that prove fruitful.  */
3396
3397 tree
3398 stabilize_reference_1 (tree e)
3399 {
3400   tree result;
3401   enum tree_code code = TREE_CODE (e);
3402
3403   /* We cannot ignore const expressions because it might be a reference
3404      to a const array but whose index contains side-effects.  But we can
3405      ignore things that are actual constant or that already have been
3406      handled by this function.  */
3407
3408   if (tree_invariant_p (e))
3409     return e;
3410
3411   switch (TREE_CODE_CLASS (code))
3412     {
3413     case tcc_exceptional:
3414     case tcc_type:
3415     case tcc_declaration:
3416     case tcc_comparison:
3417     case tcc_statement:
3418     case tcc_expression:
3419     case tcc_reference:
3420     case tcc_vl_exp:
3421       /* If the expression has side-effects, then encase it in a SAVE_EXPR
3422          so that it will only be evaluated once.  */
3423       /* The reference (r) and comparison (<) classes could be handled as
3424          below, but it is generally faster to only evaluate them once.  */
3425       if (TREE_SIDE_EFFECTS (e))
3426         return save_expr (e);
3427       return e;
3428
3429     case tcc_constant:
3430       /* Constants need no processing.  In fact, we should never reach
3431          here.  */
3432       return e;
3433
3434     case tcc_binary:
3435       /* Division is slow and tends to be compiled with jumps,
3436          especially the division by powers of 2 that is often
3437          found inside of an array reference.  So do it just once.  */
3438       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
3439           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3440           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3441           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3442         return save_expr (e);
3443       /* Recursively stabilize each operand.  */
3444       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3445                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
3446       break;
3447
3448     case tcc_unary:
3449       /* Recursively stabilize each operand.  */
3450       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3451       break;
3452
3453     default:
3454       gcc_unreachable ();
3455     }
3456
3457   TREE_TYPE (result) = TREE_TYPE (e);
3458   TREE_READONLY (result) = TREE_READONLY (e);
3459   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3460   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3461
3462   return result;
3463 }
3464 \f
3465 /* Low-level constructors for expressions.  */
3466
3467 /* A helper function for build1 and constant folders.  Set TREE_CONSTANT,
3468    and TREE_SIDE_EFFECTS for an ADDR_EXPR.  */
3469
3470 void
3471 recompute_tree_invariant_for_addr_expr (tree t)
3472 {
3473   tree node;
3474   bool tc = true, se = false;
3475
3476   /* We started out assuming this address is both invariant and constant, but
3477      does not have side effects.  Now go down any handled components and see if
3478      any of them involve offsets that are either non-constant or non-invariant.
3479      Also check for side-effects.
3480
3481      ??? Note that this code makes no attempt to deal with the case where
3482      taking the address of something causes a copy due to misalignment.  */
3483
3484 #define UPDATE_FLAGS(NODE)  \
3485 do { tree _node = (NODE); \
3486      if (_node && !TREE_CONSTANT (_node)) tc = false; \
3487      if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
3488
3489   for (node = TREE_OPERAND (t, 0); handled_component_p (node);
3490        node = TREE_OPERAND (node, 0))
3491     {
3492       /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
3493          array reference (probably made temporarily by the G++ front end),
3494          so ignore all the operands.  */
3495       if ((TREE_CODE (node) == ARRAY_REF
3496            || TREE_CODE (node) == ARRAY_RANGE_REF)
3497           && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
3498         {
3499           UPDATE_FLAGS (TREE_OPERAND (node, 1));
3500           if (TREE_OPERAND (node, 2))
3501             UPDATE_FLAGS (TREE_OPERAND (node, 2));
3502           if (TREE_OPERAND (node, 3))
3503             UPDATE_FLAGS (TREE_OPERAND (node, 3));
3504         }
3505       /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
3506          FIELD_DECL, apparently.  The G++ front end can put something else
3507          there, at least temporarily.  */
3508       else if (TREE_CODE (node) == COMPONENT_REF
3509                && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
3510         {
3511           if (TREE_OPERAND (node, 2))
3512             UPDATE_FLAGS (TREE_OPERAND (node, 2));
3513         }
3514       else if (TREE_CODE (node) == BIT_FIELD_REF)
3515         UPDATE_FLAGS (TREE_OPERAND (node, 2));
3516     }
3517
3518   node = lang_hooks.expr_to_decl (node, &tc, &se);
3519
3520   /* Now see what's inside.  If it's an INDIRECT_REF, copy our properties from
3521      the address, since &(*a)->b is a form of addition.  If it's a constant, the
3522      address is constant too.  If it's a decl, its address is constant if the
3523      decl is static.  Everything else is not constant and, furthermore,
3524      taking the address of a volatile variable is not volatile.  */
3525   if (TREE_CODE (node) == INDIRECT_REF)
3526     UPDATE_FLAGS (TREE_OPERAND (node, 0));
3527   else if (CONSTANT_CLASS_P (node))
3528     ;
3529   else if (DECL_P (node))
3530     tc &= (staticp (node) != NULL_TREE);
3531   else
3532     {
3533       tc = false;
3534       se |= TREE_SIDE_EFFECTS (node);
3535     }
3536
3537
3538   TREE_CONSTANT (t) = tc;
3539   TREE_SIDE_EFFECTS (t) = se;
3540 #undef UPDATE_FLAGS
3541 }
3542
3543 /* Build an expression of code CODE, data type TYPE, and operands as
3544    specified.  Expressions and reference nodes can be created this way.
3545    Constants, decls, types and misc nodes cannot be.
3546
3547    We define 5 non-variadic functions, from 0 to 4 arguments.  This is
3548    enough for all extant tree codes.  */
3549
3550 tree
3551 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
3552 {
3553   tree t;
3554
3555   gcc_assert (TREE_CODE_LENGTH (code) == 0);
3556
3557   t = make_node_stat (code PASS_MEM_STAT);
3558   TREE_TYPE (t) = tt;
3559
3560   return t;
3561 }
3562
3563 tree
3564 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
3565 {
3566   int length = sizeof (struct tree_exp);
3567 #ifdef GATHER_STATISTICS
3568   tree_node_kind kind;
3569 #endif
3570   tree t;
3571
3572 #ifdef GATHER_STATISTICS
3573   switch (TREE_CODE_CLASS (code))
3574     {
3575     case tcc_statement:  /* an expression with side effects */
3576       kind = s_kind;
3577       break;
3578     case tcc_reference:  /* a reference */
3579       kind = r_kind;
3580       break;
3581     default:
3582       kind = e_kind;
3583       break;
3584     }
3585
3586   tree_node_counts[(int) kind]++;
3587   tree_node_sizes[(int) kind] += length;
3588 #endif
3589
3590   gcc_assert (TREE_CODE_LENGTH (code) == 1);
3591
3592   t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
3593
3594   memset (t, 0, sizeof (struct tree_common));
3595
3596   TREE_SET_CODE (t, code);
3597
3598   TREE_TYPE (t) = type;
3599   SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
3600   TREE_OPERAND (t, 0) = node;
3601   TREE_BLOCK (t) = NULL_TREE;
3602   if (node && !TYPE_P (node))
3603     {
3604       TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
3605       TREE_READONLY (t) = TREE_READONLY (node);
3606     }
3607
3608   if (TREE_CODE_CLASS (code) == tcc_statement)
3609     TREE_SIDE_EFFECTS (t) = 1;
3610   else switch (code)
3611     {
3612     case VA_ARG_EXPR:
3613       /* All of these have side-effects, no matter what their
3614          operands are.  */
3615       TREE_SIDE_EFFECTS (t) = 1;
3616       TREE_READONLY (t) = 0;
3617       break;
3618
3619     case MISALIGNED_INDIRECT_REF:
3620     case ALIGN_INDIRECT_REF:
3621     case INDIRECT_REF:
3622       /* Whether a dereference is readonly has nothing to do with whether
3623          its operand is readonly.  */
3624       TREE_READONLY (t) = 0;
3625       break;
3626
3627     case ADDR_EXPR:
3628       if (node)
3629         recompute_tree_invariant_for_addr_expr (t);
3630       break;
3631
3632     default:
3633       if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
3634           && node && !TYPE_P (node)
3635           && TREE_CONSTANT (node))
3636         TREE_CONSTANT (t) = 1;
3637       if (TREE_CODE_CLASS (code) == tcc_reference
3638           && node && TREE_THIS_VOLATILE (node))
3639         TREE_THIS_VOLATILE (t) = 1;
3640       break;
3641     }
3642
3643   return t;
3644 }
3645
3646 #define PROCESS_ARG(N)                          \
3647   do {                                          \
3648     TREE_OPERAND (t, N) = arg##N;               \
3649     if (arg##N &&!TYPE_P (arg##N))              \
3650       {                                         \
3651         if (TREE_SIDE_EFFECTS (arg##N))         \
3652           side_effects = 1;                     \
3653         if (!TREE_READONLY (arg##N)             \
3654             && !CONSTANT_CLASS_P (arg##N))      \
3655           (void) (read_only = 0);               \
3656         if (!TREE_CONSTANT (arg##N))            \
3657           (void) (constant = 0);                \
3658       }                                         \
3659   } while (0)
3660
3661 tree
3662 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
3663 {
3664   bool constant, read_only, side_effects;
3665   tree t;
3666
3667   gcc_assert (TREE_CODE_LENGTH (code) == 2);
3668
3669   if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
3670       && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
3671       /* When sizetype precision doesn't match that of pointers
3672          we need to be able to build explicit extensions or truncations
3673          of the offset argument.  */
3674       && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
3675     gcc_assert (TREE_CODE (arg0) == INTEGER_CST
3676                 && TREE_CODE (arg1) == INTEGER_CST);
3677
3678   if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
3679     gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
3680                 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
3681                 && useless_type_conversion_p (sizetype, TREE_TYPE (arg1)));
3682
3683   t = make_node_stat (code PASS_MEM_STAT);
3684   TREE_TYPE (t) = tt;
3685
3686   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
3687      result based on those same flags for the arguments.  But if the
3688      arguments aren't really even `tree' expressions, we shouldn't be trying
3689      to do this.  */
3690
3691   /* Expressions without side effects may be constant if their
3692      arguments are as well.  */
3693   constant = (TREE_CODE_CLASS (code) == tcc_comparison
3694               || TREE_CODE_CLASS (code) == tcc_binary);
3695   read_only = 1;
3696   side_effects = TREE_SIDE_EFFECTS (t);
3697
3698   PROCESS_ARG(0);
3699   PROCESS_ARG(1);
3700
3701   TREE_READONLY (t) = read_only;
3702   TREE_CONSTANT (t) = constant;
3703   TREE_SIDE_EFFECTS (t) = side_effects;
3704   TREE_THIS_VOLATILE (t)
3705     = (TREE_CODE_CLASS (code) == tcc_reference
3706        && arg0 && TREE_THIS_VOLATILE (arg0));
3707
3708   return t;
3709 }
3710
3711
3712 tree
3713 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3714              tree arg2 MEM_STAT_DECL)
3715 {
3716   bool constant, read_only, side_effects;
3717   tree t;
3718
3719   gcc_assert (TREE_CODE_LENGTH (code) == 3);
3720   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3721
3722   t = make_node_stat (code PASS_MEM_STAT);
3723   TREE_TYPE (t) = tt;
3724
3725   read_only = 1;
3726
3727   /* As a special exception, if COND_EXPR has NULL branches, we
3728      assume that it is a gimple statement and always consider
3729      it to have side effects.  */
3730   if (code == COND_EXPR
3731       && tt == void_type_node
3732       && arg1 == NULL_TREE
3733       && arg2 == NULL_TREE)
3734     side_effects = true;
3735   else
3736     side_effects = TREE_SIDE_EFFECTS (t);
3737
3738   PROCESS_ARG(0);
3739   PROCESS_ARG(1);
3740   PROCESS_ARG(2);
3741
3742   if (code == COND_EXPR)
3743     TREE_READONLY (t) = read_only;
3744
3745   TREE_SIDE_EFFECTS (t) = side_effects;
3746   TREE_THIS_VOLATILE (t)
3747     = (TREE_CODE_CLASS (code) == tcc_reference
3748        && arg0 && TREE_THIS_VOLATILE (arg0));
3749
3750   return t;
3751 }
3752
3753 tree
3754 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3755              tree arg2, tree arg3 MEM_STAT_DECL)
3756 {
3757   bool constant, read_only, side_effects;
3758   tree t;
3759
3760   gcc_assert (TREE_CODE_LENGTH (code) == 4);
3761
3762   t = make_node_stat (code PASS_MEM_STAT);
3763   TREE_TYPE (t) = tt;
3764
3765   side_effects = TREE_SIDE_EFFECTS (t);
3766
3767   PROCESS_ARG(0);
3768   PROCESS_ARG(1);
3769   PROCESS_ARG(2);
3770   PROCESS_ARG(3);
3771
3772   TREE_SIDE_EFFECTS (t) = side_effects;
3773   TREE_THIS_VOLATILE (t)
3774     = (TREE_CODE_CLASS (code) == tcc_reference
3775        && arg0 && TREE_THIS_VOLATILE (arg0));
3776
3777   return t;
3778 }
3779
3780 tree
3781 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3782              tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
3783 {
3784   bool constant, read_only, side_effects;
3785   tree t;
3786
3787   gcc_assert (TREE_CODE_LENGTH (code) == 5);
3788
3789   t = make_node_stat (code PASS_MEM_STAT);
3790   TREE_TYPE (t) = tt;
3791
3792   side_effects = TREE_SIDE_EFFECTS (t);
3793
3794   PROCESS_ARG(0);
3795   PROCESS_ARG(1);
3796   PROCESS_ARG(2);
3797   PROCESS_ARG(3);
3798   PROCESS_ARG(4);
3799
3800   TREE_SIDE_EFFECTS (t) = side_effects;
3801   TREE_THIS_VOLATILE (t)
3802     = (TREE_CODE_CLASS (code) == tcc_reference
3803        && arg0 && TREE_THIS_VOLATILE (arg0));
3804
3805   return t;
3806 }
3807
3808 tree
3809 build6_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3810              tree arg2, tree arg3, tree arg4, tree arg5 MEM_STAT_DECL)
3811 {
3812   bool constant, read_only, side_effects;
3813   tree t;
3814
3815   gcc_assert (code == TARGET_MEM_REF);
3816
3817   t = make_node_stat (code PASS_MEM_STAT);
3818   TREE_TYPE (t) = tt;
3819
3820   side_effects = TREE_SIDE_EFFECTS (t);
3821
3822   PROCESS_ARG(0);
3823   PROCESS_ARG(1);
3824   PROCESS_ARG(2);
3825   PROCESS_ARG(3);
3826   PROCESS_ARG(4);
3827   if (code == TARGET_MEM_REF)
3828     side_effects = 0;
3829   PROCESS_ARG(5);
3830
3831   TREE_SIDE_EFFECTS (t) = side_effects;
3832   TREE_THIS_VOLATILE (t)
3833     = (code == TARGET_MEM_REF
3834        && arg5 && TREE_THIS_VOLATILE (arg5));
3835
3836   return t;
3837 }
3838
3839 /* Similar except don't specify the TREE_TYPE
3840    and leave the TREE_SIDE_EFFECTS as 0.
3841    It is permissible for arguments to be null,
3842    or even garbage if their values do not matter.  */
3843
3844 tree
3845 build_nt (enum tree_code code, ...)
3846 {
3847   tree t;
3848   int length;
3849   int i;
3850   va_list p;
3851
3852   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3853
3854   va_start (p, code);
3855
3856   t = make_node (code);
3857   length = TREE_CODE_LENGTH (code);
3858
3859   for (i = 0; i < length; i++)
3860     TREE_OPERAND (t, i) = va_arg (p, tree);
3861
3862   va_end (p);
3863   return t;
3864 }
3865
3866 /* Similar to build_nt, but for creating a CALL_EXPR object with
3867    ARGLIST passed as a list.  */
3868
3869 tree
3870 build_nt_call_list (tree fn, tree arglist)
3871 {
3872   tree t;
3873   int i;
3874
3875   t = build_vl_exp (CALL_EXPR, list_length (arglist) + 3);
3876   CALL_EXPR_FN (t) = fn;
3877   CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
3878   for (i = 0; arglist; arglist = TREE_CHAIN (arglist), i++)
3879     CALL_EXPR_ARG (t, i) = TREE_VALUE (arglist);
3880   return t;
3881 }
3882
3883 /* Similar to build_nt, but for creating a CALL_EXPR object with a
3884    tree VEC.  */
3885
3886 tree
3887 build_nt_call_vec (tree fn, VEC(tree,gc) *args)
3888 {
3889   tree ret, t;
3890   unsigned int ix;
3891
3892   ret = build_vl_exp (CALL_EXPR, VEC_length (tree, args) + 3);
3893   CALL_EXPR_FN (ret) = fn;
3894   CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
3895   for (ix = 0; VEC_iterate (tree, args, ix, t); ++ix)
3896     CALL_EXPR_ARG (ret, ix) = t;
3897   return ret;
3898 }
3899 \f
3900 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3901    We do NOT enter this node in any sort of symbol table.
3902
3903    LOC is the location of the decl.
3904
3905    layout_decl is used to set up the decl's storage layout.
3906    Other slots are initialized to 0 or null pointers.  */
3907
3908 tree
3909 build_decl_stat (location_t loc, enum tree_code code, tree name,
3910                  tree type MEM_STAT_DECL)
3911 {
3912   tree t;
3913
3914   t = make_node_stat (code PASS_MEM_STAT);
3915   DECL_SOURCE_LOCATION (t) = loc;
3916
3917 /*  if (type == error_mark_node)
3918     type = integer_type_node; */
3919 /* That is not done, deliberately, so that having error_mark_node
3920    as the type can suppress useless errors in the use of this variable.  */
3921
3922   DECL_NAME (t) = name;
3923   TREE_TYPE (t) = type;
3924
3925   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3926     layout_decl (t, 0);
3927
3928   return t;
3929 }
3930
3931 /* Builds and returns function declaration with NAME and TYPE.  */
3932
3933 tree
3934 build_fn_decl (const char *name, tree type)
3935 {
3936   tree id = get_identifier (name);
3937   tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
3938
3939   DECL_EXTERNAL (decl) = 1;
3940   TREE_PUBLIC (decl) = 1;
3941   DECL_ARTIFICIAL (decl) = 1;
3942   TREE_NOTHROW (decl) = 1;
3943
3944   return decl;
3945 }
3946
3947 \f
3948 /* BLOCK nodes are used to represent the structure of binding contours
3949    and declarations, once those contours have been exited and their contents
3950    compiled.  This information is used for outputting debugging info.  */
3951
3952 tree
3953 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
3954 {
3955   tree block = make_node (BLOCK);
3956
3957   BLOCK_VARS (block) = vars;
3958   BLOCK_SUBBLOCKS (block) = subblocks;
3959   BLOCK_SUPERCONTEXT (block) = supercontext;
3960   BLOCK_CHAIN (block) = chain;
3961   return block;
3962 }
3963
3964 expanded_location
3965 expand_location (source_location loc)
3966 {
3967   expanded_location xloc;
3968   if (loc <= BUILTINS_LOCATION)
3969     {
3970       xloc.file = loc == UNKNOWN_LOCATION ? NULL : _("<built-in>");
3971       xloc.line = 0;
3972       xloc.column = 0;
3973       xloc.sysp = 0;
3974     }
3975   else
3976     {
3977       const struct line_map *map = linemap_lookup (line_table, loc);
3978       xloc.file = map->to_file;
3979       xloc.line = SOURCE_LINE (map, loc);
3980       xloc.column = SOURCE_COLUMN (map, loc);
3981       xloc.sysp = map->sysp != 0;
3982     };
3983   return xloc;
3984 }
3985
3986 \f
3987 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
3988
3989    LOC is the location to use in tree T.  */
3990
3991 void
3992 protected_set_expr_location (tree t, location_t loc)
3993 {
3994   if (t && CAN_HAVE_LOCATION_P (t))
3995     SET_EXPR_LOCATION (t, loc);
3996 }
3997 \f
3998 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
3999    is ATTRIBUTE.  */
4000
4001 tree
4002 build_decl_attribute_variant (tree ddecl, tree attribute)
4003 {
4004   DECL_ATTRIBUTES (ddecl) = attribute;
4005   return ddecl;
4006 }
4007
4008 /* Borrowed from hashtab.c iterative_hash implementation.  */
4009 #define mix(a,b,c) \
4010 { \
4011   a -= b; a -= c; a ^= (c>>13); \
4012   b -= c; b -= a; b ^= (a<< 8); \
4013   c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
4014   a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
4015   b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
4016   c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
4017   a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
4018   b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
4019   c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
4020 }
4021
4022
4023 /* Produce good hash value combining VAL and VAL2.  */
4024 hashval_t
4025 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
4026 {
4027   /* the golden ratio; an arbitrary value.  */
4028   hashval_t a = 0x9e3779b9;
4029
4030   mix (a, val, val2);
4031   return val2;
4032 }
4033
4034 /* Produce good hash value combining VAL and VAL2.  */
4035 hashval_t
4036 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
4037 {
4038   if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
4039     return iterative_hash_hashval_t (val, val2);
4040   else
4041     {
4042       hashval_t a = (hashval_t) val;
4043       /* Avoid warnings about shifting of more than the width of the type on
4044          hosts that won't execute this path.  */
4045       int zero = 0;
4046       hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
4047       mix (a, b, val2);
4048       if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
4049         {
4050           hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
4051           hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
4052           mix (a, b, val2);
4053         }
4054       return val2;
4055     }
4056 }
4057
4058 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4059    is ATTRIBUTE and its qualifiers are QUALS.
4060
4061    Record such modified types already made so we don't make duplicates.  */
4062
4063 tree
4064 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4065 {
4066   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4067     {
4068       hashval_t hashcode = 0;
4069       tree ntype;
4070       enum tree_code code = TREE_CODE (ttype);
4071
4072       /* Building a distinct copy of a tagged type is inappropriate; it
4073          causes breakage in code that expects there to be a one-to-one
4074          relationship between a struct and its fields.
4075          build_duplicate_type is another solution (as used in
4076          handle_transparent_union_attribute), but that doesn't play well
4077          with the stronger C++ type identity model.  */
4078       if (TREE_CODE (ttype) == RECORD_TYPE
4079           || TREE_CODE (ttype) == UNION_TYPE
4080           || TREE_CODE (ttype) == QUAL_UNION_TYPE
4081           || TREE_CODE (ttype) == ENUMERAL_TYPE)
4082         {
4083           warning (OPT_Wattributes,
4084                    "ignoring attributes applied to %qT after definition",
4085                    TYPE_MAIN_VARIANT (ttype));
4086           return build_qualified_type (ttype, quals);
4087         }
4088
4089       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4090       ntype = build_distinct_type_copy (ttype);
4091
4092       TYPE_ATTRIBUTES (ntype) = attribute;
4093
4094       hashcode = iterative_hash_object (code, hashcode);
4095       if (TREE_TYPE (ntype))
4096         hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
4097                                           hashcode);
4098       hashcode = attribute_hash_list (attribute, hashcode);
4099
4100       switch (TREE_CODE (ntype))
4101         {
4102         case FUNCTION_TYPE:
4103           hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
4104           break;
4105         case ARRAY_TYPE:
4106           if (TYPE_DOMAIN (ntype))
4107             hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
4108                                               hashcode);
4109           break;
4110         case INTEGER_TYPE:
4111           hashcode = iterative_hash_object
4112             (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
4113           hashcode = iterative_hash_object
4114             (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
4115           break;
4116         case REAL_TYPE:
4117         case FIXED_POINT_TYPE:
4118           {
4119             unsigned int precision = TYPE_PRECISION (ntype);
4120             hashcode = iterative_hash_object (precision, hashcode);
4121           }
4122           break;
4123         default:
4124           break;
4125         }
4126
4127       ntype = type_hash_canon (hashcode, ntype);
4128
4129       /* If the target-dependent attributes make NTYPE different from
4130          its canonical type, we will need to use structural equality
4131          checks for this type. */
4132       if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4133           || !targetm.comp_type_attributes (ntype, ttype))
4134         SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4135       else if (TYPE_CANONICAL (ntype) == ntype)
4136         TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4137
4138       ttype = build_qualified_type (ntype, quals);
4139     }
4140   else if (TYPE_QUALS (ttype) != quals)
4141     ttype = build_qualified_type (ttype, quals);
4142
4143   return ttype;
4144 }
4145
4146
4147 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4148    is ATTRIBUTE.
4149
4150    Record such modified types already made so we don't make duplicates.  */
4151
4152 tree
4153 build_type_attribute_variant (tree ttype, tree attribute)
4154 {
4155   return build_type_attribute_qual_variant (ttype, attribute,
4156                                             TYPE_QUALS (ttype));
4157 }
4158
4159
4160 /* Reset the expression *EXPR_P, a size or position.
4161
4162    ??? We could reset all non-constant sizes or positions.  But it's cheap
4163    enough to not do so and refrain from adding workarounds to dwarf2out.c.
4164
4165    We need to reset self-referential sizes or positions because they cannot
4166    be gimplified and thus can contain a CALL_EXPR after the gimplification
4167    is finished, which will run afoul of LTO streaming.  And they need to be
4168    reset to something essentially dummy but not constant, so as to preserve
4169    the properties of the object they are attached to.  */
4170
4171 static inline void
4172 free_lang_data_in_one_sizepos (tree *expr_p)
4173 {
4174   tree expr = *expr_p;
4175   if (CONTAINS_PLACEHOLDER_P (expr))
4176     *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
4177 }
4178
4179
4180 /* Reset all the fields in a binfo node BINFO.  We only keep
4181    BINFO_VIRTUALS, which is used by gimple_fold_obj_type_ref.  */
4182
4183 static void
4184 free_lang_data_in_binfo (tree binfo)
4185 {
4186   unsigned i;
4187   tree t;
4188
4189   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
4190
4191   BINFO_VTABLE (binfo) = NULL_TREE;
4192   BINFO_BASE_ACCESSES (binfo) = NULL;
4193   BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
4194   BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
4195
4196   for (i = 0; VEC_iterate (tree, BINFO_BASE_BINFOS (binfo), i, t); i++)
4197     free_lang_data_in_binfo (t);
4198 }
4199
4200
4201 /* Reset all language specific information still present in TYPE.  */
4202
4203 static void
4204 free_lang_data_in_type (tree type)
4205 {
4206   gcc_assert (TYPE_P (type));
4207
4208   /* Give the FE a chance to remove its own data first.  */
4209   lang_hooks.free_lang_data (type);
4210
4211   TREE_LANG_FLAG_0 (type) = 0;
4212   TREE_LANG_FLAG_1 (type) = 0;
4213   TREE_LANG_FLAG_2 (type) = 0;
4214   TREE_LANG_FLAG_3 (type) = 0;
4215   TREE_LANG_FLAG_4 (type) = 0;
4216   TREE_LANG_FLAG_5 (type) = 0;
4217   TREE_LANG_FLAG_6 (type) = 0;
4218
4219   if (TREE_CODE (type) == FUNCTION_TYPE)
4220     {
4221       /* Remove the const and volatile qualifiers from arguments.  The
4222          C++ front end removes them, but the C front end does not,
4223          leading to false ODR violation errors when merging two
4224          instances of the same function signature compiled by
4225          different front ends.  */
4226       tree p;
4227
4228       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
4229         {
4230           tree arg_type = TREE_VALUE (p);
4231
4232           if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
4233             {
4234               int quals = TYPE_QUALS (arg_type)
4235                           & ~TYPE_QUAL_CONST
4236                           & ~TYPE_QUAL_VOLATILE;
4237               TREE_VALUE (p) = build_qualified_type (arg_type, quals);
4238               free_lang_data_in_type (TREE_VALUE (p));
4239             }
4240         }
4241     }
4242
4243   /* Remove members that are not actually FIELD_DECLs from the field
4244      list of an aggregate.  These occur in C++.  */
4245   if (RECORD_OR_UNION_TYPE_P (type))
4246     {
4247       tree prev, member;
4248
4249       /* Note that TYPE_FIELDS can be shared across distinct
4250          TREE_TYPEs.  Therefore, if the first field of TYPE_FIELDS is
4251          to be removed, we cannot set its TREE_CHAIN to NULL.
4252          Otherwise, we would not be able to find all the other fields
4253          in the other instances of this TREE_TYPE.
4254
4255          This was causing an ICE in testsuite/g++.dg/lto/20080915.C.  */
4256       prev = NULL_TREE;
4257       member = TYPE_FIELDS (type);
4258       while (member)
4259         {
4260           if (TREE_CODE (member) == FIELD_DECL)
4261             {
4262               if (prev)
4263                 TREE_CHAIN (prev) = member;
4264               else
4265                 TYPE_FIELDS (type) = member;
4266               prev = member;
4267             }
4268
4269           member = TREE_CHAIN (member);
4270         }
4271
4272       if (prev)
4273         TREE_CHAIN (prev) = NULL_TREE;
4274       else
4275         TYPE_FIELDS (type) = NULL_TREE;
4276
4277       TYPE_METHODS (type) = NULL_TREE;
4278       if (TYPE_BINFO (type))
4279         free_lang_data_in_binfo (TYPE_BINFO (type));
4280     }
4281   else
4282     {
4283       /* For non-aggregate types, clear out the language slot (which
4284          overloads TYPE_BINFO).  */
4285       TYPE_LANG_SLOT_1 (type) = NULL_TREE;
4286
4287       if (INTEGRAL_TYPE_P (type)
4288           || SCALAR_FLOAT_TYPE_P (type)
4289           || FIXED_POINT_TYPE_P (type))
4290         {
4291           free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
4292           free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
4293         }
4294     }
4295
4296   free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
4297   free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
4298
4299   if (debug_info_level < DINFO_LEVEL_TERSE
4300       || (TYPE_CONTEXT (type)
4301           && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_DECL
4302           && TREE_CODE (TYPE_CONTEXT (type)) != NAMESPACE_DECL))
4303     TYPE_CONTEXT (type) = NULL_TREE;
4304
4305   if (debug_info_level < DINFO_LEVEL_TERSE)
4306     TYPE_STUB_DECL (type) = NULL_TREE;
4307 }
4308
4309
4310 /* Return true if DECL may need an assembler name to be set.  */
4311
4312 static inline bool
4313 need_assembler_name_p (tree decl)
4314 {
4315   /* Only FUNCTION_DECLs and VAR_DECLs are considered.  */
4316   if (TREE_CODE (decl) != FUNCTION_DECL
4317       && TREE_CODE (decl) != VAR_DECL)
4318     return false;
4319
4320   /* If DECL already has its assembler name set, it does not need a
4321      new one.  */
4322   if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
4323       || DECL_ASSEMBLER_NAME_SET_P (decl))
4324     return false;
4325
4326   /* Abstract decls do not need an assembler name.  */
4327   if (DECL_ABSTRACT (decl))
4328     return false;
4329
4330   /* For VAR_DECLs, only static, public and external symbols need an
4331      assembler name.  */
4332   if (TREE_CODE (decl) == VAR_DECL
4333       && !TREE_STATIC (decl)
4334       && !TREE_PUBLIC (decl)
4335       && !DECL_EXTERNAL (decl))
4336     return false;
4337
4338   if (TREE_CODE (decl) == FUNCTION_DECL)
4339     {
4340       /* Do not set assembler name on builtins.  Allow RTL expansion to
4341          decide whether to expand inline or via a regular call.  */
4342       if (DECL_BUILT_IN (decl)
4343           && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
4344         return false;
4345
4346       /* Functions represented in the callgraph need an assembler name.  */
4347       if (cgraph_get_node (decl) != NULL)
4348         return true;
4349
4350       /* Unused and not public functions don't need an assembler name.  */
4351       if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
4352         return false;
4353     }
4354
4355   return true;
4356 }
4357
4358
4359 /* Remove all the non-variable decls from BLOCK.  LOCALS is the set of
4360    variables in DECL_STRUCT_FUNCTION (FN)->local_decls.  Every decl
4361    in BLOCK that is not in LOCALS is removed.  */
4362
4363 static void
4364 free_lang_data_in_block (tree fn, tree block, struct pointer_set_t *locals)
4365 {
4366   tree *tp, t;
4367
4368   tp = &BLOCK_VARS (block);
4369   while (*tp)
4370     {
4371       if (!pointer_set_contains (locals, *tp))
4372         *tp = TREE_CHAIN (*tp);
4373       else
4374         tp = &TREE_CHAIN (*tp);
4375     }
4376
4377   for (t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t))
4378     free_lang_data_in_block (fn, t, locals);
4379 }
4380
4381
4382 /* Reset all language specific information still present in symbol
4383    DECL.  */
4384
4385 static void
4386 free_lang_data_in_decl (tree decl)
4387 {
4388   gcc_assert (DECL_P (decl));
4389
4390   /* Give the FE a chance to remove its own data first.  */
4391   lang_hooks.free_lang_data (decl);
4392
4393   TREE_LANG_FLAG_0 (decl) = 0;
4394   TREE_LANG_FLAG_1 (decl) = 0;
4395   TREE_LANG_FLAG_2 (decl) = 0;
4396   TREE_LANG_FLAG_3 (decl) = 0;
4397   TREE_LANG_FLAG_4 (decl) = 0;
4398   TREE_LANG_FLAG_5 (decl) = 0;
4399   TREE_LANG_FLAG_6 (decl) = 0;
4400
4401   /* Identifiers need not have a type.  */
4402   if (DECL_NAME (decl))
4403     TREE_TYPE (DECL_NAME (decl)) = NULL_TREE;
4404
4405   /* Ignore any intervening types, because we are going to clear their
4406      TYPE_CONTEXT fields.  */
4407   if (TREE_CODE (decl) != FIELD_DECL
4408       && TREE_CODE (decl) != FUNCTION_DECL)
4409     DECL_CONTEXT (decl) = decl_function_context (decl);
4410
4411   if (DECL_CONTEXT (decl)
4412       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
4413     DECL_CONTEXT (decl) = NULL_TREE;
4414
4415  if (TREE_CODE (decl) == VAR_DECL)
4416    {
4417      tree context = DECL_CONTEXT (decl);
4418
4419      if (context)
4420        {
4421          enum tree_code code = TREE_CODE (context);
4422          if (code == FUNCTION_DECL && DECL_ABSTRACT (context))
4423            {
4424              /* Do not clear the decl context here, that will promote
4425                 all vars to global ones.  */
4426              DECL_INITIAL (decl) = NULL_TREE;
4427            }
4428
4429          if (TREE_STATIC (decl))
4430            DECL_CONTEXT (decl) = NULL_TREE;
4431        }
4432    }
4433
4434   free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
4435   free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
4436   if (TREE_CODE (decl) == FIELD_DECL)
4437     free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
4438
4439  /* DECL_FCONTEXT is only used for debug info generation.  */
4440  if (TREE_CODE (decl) == FIELD_DECL
4441      && debug_info_level < DINFO_LEVEL_TERSE)
4442    DECL_FCONTEXT (decl) = NULL_TREE;
4443
4444  if (TREE_CODE (decl) == FUNCTION_DECL)
4445     {
4446       if (gimple_has_body_p (decl))
4447         {
4448           tree t;
4449           struct pointer_set_t *locals;
4450
4451           /* If DECL has a gimple body, then the context for its
4452              arguments must be DECL.  Otherwise, it doesn't really
4453              matter, as we will not be emitting any code for DECL.  In
4454              general, there may be other instances of DECL created by
4455              the front end and since PARM_DECLs are generally shared,
4456              their DECL_CONTEXT changes as the replicas of DECL are
4457              created.  The only time where DECL_CONTEXT is important
4458              is for the FUNCTION_DECLs that have a gimple body (since
4459              the PARM_DECL will be used in the function's body).  */
4460           for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
4461             DECL_CONTEXT (t) = decl;
4462
4463           /* Collect all the symbols declared in DECL.  */
4464           locals = pointer_set_create ();
4465           t = DECL_STRUCT_FUNCTION (decl)->local_decls;
4466           for (; t; t = TREE_CHAIN (t))
4467             {
4468               pointer_set_insert (locals, TREE_VALUE (t));
4469
4470               /* All the local symbols should have DECL as their
4471                  context.  */
4472               DECL_CONTEXT (TREE_VALUE (t)) = decl;
4473             }
4474
4475           /* Get rid of any decl not in local_decls.  */
4476           free_lang_data_in_block (decl, DECL_INITIAL (decl), locals);
4477
4478           pointer_set_destroy (locals);
4479         }
4480
4481       /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
4482          At this point, it is not needed anymore.  */
4483       DECL_SAVED_TREE (decl) = NULL_TREE;
4484     }
4485   else if (TREE_CODE (decl) == VAR_DECL)
4486     {
4487       tree expr = DECL_DEBUG_EXPR (decl);
4488       if (expr
4489           && TREE_CODE (expr) == VAR_DECL
4490           && !TREE_STATIC (expr) && !DECL_EXTERNAL (expr))
4491         SET_DECL_DEBUG_EXPR (decl, NULL_TREE);
4492
4493       if (DECL_EXTERNAL (decl)
4494           && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
4495         DECL_INITIAL (decl) = NULL_TREE;
4496     }
4497   else if (TREE_CODE (decl) == TYPE_DECL)
4498     {
4499       DECL_INITIAL (decl) = NULL_TREE;
4500
4501       /* DECL_CONTEXT is overloaded as DECL_FIELD_CONTEXT for
4502          FIELD_DECLs, which should be preserved.  Otherwise,
4503          we shouldn't be concerned with source-level lexical
4504          nesting beyond this point. */
4505       DECL_CONTEXT (decl) = NULL_TREE;
4506     }
4507 }
4508
4509
4510 /* Data used when collecting DECLs and TYPEs for language data removal.  */
4511
4512 struct free_lang_data_d
4513 {
4514   /* Worklist to avoid excessive recursion.  */
4515   VEC(tree,heap) *worklist;
4516
4517   /* Set of traversed objects.  Used to avoid duplicate visits.  */
4518   struct pointer_set_t *pset;
4519
4520   /* Array of symbols to process with free_lang_data_in_decl.  */
4521   VEC(tree,heap) *decls;
4522
4523   /* Array of types to process with free_lang_data_in_type.  */
4524   VEC(tree,heap) *types;
4525 };
4526
4527
4528 /* Save all language fields needed to generate proper debug information
4529    for DECL.  This saves most fields cleared out by free_lang_data_in_decl.  */
4530
4531 static void
4532 save_debug_info_for_decl (tree t)
4533 {
4534   /*struct saved_debug_info_d *sdi;*/
4535
4536   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
4537
4538   /* FIXME.  Partial implementation for saving debug info removed.  */
4539 }
4540
4541
4542 /* Save all language fields needed to generate proper debug information
4543    for TYPE.  This saves most fields cleared out by free_lang_data_in_type.  */
4544
4545 static void
4546 save_debug_info_for_type (tree t)
4547 {
4548   /*struct saved_debug_info_d *sdi;*/
4549
4550   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
4551
4552   /* FIXME.  Partial implementation for saving debug info removed.  */
4553 }
4554
4555
4556 /* Add type or decl T to one of the list of tree nodes that need their
4557    language data removed.  The lists are held inside FLD.  */
4558
4559 static void
4560 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
4561 {
4562   if (DECL_P (t))
4563     {
4564       VEC_safe_push (tree, heap, fld->decls, t);
4565       if (debug_info_level > DINFO_LEVEL_TERSE)
4566         save_debug_info_for_decl (t);
4567     }
4568   else if (TYPE_P (t))
4569     {
4570       VEC_safe_push (tree, heap, fld->types, t);
4571       if (debug_info_level > DINFO_LEVEL_TERSE)
4572         save_debug_info_for_type (t);
4573     }
4574   else
4575     gcc_unreachable ();
4576 }
4577
4578 /* Push tree node T into FLD->WORKLIST.  */
4579
4580 static inline void
4581 fld_worklist_push (tree t, struct free_lang_data_d *fld)
4582 {
4583   if (t && !is_lang_specific (t) && !pointer_set_contains (fld->pset, t))
4584     VEC_safe_push (tree, heap, fld->worklist, (t));
4585 }
4586
4587
4588 /* Operand callback helper for free_lang_data_in_node.  *TP is the
4589    subtree operand being considered.  */
4590
4591 static tree
4592 find_decls_types_r (tree *tp, int *ws, void *data)
4593 {
4594   tree t = *tp;
4595   struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
4596
4597   if (TREE_CODE (t) == TREE_LIST)
4598     return NULL_TREE;
4599
4600   /* Language specific nodes will be removed, so there is no need
4601      to gather anything under them.  */
4602   if (is_lang_specific (t))
4603     {
4604       *ws = 0;
4605       return NULL_TREE;
4606     }
4607
4608   if (DECL_P (t))
4609     {
4610       /* Note that walk_tree does not traverse every possible field in
4611          decls, so we have to do our own traversals here.  */
4612       add_tree_to_fld_list (t, fld);
4613
4614       fld_worklist_push (DECL_NAME (t), fld);
4615       fld_worklist_push (DECL_CONTEXT (t), fld);
4616       fld_worklist_push (DECL_SIZE (t), fld);
4617       fld_worklist_push (DECL_SIZE_UNIT (t), fld);
4618
4619       /* We are going to remove everything under DECL_INITIAL for
4620          TYPE_DECLs.  No point walking them.  */
4621       if (TREE_CODE (t) != TYPE_DECL)
4622         fld_worklist_push (DECL_INITIAL (t), fld);
4623
4624       fld_worklist_push (DECL_ATTRIBUTES (t), fld);
4625       fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
4626
4627       if (TREE_CODE (t) == FUNCTION_DECL)
4628         {
4629           fld_worklist_push (DECL_ARGUMENTS (t), fld);
4630           fld_worklist_push (DECL_RESULT (t), fld);
4631         }
4632       else if (TREE_CODE (t) == TYPE_DECL)
4633         {
4634           fld_worklist_push (DECL_ARGUMENT_FLD (t), fld);
4635           fld_worklist_push (DECL_VINDEX (t), fld);
4636         }
4637       else if (TREE_CODE (t) == FIELD_DECL)
4638         {
4639           fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
4640           fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
4641           fld_worklist_push (DECL_QUALIFIER (t), fld);
4642           fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
4643           fld_worklist_push (DECL_FCONTEXT (t), fld);
4644         }
4645       else if (TREE_CODE (t) == VAR_DECL)
4646         {
4647           fld_worklist_push (DECL_SECTION_NAME (t), fld);
4648           fld_worklist_push (DECL_COMDAT_GROUP (t), fld);
4649         }
4650
4651       if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == PARM_DECL)
4652           && DECL_HAS_VALUE_EXPR_P (t))
4653         fld_worklist_push (DECL_VALUE_EXPR (t), fld);
4654
4655       if (TREE_CODE (t) != FIELD_DECL)
4656         fld_worklist_push (TREE_CHAIN (t), fld);
4657       *ws = 0;
4658     }
4659   else if (TYPE_P (t))
4660     {
4661       /* Note that walk_tree does not traverse every possible field in
4662          types, so we have to do our own traversals here.  */
4663       add_tree_to_fld_list (t, fld);
4664
4665       if (!RECORD_OR_UNION_TYPE_P (t))
4666         fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
4667       fld_worklist_push (TYPE_SIZE (t), fld);
4668       fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
4669       fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
4670       fld_worklist_push (TYPE_POINTER_TO (t), fld);
4671       fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
4672       fld_worklist_push (TYPE_NAME (t), fld);
4673       fld_worklist_push (TYPE_MINVAL (t), fld);
4674       if (!RECORD_OR_UNION_TYPE_P (t))
4675         fld_worklist_push (TYPE_MAXVAL (t), fld);
4676       fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
4677       fld_worklist_push (TYPE_NEXT_VARIANT (t), fld);
4678       fld_worklist_push (TYPE_CONTEXT (t), fld);
4679       fld_worklist_push (TYPE_CANONICAL (t), fld);
4680
4681       if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
4682         {
4683           unsigned i;
4684           tree tem;
4685           for (i = 0; VEC_iterate (tree, BINFO_BASE_BINFOS (TYPE_BINFO (t)),
4686                                    i, tem); ++i)
4687             fld_worklist_push (TREE_TYPE (tem), fld);
4688           tem = BINFO_VIRTUALS (TYPE_BINFO (t));
4689           if (tem
4690               /* The Java FE overloads BINFO_VIRTUALS for its own purpose.  */
4691               && TREE_CODE (tem) == TREE_LIST)
4692             do
4693               {
4694                 fld_worklist_push (TREE_VALUE (tem), fld);
4695                 tem = TREE_CHAIN (tem);
4696               }
4697             while (tem);
4698         }
4699       if (RECORD_OR_UNION_TYPE_P (t))
4700         {
4701           tree tem;
4702           /* Push all TYPE_FIELDS - there can be interleaving interesting
4703              and non-interesting things.  */
4704           tem = TYPE_FIELDS (t);
4705           while (tem)
4706             {
4707               if (TREE_CODE (tem) == FIELD_DECL)
4708                 fld_worklist_push (tem, fld);
4709               tem = TREE_CHAIN (tem);
4710             }
4711         }
4712
4713       fld_worklist_push (TREE_CHAIN (t), fld);
4714       *ws = 0;
4715     }
4716
4717   fld_worklist_push (TREE_TYPE (t), fld);
4718
4719   return NULL_TREE;
4720 }
4721
4722
4723 /* Find decls and types in T.  */
4724
4725 static void
4726 find_decls_types (tree t, struct free_lang_data_d *fld)
4727 {
4728   while (1)
4729     {
4730       if (!pointer_set_contains (fld->pset, t))
4731         walk_tree (&t, find_decls_types_r, fld, fld->pset);
4732       if (VEC_empty (tree, fld->worklist))
4733         break;
4734       t = VEC_pop (tree, fld->worklist);
4735     }
4736 }
4737
4738 /* Translate all the types in LIST with the corresponding runtime
4739    types.  */
4740
4741 static tree
4742 get_eh_types_for_runtime (tree list)
4743 {
4744   tree head, prev;
4745
4746   if (list == NULL_TREE)
4747     return NULL_TREE;
4748
4749   head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
4750   prev = head;
4751   list = TREE_CHAIN (list);
4752   while (list)
4753     {
4754       tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
4755       TREE_CHAIN (prev) = n;
4756       prev = TREE_CHAIN (prev);
4757       list = TREE_CHAIN (list);
4758     }
4759
4760   return head;
4761 }
4762
4763
4764 /* Find decls and types referenced in EH region R and store them in
4765    FLD->DECLS and FLD->TYPES.  */
4766
4767 static void
4768 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
4769 {
4770   switch (r->type)
4771     {
4772     case ERT_CLEANUP:
4773       break;
4774
4775     case ERT_TRY:
4776       {
4777         eh_catch c;
4778
4779         /* The types referenced in each catch must first be changed to the
4780            EH types used at runtime.  This removes references to FE types
4781            in the region.  */
4782         for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
4783           {
4784             c->type_list = get_eh_types_for_runtime (c->type_list);
4785             walk_tree (&c->type_list, find_decls_types_r, fld, fld->pset);
4786           }
4787       }
4788       break;
4789
4790     case ERT_ALLOWED_EXCEPTIONS:
4791       r->u.allowed.type_list
4792         = get_eh_types_for_runtime (r->u.allowed.type_list);
4793       walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, fld->pset);
4794       break;
4795
4796     case ERT_MUST_NOT_THROW:
4797       walk_tree (&r->u.must_not_throw.failure_decl,
4798                  find_decls_types_r, fld, fld->pset);
4799       break;
4800     }
4801 }
4802
4803
4804 /* Find decls and types referenced in cgraph node N and store them in
4805    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
4806    look for *every* kind of DECL and TYPE node reachable from N,
4807    including those embedded inside types and decls (i.e,, TYPE_DECLs,
4808    NAMESPACE_DECLs, etc).  */
4809
4810 static void
4811 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
4812 {
4813   basic_block bb;
4814   struct function *fn;
4815   tree t;
4816
4817   find_decls_types (n->decl, fld);
4818
4819   if (!gimple_has_body_p (n->decl))
4820     return;
4821
4822   gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
4823
4824   fn = DECL_STRUCT_FUNCTION (n->decl);
4825
4826   /* Traverse locals. */
4827   for (t = fn->local_decls; t; t = TREE_CHAIN (t))
4828     find_decls_types (TREE_VALUE (t), fld);
4829
4830   /* Traverse EH regions in FN.  */
4831   {
4832     eh_region r;
4833     FOR_ALL_EH_REGION_FN (r, fn)
4834       find_decls_types_in_eh_region (r, fld);
4835   }
4836
4837   /* Traverse every statement in FN.  */
4838   FOR_EACH_BB_FN (bb, fn)
4839     {
4840       gimple_stmt_iterator si;
4841       unsigned i;
4842
4843       for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
4844         {
4845           gimple phi = gsi_stmt (si);
4846
4847           for (i = 0; i < gimple_phi_num_args (phi); i++)
4848             {
4849               tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
4850               find_decls_types (*arg_p, fld);
4851             }
4852         }
4853
4854       for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
4855         {
4856           gimple stmt = gsi_stmt (si);
4857
4858           for (i = 0; i < gimple_num_ops (stmt); i++)
4859             {
4860               tree arg = gimple_op (stmt, i);
4861               find_decls_types (arg, fld);
4862             }
4863         }
4864     }
4865 }
4866
4867
4868 /* Find decls and types referenced in varpool node N and store them in
4869    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
4870    look for *every* kind of DECL and TYPE node reachable from N,
4871    including those embedded inside types and decls (i.e,, TYPE_DECLs,
4872    NAMESPACE_DECLs, etc).  */
4873
4874 static void
4875 find_decls_types_in_var (struct varpool_node *v, struct free_lang_data_d *fld)
4876 {
4877   find_decls_types (v->decl, fld);
4878 }
4879
4880 /* If T needs an assembler name, have one created for it.  */
4881
4882 void
4883 assign_assembler_name_if_neeeded (tree t)
4884 {
4885   if (need_assembler_name_p (t))
4886     {
4887       /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
4888          diagnostics that use input_location to show locus
4889          information.  The problem here is that, at this point,
4890          input_location is generally anchored to the end of the file
4891          (since the parser is long gone), so we don't have a good
4892          position to pin it to.
4893
4894          To alleviate this problem, this uses the location of T's
4895          declaration.  Examples of this are
4896          testsuite/g++.dg/template/cond2.C and
4897          testsuite/g++.dg/template/pr35240.C.  */
4898       location_t saved_location = input_location;
4899       input_location = DECL_SOURCE_LOCATION (t);
4900
4901       decl_assembler_name (t);
4902
4903       input_location = saved_location;
4904     }
4905 }
4906
4907
4908 /* Free language specific information for every operand and expression
4909    in every node of the call graph.  This process operates in three stages:
4910
4911    1- Every callgraph node and varpool node is traversed looking for
4912       decls and types embedded in them.  This is a more exhaustive
4913       search than that done by find_referenced_vars, because it will
4914       also collect individual fields, decls embedded in types, etc.
4915
4916    2- All the decls found are sent to free_lang_data_in_decl.
4917
4918    3- All the types found are sent to free_lang_data_in_type.
4919
4920    The ordering between decls and types is important because
4921    free_lang_data_in_decl sets assembler names, which includes
4922    mangling.  So types cannot be freed up until assembler names have
4923    been set up.  */
4924
4925 static void
4926 free_lang_data_in_cgraph (void)
4927 {
4928   struct cgraph_node *n;
4929   struct varpool_node *v;
4930   struct free_lang_data_d fld;
4931   tree t;
4932   unsigned i;
4933   alias_pair *p;
4934
4935   /* Initialize sets and arrays to store referenced decls and types.  */
4936   fld.pset = pointer_set_create ();
4937   fld.worklist = NULL;
4938   fld.decls = VEC_alloc (tree, heap, 100);
4939   fld.types = VEC_alloc (tree, heap, 100);
4940
4941   /* Find decls and types in the body of every function in the callgraph.  */
4942   for (n = cgraph_nodes; n; n = n->next)
4943     find_decls_types_in_node (n, &fld);
4944
4945   for (i = 0; VEC_iterate (alias_pair, alias_pairs, i, p); i++)
4946     find_decls_types (p->decl, &fld);
4947
4948   /* Find decls and types in every varpool symbol.  */
4949   for (v = varpool_nodes_queue; v; v = v->next_needed)
4950     find_decls_types_in_var (v, &fld);
4951
4952   /* Set the assembler name on every decl found.  We need to do this
4953      now because free_lang_data_in_decl will invalidate data needed
4954      for mangling.  This breaks mangling on interdependent decls.  */
4955   for (i = 0; VEC_iterate (tree, fld.decls, i, t); i++)
4956     assign_assembler_name_if_neeeded (t);
4957
4958   /* Traverse every decl found freeing its language data.  */
4959   for (i = 0; VEC_iterate (tree, fld.decls, i, t); i++)
4960     free_lang_data_in_decl (t);
4961
4962   /* Traverse every type found freeing its language data.  */
4963   for (i = 0; VEC_iterate (tree, fld.types, i, t); i++)
4964     free_lang_data_in_type (t);
4965
4966   pointer_set_destroy (fld.pset);
4967   VEC_free (tree, heap, fld.worklist);
4968   VEC_free (tree, heap, fld.decls);
4969   VEC_free (tree, heap, fld.types);
4970 }
4971
4972
4973 /* Free resources that are used by FE but are not needed once they are done. */
4974
4975 static unsigned
4976 free_lang_data (void)
4977 {
4978   unsigned i;
4979
4980   /* If we are the LTO frontend we have freed lang-specific data already.  */
4981   if (in_lto_p
4982       || !flag_generate_lto)
4983     return 0;
4984
4985   /* Allocate and assign alias sets to the standard integer types
4986      while the slots are still in the way the frontends generated them.  */
4987   for (i = 0; i < itk_none; ++i)
4988     if (integer_types[i])
4989       TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
4990
4991   /* Traverse the IL resetting language specific information for
4992      operands, expressions, etc.  */
4993   free_lang_data_in_cgraph ();
4994
4995   /* Create gimple variants for common types.  */
4996   ptrdiff_type_node = integer_type_node;
4997   fileptr_type_node = ptr_type_node;
4998   if (TREE_CODE (boolean_type_node) != BOOLEAN_TYPE
4999       || (TYPE_MODE (boolean_type_node)
5000           != mode_for_size (BOOL_TYPE_SIZE, MODE_INT, 0))
5001       || TYPE_PRECISION (boolean_type_node) != 1
5002       || !TYPE_UNSIGNED (boolean_type_node))
5003     {
5004       boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5005       TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
5006       TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
5007       TYPE_PRECISION (boolean_type_node) = 1;
5008       boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
5009       boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
5010     }
5011
5012   /* Unify char_type_node with its properly signed variant.  */
5013   if (TYPE_UNSIGNED (char_type_node))
5014     unsigned_char_type_node = char_type_node;
5015   else
5016     signed_char_type_node = char_type_node;
5017
5018   /* Reset some langhooks.  Do not reset types_compatible_p, it may
5019      still be used indirectly via the get_alias_set langhook.  */
5020   lang_hooks.callgraph.analyze_expr = NULL;
5021   lang_hooks.dwarf_name = lhd_dwarf_name;
5022   lang_hooks.decl_printable_name = gimple_decl_printable_name;
5023   lang_hooks.set_decl_assembler_name = lhd_set_decl_assembler_name;
5024
5025   /* Reset diagnostic machinery.  */
5026   diagnostic_starter (global_dc) = default_diagnostic_starter;
5027   diagnostic_finalizer (global_dc) = default_diagnostic_finalizer;
5028   diagnostic_format_decoder (global_dc) = default_tree_printer;
5029
5030   return 0;
5031 }
5032
5033
5034 struct simple_ipa_opt_pass pass_ipa_free_lang_data =
5035 {
5036  {
5037   SIMPLE_IPA_PASS,
5038   "*free_lang_data",                    /* name */
5039   NULL,                                 /* gate */
5040   free_lang_data,                       /* execute */
5041   NULL,                                 /* sub */
5042   NULL,                                 /* next */
5043   0,                                    /* static_pass_number */
5044   TV_IPA_FREE_LANG_DATA,                /* tv_id */
5045   0,                                    /* properties_required */
5046   0,                                    /* properties_provided */
5047   0,                                    /* properties_destroyed */
5048   0,                                    /* todo_flags_start */
5049   TODO_ggc_collect                      /* todo_flags_finish */
5050  }
5051 };
5052
5053 /* Return nonzero if IDENT is a valid name for attribute ATTR,
5054    or zero if not.
5055
5056    We try both `text' and `__text__', ATTR may be either one.  */
5057 /* ??? It might be a reasonable simplification to require ATTR to be only
5058    `text'.  One might then also require attribute lists to be stored in
5059    their canonicalized form.  */
5060
5061 static int
5062 is_attribute_with_length_p (const char *attr, int attr_len, const_tree ident)
5063 {
5064   int ident_len;
5065   const char *p;
5066
5067   if (TREE_CODE (ident) != IDENTIFIER_NODE)
5068     return 0;
5069
5070   p = IDENTIFIER_POINTER (ident);
5071   ident_len = IDENTIFIER_LENGTH (ident);
5072
5073   if (ident_len == attr_len
5074       && strcmp (attr, p) == 0)
5075     return 1;
5076
5077   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
5078   if (attr[0] == '_')
5079     {
5080       gcc_assert (attr[1] == '_');
5081       gcc_assert (attr[attr_len - 2] == '_');
5082       gcc_assert (attr[attr_len - 1] == '_');
5083       if (ident_len == attr_len - 4
5084           && strncmp (attr + 2, p, attr_len - 4) == 0)
5085         return 1;
5086     }
5087   else
5088     {
5089       if (ident_len == attr_len + 4
5090           && p[0] == '_' && p[1] == '_'
5091           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5092           && strncmp (attr, p + 2, attr_len) == 0)
5093         return 1;
5094     }
5095
5096   return 0;
5097 }
5098
5099 /* Return nonzero if IDENT is a valid name for attribute ATTR,
5100    or zero if not.
5101
5102    We try both `text' and `__text__', ATTR may be either one.  */
5103
5104 int
5105 is_attribute_p (const char *attr, const_tree ident)
5106 {
5107   return is_attribute_with_length_p (attr, strlen (attr), ident);
5108 }
5109
5110 /* Given an attribute name and a list of attributes, return a pointer to the
5111    attribute's list element if the attribute is part of the list, or NULL_TREE
5112    if not found.  If the attribute appears more than once, this only
5113    returns the first occurrence; the TREE_CHAIN of the return value should
5114    be passed back in if further occurrences are wanted.  */
5115
5116 tree
5117 lookup_attribute (const char *attr_name, tree list)
5118 {
5119   tree l;
5120   size_t attr_len = strlen (attr_name);
5121
5122   for (l = list; l; l = TREE_CHAIN (l))
5123     {
5124       gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
5125       if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
5126         return l;
5127     }
5128   return NULL_TREE;
5129 }
5130
5131 /* Remove any instances of attribute ATTR_NAME in LIST and return the
5132    modified list.  */
5133
5134 tree
5135 remove_attribute (const char *attr_name, tree list)
5136 {
5137   tree *p;
5138   size_t attr_len = strlen (attr_name);
5139
5140   for (p = &list; *p; )
5141     {
5142       tree l = *p;
5143       gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
5144       if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
5145         *p = TREE_CHAIN (l);
5146       else
5147         p = &TREE_CHAIN (l);
5148     }
5149
5150   return list;
5151 }
5152
5153 /* Return an attribute list that is the union of a1 and a2.  */
5154
5155 tree
5156 merge_attributes (tree a1, tree a2)
5157 {
5158   tree attributes;
5159
5160   /* Either one unset?  Take the set one.  */
5161
5162   if ((attributes = a1) == 0)
5163     attributes = a2;
5164
5165   /* One that completely contains the other?  Take it.  */
5166
5167   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
5168     {
5169       if (attribute_list_contained (a2, a1))
5170         attributes = a2;
5171       else
5172         {
5173           /* Pick the longest list, and hang on the other list.  */
5174
5175           if (list_length (a1) < list_length (a2))
5176             attributes = a2, a2 = a1;
5177
5178           for (; a2 != 0; a2 = TREE_CHAIN (a2))
5179             {
5180               tree a;
5181               for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
5182                                          attributes);
5183                    a != NULL_TREE;
5184                    a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
5185                                          TREE_CHAIN (a)))
5186                 {
5187                   if (TREE_VALUE (a) != NULL
5188                       && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
5189                       && TREE_VALUE (a2) != NULL
5190                       && TREE_CODE (TREE_VALUE (a2)) == TREE_LIST)
5191                     {
5192                       if (simple_cst_list_equal (TREE_VALUE (a),
5193                                                  TREE_VALUE (a2)) == 1)
5194                         break;
5195                     }
5196                   else if (simple_cst_equal (TREE_VALUE (a),
5197                                              TREE_VALUE (a2)) == 1)
5198                     break;
5199                 }
5200               if (a == NULL_TREE)
5201                 {
5202                   a1 = copy_node (a2);
5203                   TREE_CHAIN (a1) = attributes;
5204                   attributes = a1;
5205                 }
5206             }
5207         }
5208     }
5209   return attributes;
5210 }
5211
5212 /* Given types T1 and T2, merge their attributes and return
5213   the result.  */
5214
5215 tree
5216 merge_type_attributes (tree t1, tree t2)
5217 {
5218   return merge_attributes (TYPE_ATTRIBUTES (t1),
5219                            TYPE_ATTRIBUTES (t2));
5220 }
5221
5222 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
5223    the result.  */
5224
5225 tree
5226 merge_decl_attributes (tree olddecl, tree newdecl)
5227 {
5228   return merge_attributes (DECL_ATTRIBUTES (olddecl),
5229                            DECL_ATTRIBUTES (newdecl));
5230 }
5231
5232 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
5233
5234 /* Specialization of merge_decl_attributes for various Windows targets.
5235
5236    This handles the following situation:
5237
5238      __declspec (dllimport) int foo;
5239      int foo;
5240
5241    The second instance of `foo' nullifies the dllimport.  */
5242
5243 tree
5244 merge_dllimport_decl_attributes (tree old, tree new_tree)
5245 {
5246   tree a;
5247   int delete_dllimport_p = 1;
5248
5249   /* What we need to do here is remove from `old' dllimport if it doesn't
5250      appear in `new'.  dllimport behaves like extern: if a declaration is
5251      marked dllimport and a definition appears later, then the object
5252      is not dllimport'd.  We also remove a `new' dllimport if the old list
5253      contains dllexport:  dllexport always overrides dllimport, regardless
5254      of the order of declaration.  */
5255   if (!VAR_OR_FUNCTION_DECL_P (new_tree))
5256     delete_dllimport_p = 0;
5257   else if (DECL_DLLIMPORT_P (new_tree)
5258            && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
5259     {
5260       DECL_DLLIMPORT_P (new_tree) = 0;
5261       warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
5262               "dllimport ignored", new_tree);
5263     }
5264   else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
5265     {
5266       /* Warn about overriding a symbol that has already been used, e.g.:
5267            extern int __attribute__ ((dllimport)) foo;
5268            int* bar () {return &foo;}
5269            int foo;
5270       */
5271       if (TREE_USED (old))
5272         {
5273           warning (0, "%q+D redeclared without dllimport attribute "
5274                    "after being referenced with dll linkage", new_tree);
5275           /* If we have used a variable's address with dllimport linkage,
5276               keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
5277               decl may already have had TREE_CONSTANT computed.
5278               We still remove the attribute so that assembler code refers
5279               to '&foo rather than '_imp__foo'.  */
5280           if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
5281             DECL_DLLIMPORT_P (new_tree) = 1;
5282         }
5283
5284       /* Let an inline definition silently override the external reference,
5285          but otherwise warn about attribute inconsistency.  */
5286       else if (TREE_CODE (new_tree) == VAR_DECL
5287                || !DECL_DECLARED_INLINE_P (new_tree))
5288         warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
5289                   "previous dllimport ignored", new_tree);
5290     }
5291   else
5292     delete_dllimport_p = 0;
5293
5294   a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
5295
5296   if (delete_dllimport_p)
5297     {
5298       tree prev, t;
5299       const size_t attr_len = strlen ("dllimport");
5300
5301       /* Scan the list for dllimport and delete it.  */
5302       for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
5303         {
5304           if (is_attribute_with_length_p ("dllimport", attr_len,
5305                                           TREE_PURPOSE (t)))
5306             {
5307               if (prev == NULL_TREE)
5308                 a = TREE_CHAIN (a);
5309               else
5310                 TREE_CHAIN (prev) = TREE_CHAIN (t);
5311               break;
5312             }
5313         }
5314     }
5315
5316   return a;
5317 }
5318
5319 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
5320    struct attribute_spec.handler.  */
5321
5322 tree
5323 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
5324                       bool *no_add_attrs)
5325 {
5326   tree node = *pnode;
5327   bool is_dllimport;
5328
5329   /* These attributes may apply to structure and union types being created,
5330      but otherwise should pass to the declaration involved.  */
5331   if (!DECL_P (node))
5332     {
5333       if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
5334                    | (int) ATTR_FLAG_ARRAY_NEXT))
5335         {
5336           *no_add_attrs = true;
5337           return tree_cons (name, args, NULL_TREE);
5338         }
5339       if (TREE_CODE (node) == RECORD_TYPE
5340           || TREE_CODE (node) == UNION_TYPE)
5341         {
5342           node = TYPE_NAME (node);
5343           if (!node)
5344             return NULL_TREE;
5345         }
5346       else
5347         {
5348           warning (OPT_Wattributes, "%qE attribute ignored",
5349                    name);
5350           *no_add_attrs = true;
5351           return NULL_TREE;
5352         }
5353     }
5354
5355   if (TREE_CODE (node) != FUNCTION_DECL
5356       && TREE_CODE (node) != VAR_DECL
5357       && TREE_CODE (node) != TYPE_DECL)
5358     {
5359       *no_add_attrs = true;
5360       warning (OPT_Wattributes, "%qE attribute ignored",
5361                name);
5362       return NULL_TREE;
5363     }
5364
5365   if (TREE_CODE (node) == TYPE_DECL
5366       && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
5367       && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
5368     {
5369       *no_add_attrs = true;
5370       warning (OPT_Wattributes, "%qE attribute ignored",
5371                name);
5372       return NULL_TREE;
5373     }
5374
5375   is_dllimport = is_attribute_p ("dllimport", name);
5376
5377   /* Report error on dllimport ambiguities seen now before they cause
5378      any damage.  */
5379   if (is_dllimport)
5380     {
5381       /* Honor any target-specific overrides. */
5382       if (!targetm.valid_dllimport_attribute_p (node))
5383         *no_add_attrs = true;
5384
5385      else if (TREE_CODE (node) == FUNCTION_DECL
5386                 && DECL_DECLARED_INLINE_P (node))
5387         {
5388           warning (OPT_Wattributes, "inline function %q+D declared as "
5389                   " dllimport: attribute ignored", node);
5390           *no_add_attrs = true;
5391         }
5392       /* Like MS, treat definition of dllimported variables and
5393          non-inlined functions on declaration as syntax errors. */
5394      else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
5395         {
5396           error ("function %q+D definition is marked dllimport", node);
5397           *no_add_attrs = true;
5398         }
5399
5400      else if (TREE_CODE (node) == VAR_DECL)
5401         {
5402           if (DECL_INITIAL (node))
5403             {
5404               error ("variable %q+D definition is marked dllimport",
5405                      node);
5406               *no_add_attrs = true;
5407             }
5408
5409           /* `extern' needn't be specified with dllimport.
5410              Specify `extern' now and hope for the best.  Sigh.  */
5411           DECL_EXTERNAL (node) = 1;
5412           /* Also, implicitly give dllimport'd variables declared within
5413              a function global scope, unless declared static.  */
5414           if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
5415             TREE_PUBLIC (node) = 1;
5416         }
5417
5418       if (*no_add_attrs == false)
5419         DECL_DLLIMPORT_P (node) = 1;
5420     }
5421   else if (TREE_CODE (node) == FUNCTION_DECL
5422            && DECL_DECLARED_INLINE_P (node))
5423     /* An exported function, even if inline, must be emitted.  */
5424     DECL_EXTERNAL (node) = 0;
5425
5426   /*  Report error if symbol is not accessible at global scope.  */
5427   if (!TREE_PUBLIC (node)
5428       && (TREE_CODE (node) == VAR_DECL
5429           || TREE_CODE (node) == FUNCTION_DECL))
5430     {
5431       error ("external linkage required for symbol %q+D because of "
5432              "%qE attribute", node, name);
5433       *no_add_attrs = true;
5434     }
5435
5436   /* A dllexport'd entity must have default visibility so that other
5437      program units (shared libraries or the main executable) can see
5438      it.  A dllimport'd entity must have default visibility so that
5439      the linker knows that undefined references within this program
5440      unit can be resolved by the dynamic linker.  */
5441   if (!*no_add_attrs)
5442     {
5443       if (DECL_VISIBILITY_SPECIFIED (node)
5444           && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
5445         error ("%qE implies default visibility, but %qD has already "
5446                "been declared with a different visibility",
5447                name, node);
5448       DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
5449       DECL_VISIBILITY_SPECIFIED (node) = 1;
5450     }
5451
5452   return NULL_TREE;
5453 }
5454
5455 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
5456 \f
5457 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
5458    of the various TYPE_QUAL values.  */
5459
5460 static void
5461 set_type_quals (tree type, int type_quals)
5462 {
5463   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
5464   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
5465   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
5466   TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
5467 }
5468
5469 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS.  */
5470
5471 bool
5472 check_qualified_type (const_tree cand, const_tree base, int type_quals)
5473 {
5474   return (TYPE_QUALS (cand) == type_quals
5475           && TYPE_NAME (cand) == TYPE_NAME (base)
5476           /* Apparently this is needed for Objective-C.  */
5477           && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
5478           && attribute_list_equal (TYPE_ATTRIBUTES (cand),
5479                                    TYPE_ATTRIBUTES (base)));
5480 }
5481
5482 /* Return a version of the TYPE, qualified as indicated by the
5483    TYPE_QUALS, if one exists.  If no qualified version exists yet,
5484    return NULL_TREE.  */
5485
5486 tree
5487 get_qualified_type (tree type, int type_quals)
5488 {
5489   tree t;
5490
5491   if (TYPE_QUALS (type) == type_quals)
5492     return type;
5493
5494   /* Search the chain of variants to see if there is already one there just
5495      like the one we need to have.  If so, use that existing one.  We must
5496      preserve the TYPE_NAME, since there is code that depends on this.  */
5497   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
5498     if (check_qualified_type (t, type, type_quals))
5499       return t;
5500
5501   return NULL_TREE;
5502 }
5503
5504 /* Like get_qualified_type, but creates the type if it does not
5505    exist.  This function never returns NULL_TREE.  */
5506
5507 tree
5508 build_qualified_type (tree type, int type_quals)
5509 {
5510   tree t;
5511
5512   /* See if we already have the appropriate qualified variant.  */
5513   t = get_qualified_type (type, type_quals);
5514
5515   /* If not, build it.  */
5516   if (!t)
5517     {
5518       t = build_variant_type_copy (type);
5519       set_type_quals (t, type_quals);
5520
5521       if (TYPE_STRUCTURAL_EQUALITY_P (type))
5522         /* Propagate structural equality. */
5523         SET_TYPE_STRUCTURAL_EQUALITY (t);
5524       else if (TYPE_CANONICAL (type) != type)
5525         /* Build the underlying canonical type, since it is different
5526            from TYPE. */
5527         TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type),
5528                                                    type_quals);
5529       else
5530         /* T is its own canonical type. */
5531         TYPE_CANONICAL (t) = t;
5532
5533     }
5534
5535   return t;
5536 }
5537
5538 /* Create a new distinct copy of TYPE.  The new type is made its own
5539    MAIN_VARIANT. If TYPE requires structural equality checks, the
5540    resulting type requires structural equality checks; otherwise, its
5541    TYPE_CANONICAL points to itself. */
5542
5543 tree
5544 build_distinct_type_copy (tree type)
5545 {
5546   tree t = copy_node (type);
5547
5548   TYPE_POINTER_TO (t) = 0;
5549   TYPE_REFERENCE_TO (t) = 0;
5550
5551   /* Set the canonical type either to a new equivalence class, or
5552      propagate the need for structural equality checks. */
5553   if (TYPE_STRUCTURAL_EQUALITY_P (type))
5554     SET_TYPE_STRUCTURAL_EQUALITY (t);
5555   else
5556     TYPE_CANONICAL (t) = t;
5557
5558   /* Make it its own variant.  */
5559   TYPE_MAIN_VARIANT (t) = t;
5560   TYPE_NEXT_VARIANT (t) = 0;
5561
5562   /* Note that it is now possible for TYPE_MIN_VALUE to be a value
5563      whose TREE_TYPE is not t.  This can also happen in the Ada
5564      frontend when using subtypes.  */
5565
5566   return t;
5567 }
5568
5569 /* Create a new variant of TYPE, equivalent but distinct.  This is so
5570    the caller can modify it. TYPE_CANONICAL for the return type will
5571    be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
5572    are considered equal by the language itself (or that both types
5573    require structural equality checks). */
5574
5575 tree
5576 build_variant_type_copy (tree type)
5577 {
5578   tree t, m = TYPE_MAIN_VARIANT (type);
5579
5580   t = build_distinct_type_copy (type);
5581
5582   /* Since we're building a variant, assume that it is a non-semantic
5583      variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
5584   TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
5585
5586   /* Add the new type to the chain of variants of TYPE.  */
5587   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
5588   TYPE_NEXT_VARIANT (m) = t;
5589   TYPE_MAIN_VARIANT (t) = m;
5590
5591   return t;
5592 }
5593 \f
5594 /* Return true if the from tree in both tree maps are equal.  */
5595
5596 int
5597 tree_map_base_eq (const void *va, const void *vb)
5598 {
5599   const struct tree_map_base  *const a = (const struct tree_map_base *) va,
5600     *const b = (const struct tree_map_base *) vb;
5601   return (a->from == b->from);
5602 }
5603
5604 /* Hash a from tree in a tree_map.  */
5605
5606 unsigned int
5607 tree_map_base_hash (const void *item)
5608 {
5609   return htab_hash_pointer (((const struct tree_map_base *)item)->from);
5610 }
5611
5612 /* Return true if this tree map structure is marked for garbage collection
5613    purposes.  We simply return true if the from tree is marked, so that this
5614    structure goes away when the from tree goes away.  */
5615
5616 int
5617 tree_map_base_marked_p (const void *p)
5618 {
5619   return ggc_marked_p (((const struct tree_map_base *) p)->from);
5620 }
5621
5622 unsigned int
5623 tree_map_hash (const void *item)
5624 {
5625   return (((const struct tree_map *) item)->hash);
5626 }
5627
5628 /* Return the initialization priority for DECL.  */
5629
5630 priority_type
5631 decl_init_priority_lookup (tree decl)
5632 {
5633   struct tree_priority_map *h;
5634   struct tree_map_base in;
5635
5636   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
5637   in.from = decl;
5638   h = (struct tree_priority_map *) htab_find (init_priority_for_decl, &in);
5639   return h ? h->init : DEFAULT_INIT_PRIORITY;
5640 }
5641
5642 /* Return the finalization priority for DECL.  */
5643
5644 priority_type
5645 decl_fini_priority_lookup (tree decl)
5646 {
5647   struct tree_priority_map *h;
5648   struct tree_map_base in;
5649
5650   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
5651   in.from = decl;
5652   h = (struct tree_priority_map *) htab_find (init_priority_for_decl, &in);
5653   return h ? h->fini : DEFAULT_INIT_PRIORITY;
5654 }
5655
5656 /* Return the initialization and finalization priority information for
5657    DECL.  If there is no previous priority information, a freshly
5658    allocated structure is returned.  */
5659
5660 static struct tree_priority_map *
5661 decl_priority_info (tree decl)
5662 {
5663   struct tree_priority_map in;
5664   struct tree_priority_map *h;
5665   void **loc;
5666
5667   in.base.from = decl;
5668   loc = htab_find_slot (init_priority_for_decl, &in, INSERT);
5669   h = (struct tree_priority_map *) *loc;
5670   if (!h)
5671     {
5672       h = GGC_CNEW (struct tree_priority_map);
5673       *loc = h;
5674       h->base.from = decl;
5675       h->init = DEFAULT_INIT_PRIORITY;
5676       h->fini = DEFAULT_INIT_PRIORITY;
5677     }
5678
5679   return h;
5680 }
5681
5682 /* Set the initialization priority for DECL to PRIORITY.  */
5683
5684 void
5685 decl_init_priority_insert (tree decl, priority_type priority)
5686 {
5687   struct tree_priority_map *h;
5688
5689   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
5690   h = decl_priority_info (decl);
5691   h->init = priority;
5692 }
5693
5694 /* Set the finalization priority for DECL to PRIORITY.  */
5695
5696 void
5697 decl_fini_priority_insert (tree decl, priority_type priority)
5698 {
5699   struct tree_priority_map *h;
5700
5701   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
5702   h = decl_priority_info (decl);
5703   h->fini = priority;
5704 }
5705
5706 /* Print out the statistics for the DECL_DEBUG_EXPR hash table.  */
5707
5708 static void
5709 print_debug_expr_statistics (void)
5710 {
5711   fprintf (stderr, "DECL_DEBUG_EXPR  hash: size %ld, %ld elements, %f collisions\n",
5712            (long) htab_size (debug_expr_for_decl),
5713            (long) htab_elements (debug_expr_for_decl),
5714            htab_collisions (debug_expr_for_decl));
5715 }
5716
5717 /* Print out the statistics for the DECL_VALUE_EXPR hash table.  */
5718
5719 static void
5720 print_value_expr_statistics (void)
5721 {
5722   fprintf (stderr, "DECL_VALUE_EXPR  hash: size %ld, %ld elements, %f collisions\n",
5723            (long) htab_size (value_expr_for_decl),
5724            (long) htab_elements (value_expr_for_decl),
5725            htab_collisions (value_expr_for_decl));
5726 }
5727
5728 /* Lookup a debug expression for FROM, and return it if we find one.  */
5729
5730 tree
5731 decl_debug_expr_lookup (tree from)
5732 {
5733   struct tree_map *h, in;
5734   in.base.from = from;
5735
5736   h = (struct tree_map *) htab_find_with_hash (debug_expr_for_decl, &in,
5737                                                htab_hash_pointer (from));
5738   if (h)
5739     return h->to;
5740   return NULL_TREE;
5741 }
5742
5743 /* Insert a mapping FROM->TO in the debug expression hashtable.  */
5744
5745 void
5746 decl_debug_expr_insert (tree from, tree to)
5747 {
5748   struct tree_map *h;
5749   void **loc;
5750
5751   h = GGC_NEW (struct tree_map);
5752   h->hash = htab_hash_pointer (from);
5753   h->base.from = from;
5754   h->to = to;
5755   loc = htab_find_slot_with_hash (debug_expr_for_decl, h, h->hash, INSERT);
5756   *(struct tree_map **) loc = h;
5757 }
5758
5759 /* Lookup a value expression for FROM, and return it if we find one.  */
5760
5761 tree
5762 decl_value_expr_lookup (tree from)
5763 {
5764   struct tree_map *h, in;
5765   in.base.from = from;
5766
5767   h = (struct tree_map *) htab_find_with_hash (value_expr_for_decl, &in,
5768                                                htab_hash_pointer (from));
5769   if (h)
5770     return h->to;
5771   return NULL_TREE;
5772 }
5773
5774 /* Insert a mapping FROM->TO in the value expression hashtable.  */
5775
5776 void
5777 decl_value_expr_insert (tree from, tree to)
5778 {
5779   struct tree_map *h;
5780   void **loc;
5781
5782   h = GGC_NEW (struct tree_map);
5783   h->hash = htab_hash_pointer (from);
5784   h->base.from = from;
5785   h->to = to;
5786   loc = htab_find_slot_with_hash (value_expr_for_decl, h, h->hash, INSERT);
5787   *(struct tree_map **) loc = h;
5788 }
5789
5790 /* Hashing of types so that we don't make duplicates.
5791    The entry point is `type_hash_canon'.  */
5792
5793 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
5794    with types in the TREE_VALUE slots), by adding the hash codes
5795    of the individual types.  */
5796
5797 static unsigned int
5798 type_hash_list (const_tree list, hashval_t hashcode)
5799 {
5800   const_tree tail;
5801
5802   for (tail = list; tail; tail = TREE_CHAIN (tail))
5803     if (TREE_VALUE (tail) != error_mark_node)
5804       hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
5805                                         hashcode);
5806
5807   return hashcode;
5808 }
5809
5810 /* These are the Hashtable callback functions.  */
5811
5812 /* Returns true iff the types are equivalent.  */
5813
5814 static int
5815 type_hash_eq (const void *va, const void *vb)
5816 {
5817   const struct type_hash *const a = (const struct type_hash *) va,
5818     *const b = (const struct type_hash *) vb;
5819
5820   /* First test the things that are the same for all types.  */
5821   if (a->hash != b->hash
5822       || TREE_CODE (a->type) != TREE_CODE (b->type)
5823       || TREE_TYPE (a->type) != TREE_TYPE (b->type)
5824       || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
5825                                  TYPE_ATTRIBUTES (b->type))
5826       || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
5827       || TYPE_MODE (a->type) != TYPE_MODE (b->type)
5828       || (TREE_CODE (a->type) != COMPLEX_TYPE
5829           && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
5830     return 0;
5831
5832   switch (TREE_CODE (a->type))
5833     {
5834     case VOID_TYPE:
5835     case COMPLEX_TYPE:
5836     case POINTER_TYPE:
5837     case REFERENCE_TYPE:
5838       return 1;
5839
5840     case VECTOR_TYPE:
5841       return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
5842
5843     case ENUMERAL_TYPE:
5844       if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
5845           && !(TYPE_VALUES (a->type)
5846                && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
5847                && TYPE_VALUES (b->type)
5848                && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
5849                && type_list_equal (TYPE_VALUES (a->type),
5850                                    TYPE_VALUES (b->type))))
5851         return 0;
5852
5853       /* ... fall through ... */
5854
5855     case INTEGER_TYPE:
5856     case REAL_TYPE:
5857     case BOOLEAN_TYPE:
5858       return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
5859                || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
5860                                       TYPE_MAX_VALUE (b->type)))
5861               && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
5862                   || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
5863                                          TYPE_MIN_VALUE (b->type))));
5864
5865     case FIXED_POINT_TYPE:
5866       return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
5867
5868     case OFFSET_TYPE:
5869       return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
5870
5871     case METHOD_TYPE:
5872       return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
5873               && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
5874                   || (TYPE_ARG_TYPES (a->type)
5875                       && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
5876                       && TYPE_ARG_TYPES (b->type)
5877                       && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
5878                       && type_list_equal (TYPE_ARG_TYPES (a->type),
5879                                           TYPE_ARG_TYPES (b->type)))));
5880
5881     case ARRAY_TYPE:
5882       return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
5883
5884     case RECORD_TYPE:
5885     case UNION_TYPE:
5886     case QUAL_UNION_TYPE:
5887       return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
5888               || (TYPE_FIELDS (a->type)
5889                   && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
5890                   && TYPE_FIELDS (b->type)
5891                   && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
5892                   && type_list_equal (TYPE_FIELDS (a->type),
5893                                       TYPE_FIELDS (b->type))));
5894
5895     case FUNCTION_TYPE:
5896       if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
5897           || (TYPE_ARG_TYPES (a->type)
5898               && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
5899               && TYPE_ARG_TYPES (b->type)
5900               && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
5901               && type_list_equal (TYPE_ARG_TYPES (a->type),
5902                                   TYPE_ARG_TYPES (b->type))))
5903         break;
5904       return 0;
5905
5906     default:
5907       return 0;
5908     }
5909
5910   if (lang_hooks.types.type_hash_eq != NULL)
5911     return lang_hooks.types.type_hash_eq (a->type, b->type);
5912
5913   return 1;
5914 }
5915
5916 /* Return the cached hash value.  */
5917
5918 static hashval_t
5919 type_hash_hash (const void *item)
5920 {
5921   return ((const struct type_hash *) item)->hash;
5922 }
5923
5924 /* Look in the type hash table for a type isomorphic to TYPE.
5925    If one is found, return it.  Otherwise return 0.  */
5926
5927 tree
5928 type_hash_lookup (hashval_t hashcode, tree type)
5929 {
5930   struct type_hash *h, in;
5931
5932   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
5933      must call that routine before comparing TYPE_ALIGNs.  */
5934   layout_type (type);
5935
5936   in.hash = hashcode;
5937   in.type = type;
5938
5939   h = (struct type_hash *) htab_find_with_hash (type_hash_table, &in,
5940                                                 hashcode);
5941   if (h)
5942     return h->type;
5943   return NULL_TREE;
5944 }
5945
5946 /* Add an entry to the type-hash-table
5947    for a type TYPE whose hash code is HASHCODE.  */
5948
5949 void
5950 type_hash_add (hashval_t hashcode, tree type)
5951 {
5952   struct type_hash *h;
5953   void **loc;
5954
5955   h = GGC_NEW (struct type_hash);
5956   h->hash = hashcode;
5957   h->type = type;
5958   loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
5959   *loc = (void *)h;
5960 }
5961
5962 /* Given TYPE, and HASHCODE its hash code, return the canonical
5963    object for an identical type if one already exists.
5964    Otherwise, return TYPE, and record it as the canonical object.
5965
5966    To use this function, first create a type of the sort you want.
5967    Then compute its hash code from the fields of the type that
5968    make it different from other similar types.
5969    Then call this function and use the value.  */
5970
5971 tree
5972 type_hash_canon (unsigned int hashcode, tree type)
5973 {
5974   tree t1;
5975
5976   /* The hash table only contains main variants, so ensure that's what we're
5977      being passed.  */
5978   gcc_assert (TYPE_MAIN_VARIANT (type) == type);
5979
5980   if (!lang_hooks.types.hash_types)
5981     return type;
5982
5983   /* See if the type is in the hash table already.  If so, return it.
5984      Otherwise, add the type.  */
5985   t1 = type_hash_lookup (hashcode, type);
5986   if (t1 != 0)
5987     {
5988 #ifdef GATHER_STATISTICS
5989       tree_node_counts[(int) t_kind]--;
5990       tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
5991 #endif
5992       return t1;
5993     }
5994   else
5995     {
5996       type_hash_add (hashcode, type);
5997       return type;
5998     }
5999 }
6000
6001 /* See if the data pointed to by the type hash table is marked.  We consider
6002    it marked if the type is marked or if a debug type number or symbol
6003    table entry has been made for the type.  This reduces the amount of
6004    debugging output and eliminates that dependency of the debug output on
6005    the number of garbage collections.  */
6006
6007 static int
6008 type_hash_marked_p (const void *p)
6009 {
6010   const_tree const type = ((const struct type_hash *) p)->type;
6011
6012   return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
6013 }
6014
6015 static void
6016 print_type_hash_statistics (void)
6017 {
6018   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
6019            (long) htab_size (type_hash_table),
6020            (long) htab_elements (type_hash_table),
6021            htab_collisions (type_hash_table));
6022 }
6023
6024 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
6025    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
6026    by adding the hash codes of the individual attributes.  */
6027
6028 static unsigned int
6029 attribute_hash_list (const_tree list, hashval_t hashcode)
6030 {
6031   const_tree tail;
6032
6033   for (tail = list; tail; tail = TREE_CHAIN (tail))
6034     /* ??? Do we want to add in TREE_VALUE too? */
6035     hashcode = iterative_hash_object
6036       (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
6037   return hashcode;
6038 }
6039
6040 /* Given two lists of attributes, return true if list l2 is
6041    equivalent to l1.  */
6042
6043 int
6044 attribute_list_equal (const_tree l1, const_tree l2)
6045 {
6046   return attribute_list_contained (l1, l2)
6047          && attribute_list_contained (l2, l1);
6048 }
6049
6050 /* Given two lists of attributes, return true if list L2 is
6051    completely contained within L1.  */
6052 /* ??? This would be faster if attribute names were stored in a canonicalized
6053    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
6054    must be used to show these elements are equivalent (which they are).  */
6055 /* ??? It's not clear that attributes with arguments will always be handled
6056    correctly.  */
6057
6058 int
6059 attribute_list_contained (const_tree l1, const_tree l2)
6060 {
6061   const_tree t1, t2;
6062
6063   /* First check the obvious, maybe the lists are identical.  */
6064   if (l1 == l2)
6065     return 1;
6066
6067   /* Maybe the lists are similar.  */
6068   for (t1 = l1, t2 = l2;
6069        t1 != 0 && t2 != 0
6070         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
6071         && TREE_VALUE (t1) == TREE_VALUE (t2);
6072        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
6073
6074   /* Maybe the lists are equal.  */
6075   if (t1 == 0 && t2 == 0)
6076     return 1;
6077
6078   for (; t2 != 0; t2 = TREE_CHAIN (t2))
6079     {
6080       const_tree attr;
6081       /* This CONST_CAST is okay because lookup_attribute does not
6082          modify its argument and the return value is assigned to a
6083          const_tree.  */
6084       for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
6085                                     CONST_CAST_TREE(l1));
6086            attr != NULL_TREE;
6087            attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
6088                                     TREE_CHAIN (attr)))
6089         {
6090           if (TREE_VALUE (t2) != NULL
6091               && TREE_CODE (TREE_VALUE (t2)) == TREE_LIST
6092               && TREE_VALUE (attr) != NULL
6093               && TREE_CODE (TREE_VALUE (attr)) == TREE_LIST)
6094             {
6095               if (simple_cst_list_equal (TREE_VALUE (t2),
6096                                          TREE_VALUE (attr)) == 1)
6097                 break;
6098             }
6099           else if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
6100             break;
6101         }
6102
6103       if (attr == 0)
6104         return 0;
6105     }
6106
6107   return 1;
6108 }
6109
6110 /* Given two lists of types
6111    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
6112    return 1 if the lists contain the same types in the same order.
6113    Also, the TREE_PURPOSEs must match.  */
6114
6115 int
6116 type_list_equal (const_tree l1, const_tree l2)
6117 {
6118   const_tree t1, t2;
6119
6120   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
6121     if (TREE_VALUE (t1) != TREE_VALUE (t2)
6122         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
6123             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
6124                   && (TREE_TYPE (TREE_PURPOSE (t1))
6125                       == TREE_TYPE (TREE_PURPOSE (t2))))))
6126       return 0;
6127
6128   return t1 == t2;
6129 }
6130
6131 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
6132    given by TYPE.  If the argument list accepts variable arguments,
6133    then this function counts only the ordinary arguments.  */
6134
6135 int
6136 type_num_arguments (const_tree type)
6137 {
6138   int i = 0;
6139   tree t;
6140
6141   for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6142     /* If the function does not take a variable number of arguments,
6143        the last element in the list will have type `void'.  */
6144     if (VOID_TYPE_P (TREE_VALUE (t)))
6145       break;
6146     else
6147       ++i;
6148
6149   return i;
6150 }
6151
6152 /* Nonzero if integer constants T1 and T2
6153    represent the same constant value.  */
6154
6155 int
6156 tree_int_cst_equal (const_tree t1, const_tree t2)
6157 {
6158   if (t1 == t2)
6159     return 1;
6160
6161   if (t1 == 0 || t2 == 0)
6162     return 0;
6163
6164   if (TREE_CODE (t1) == INTEGER_CST
6165       && TREE_CODE (t2) == INTEGER_CST
6166       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
6167       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
6168     return 1;
6169
6170   return 0;
6171 }
6172
6173 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
6174    The precise way of comparison depends on their data type.  */
6175
6176 int
6177 tree_int_cst_lt (const_tree t1, const_tree t2)
6178 {
6179   if (t1 == t2)
6180     return 0;
6181
6182   if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
6183     {
6184       int t1_sgn = tree_int_cst_sgn (t1);
6185       int t2_sgn = tree_int_cst_sgn (t2);
6186
6187       if (t1_sgn < t2_sgn)
6188         return 1;
6189       else if (t1_sgn > t2_sgn)
6190         return 0;
6191       /* Otherwise, both are non-negative, so we compare them as
6192          unsigned just in case one of them would overflow a signed
6193          type.  */
6194     }
6195   else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
6196     return INT_CST_LT (t1, t2);
6197
6198   return INT_CST_LT_UNSIGNED (t1, t2);
6199 }
6200
6201 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2.  */
6202
6203 int
6204 tree_int_cst_compare (const_tree t1, const_tree t2)
6205 {
6206   if (tree_int_cst_lt (t1, t2))
6207     return -1;
6208   else if (tree_int_cst_lt (t2, t1))
6209     return 1;
6210   else
6211     return 0;
6212 }
6213
6214 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
6215    the host.  If POS is zero, the value can be represented in a single
6216    HOST_WIDE_INT.  If POS is nonzero, the value must be non-negative and can
6217    be represented in a single unsigned HOST_WIDE_INT.  */
6218
6219 int
6220 host_integerp (const_tree t, int pos)
6221 {
6222   if (t == NULL_TREE)
6223     return 0;
6224
6225   return (TREE_CODE (t) == INTEGER_CST
6226           && ((TREE_INT_CST_HIGH (t) == 0
6227                && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
6228               || (! pos && TREE_INT_CST_HIGH (t) == -1
6229                   && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
6230                   && (!TYPE_UNSIGNED (TREE_TYPE (t))
6231                       || (TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
6232                           && TYPE_IS_SIZETYPE (TREE_TYPE (t)))))
6233               || (pos && TREE_INT_CST_HIGH (t) == 0)));
6234 }
6235
6236 /* Return the HOST_WIDE_INT least significant bits of T if it is an
6237    INTEGER_CST and there is no overflow.  POS is nonzero if the result must
6238    be non-negative.  We must be able to satisfy the above conditions.  */
6239
6240 HOST_WIDE_INT
6241 tree_low_cst (const_tree t, int pos)
6242 {
6243   gcc_assert (host_integerp (t, pos));
6244   return TREE_INT_CST_LOW (t);
6245 }
6246
6247 /* Return the most significant bit of the integer constant T.  */
6248
6249 int
6250 tree_int_cst_msb (const_tree t)
6251 {
6252   int prec;
6253   HOST_WIDE_INT h;
6254   unsigned HOST_WIDE_INT l;
6255
6256   /* Note that using TYPE_PRECISION here is wrong.  We care about the
6257      actual bits, not the (arbitrary) range of the type.  */
6258   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
6259   rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
6260                  2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
6261   return (l & 1) == 1;
6262 }
6263
6264 /* Return an indication of the sign of the integer constant T.
6265    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
6266    Note that -1 will never be returned if T's type is unsigned.  */
6267
6268 int
6269 tree_int_cst_sgn (const_tree t)
6270 {
6271   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
6272     return 0;
6273   else if (TYPE_UNSIGNED (TREE_TYPE (t)))
6274     return 1;
6275   else if (TREE_INT_CST_HIGH (t) < 0)
6276     return -1;
6277   else
6278     return 1;
6279 }
6280
6281 /* Return the minimum number of bits needed to represent VALUE in a
6282    signed or unsigned type, UNSIGNEDP says which.  */
6283
6284 unsigned int
6285 tree_int_cst_min_precision (tree value, bool unsignedp)
6286 {
6287   int log;
6288
6289   /* If the value is negative, compute its negative minus 1.  The latter
6290      adjustment is because the absolute value of the largest negative value
6291      is one larger than the largest positive value.  This is equivalent to
6292      a bit-wise negation, so use that operation instead.  */
6293
6294   if (tree_int_cst_sgn (value) < 0)
6295     value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
6296
6297   /* Return the number of bits needed, taking into account the fact
6298      that we need one more bit for a signed than unsigned type.  */
6299
6300   if (integer_zerop (value))
6301     log = 0;
6302   else
6303     log = tree_floor_log2 (value);
6304
6305   return log + 1 + !unsignedp;
6306 }
6307
6308 /* Compare two constructor-element-type constants.  Return 1 if the lists
6309    are known to be equal; otherwise return 0.  */
6310
6311 int
6312 simple_cst_list_equal (const_tree l1, const_tree l2)
6313 {
6314   while (l1 != NULL_TREE && l2 != NULL_TREE)
6315     {
6316       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
6317         return 0;
6318
6319       l1 = TREE_CHAIN (l1);
6320       l2 = TREE_CHAIN (l2);
6321     }
6322
6323   return l1 == l2;
6324 }
6325
6326 /* Return truthvalue of whether T1 is the same tree structure as T2.
6327    Return 1 if they are the same.
6328    Return 0 if they are understandably different.
6329    Return -1 if either contains tree structure not understood by
6330    this function.  */
6331
6332 int
6333 simple_cst_equal (const_tree t1, const_tree t2)
6334 {
6335   enum tree_code code1, code2;
6336   int cmp;
6337   int i;
6338
6339   if (t1 == t2)
6340     return 1;
6341   if (t1 == 0 || t2 == 0)
6342     return 0;
6343
6344   code1 = TREE_CODE (t1);
6345   code2 = TREE_CODE (t2);
6346
6347   if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
6348     {
6349       if (CONVERT_EXPR_CODE_P (code2)
6350           || code2 == NON_LVALUE_EXPR)
6351         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6352       else
6353         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
6354     }
6355
6356   else if (CONVERT_EXPR_CODE_P (code2)
6357            || code2 == NON_LVALUE_EXPR)
6358     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
6359
6360   if (code1 != code2)
6361     return 0;
6362
6363   switch (code1)
6364     {
6365     case INTEGER_CST:
6366       return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
6367               && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
6368
6369     case REAL_CST:
6370       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
6371
6372     case FIXED_CST:
6373       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
6374
6375     case STRING_CST:
6376       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
6377               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
6378                          TREE_STRING_LENGTH (t1)));
6379
6380     case CONSTRUCTOR:
6381       {
6382         unsigned HOST_WIDE_INT idx;
6383         VEC(constructor_elt, gc) *v1 = CONSTRUCTOR_ELTS (t1);
6384         VEC(constructor_elt, gc) *v2 = CONSTRUCTOR_ELTS (t2);
6385
6386         if (VEC_length (constructor_elt, v1) != VEC_length (constructor_elt, v2))
6387           return false;
6388
6389         for (idx = 0; idx < VEC_length (constructor_elt, v1); ++idx)
6390           /* ??? Should we handle also fields here? */
6391           if (!simple_cst_equal (VEC_index (constructor_elt, v1, idx)->value,
6392                                  VEC_index (constructor_elt, v2, idx)->value))
6393             return false;
6394         return true;
6395       }
6396
6397     case SAVE_EXPR:
6398       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6399
6400     case CALL_EXPR:
6401       cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
6402       if (cmp <= 0)
6403         return cmp;
6404       if (call_expr_nargs (t1) != call_expr_nargs (t2))
6405         return 0;
6406       {
6407         const_tree arg1, arg2;
6408         const_call_expr_arg_iterator iter1, iter2;
6409         for (arg1 = first_const_call_expr_arg (t1, &iter1),
6410                arg2 = first_const_call_expr_arg (t2, &iter2);
6411              arg1 && arg2;
6412              arg1 = next_const_call_expr_arg (&iter1),
6413                arg2 = next_const_call_expr_arg (&iter2))
6414           {
6415             cmp = simple_cst_equal (arg1, arg2);
6416             if (cmp <= 0)
6417               return cmp;
6418           }
6419         return arg1 == arg2;
6420       }
6421
6422     case TARGET_EXPR:
6423       /* Special case: if either target is an unallocated VAR_DECL,
6424          it means that it's going to be unified with whatever the
6425          TARGET_EXPR is really supposed to initialize, so treat it
6426          as being equivalent to anything.  */
6427       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
6428            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
6429            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
6430           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
6431               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
6432               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
6433         cmp = 1;
6434       else
6435         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6436
6437       if (cmp <= 0)
6438         return cmp;
6439
6440       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
6441
6442     case WITH_CLEANUP_EXPR:
6443       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6444       if (cmp <= 0)
6445         return cmp;
6446
6447       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
6448
6449     case COMPONENT_REF:
6450       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
6451         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6452
6453       return 0;
6454
6455     case VAR_DECL:
6456     case PARM_DECL:
6457     case CONST_DECL:
6458     case FUNCTION_DECL:
6459       return 0;
6460
6461     default:
6462       break;
6463     }
6464
6465   /* This general rule works for most tree codes.  All exceptions should be
6466      handled above.  If this is a language-specific tree code, we can't
6467      trust what might be in the operand, so say we don't know
6468      the situation.  */
6469   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
6470     return -1;
6471
6472   switch (TREE_CODE_CLASS (code1))
6473     {
6474     case tcc_unary:
6475     case tcc_binary:
6476     case tcc_comparison:
6477     case tcc_expression:
6478     case tcc_reference:
6479     case tcc_statement:
6480       cmp = 1;
6481       for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
6482         {
6483           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
6484           if (cmp <= 0)
6485             return cmp;
6486         }
6487
6488       return cmp;
6489
6490     default:
6491       return -1;
6492     }
6493 }
6494
6495 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
6496    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
6497    than U, respectively.  */
6498
6499 int
6500 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
6501 {
6502   if (tree_int_cst_sgn (t) < 0)
6503     return -1;
6504   else if (TREE_INT_CST_HIGH (t) != 0)
6505     return 1;
6506   else if (TREE_INT_CST_LOW (t) == u)
6507     return 0;
6508   else if (TREE_INT_CST_LOW (t) < u)
6509     return -1;
6510   else
6511     return 1;
6512 }
6513
6514 /* Return true if CODE represents an associative tree code.  Otherwise
6515    return false.  */
6516 bool
6517 associative_tree_code (enum tree_code code)
6518 {
6519   switch (code)
6520     {
6521     case BIT_IOR_EXPR:
6522     case BIT_AND_EXPR:
6523     case BIT_XOR_EXPR:
6524     case PLUS_EXPR:
6525     case MULT_EXPR:
6526     case MIN_EXPR:
6527     case MAX_EXPR:
6528       return true;
6529
6530     default:
6531       break;
6532     }
6533   return false;
6534 }
6535
6536 /* Return true if CODE represents a commutative tree code.  Otherwise
6537    return false.  */
6538 bool
6539 commutative_tree_code (enum tree_code code)
6540 {
6541   switch (code)
6542     {
6543     case PLUS_EXPR:
6544     case MULT_EXPR:
6545     case MIN_EXPR:
6546     case MAX_EXPR:
6547     case BIT_IOR_EXPR:
6548     case BIT_XOR_EXPR:
6549     case BIT_AND_EXPR:
6550     case NE_EXPR:
6551     case EQ_EXPR:
6552     case UNORDERED_EXPR:
6553     case ORDERED_EXPR:
6554     case UNEQ_EXPR:
6555     case LTGT_EXPR:
6556     case TRUTH_AND_EXPR:
6557     case TRUTH_XOR_EXPR:
6558     case TRUTH_OR_EXPR:
6559       return true;
6560
6561     default:
6562       break;
6563     }
6564   return false;
6565 }
6566
6567 /* Generate a hash value for an expression.  This can be used iteratively
6568    by passing a previous result as the VAL argument.
6569
6570    This function is intended to produce the same hash for expressions which
6571    would compare equal using operand_equal_p.  */
6572
6573 hashval_t
6574 iterative_hash_expr (const_tree t, hashval_t val)
6575 {
6576   int i;
6577   enum tree_code code;
6578   char tclass;
6579
6580   if (t == NULL_TREE)
6581     return iterative_hash_hashval_t (0, val);
6582
6583   code = TREE_CODE (t);
6584
6585   switch (code)
6586     {
6587     /* Alas, constants aren't shared, so we can't rely on pointer
6588        identity.  */
6589     case INTEGER_CST:
6590       val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
6591       return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
6592     case REAL_CST:
6593       {
6594         unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
6595
6596         return iterative_hash_hashval_t (val2, val);
6597       }
6598     case FIXED_CST:
6599       {
6600         unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
6601
6602         return iterative_hash_hashval_t (val2, val);
6603       }
6604     case STRING_CST:
6605       return iterative_hash (TREE_STRING_POINTER (t),
6606                              TREE_STRING_LENGTH (t), val);
6607     case COMPLEX_CST:
6608       val = iterative_hash_expr (TREE_REALPART (t), val);
6609       return iterative_hash_expr (TREE_IMAGPART (t), val);
6610     case VECTOR_CST:
6611       return iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
6612     case SSA_NAME:
6613       /* We can just compare by pointer.  */
6614       return iterative_hash_host_wide_int (SSA_NAME_VERSION (t), val);
6615     case PLACEHOLDER_EXPR:
6616       /* The node itself doesn't matter.  */
6617       return val;
6618     case TREE_LIST:
6619       /* A list of expressions, for a CALL_EXPR or as the elements of a
6620          VECTOR_CST.  */
6621       for (; t; t = TREE_CHAIN (t))
6622         val = iterative_hash_expr (TREE_VALUE (t), val);
6623       return val;
6624     case CONSTRUCTOR:
6625       {
6626         unsigned HOST_WIDE_INT idx;
6627         tree field, value;
6628         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
6629           {
6630             val = iterative_hash_expr (field, val);
6631             val = iterative_hash_expr (value, val);
6632           }
6633         return val;
6634       }
6635     case FUNCTION_DECL:
6636       /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
6637          Otherwise nodes that compare equal according to operand_equal_p might
6638          get different hash codes.  However, don't do this for machine specific
6639          or front end builtins, since the function code is overloaded in those
6640          cases.  */
6641       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
6642           && built_in_decls[DECL_FUNCTION_CODE (t)])
6643         {
6644           t = built_in_decls[DECL_FUNCTION_CODE (t)];
6645           code = TREE_CODE (t);
6646         }
6647       /* FALL THROUGH */
6648     default:
6649       tclass = TREE_CODE_CLASS (code);
6650
6651       if (tclass == tcc_declaration)
6652         {
6653           /* DECL's have a unique ID */
6654           val = iterative_hash_host_wide_int (DECL_UID (t), val);
6655         }
6656       else
6657         {
6658           gcc_assert (IS_EXPR_CODE_CLASS (tclass));
6659
6660           val = iterative_hash_object (code, val);
6661
6662           /* Don't hash the type, that can lead to having nodes which
6663              compare equal according to operand_equal_p, but which
6664              have different hash codes.  */
6665           if (CONVERT_EXPR_CODE_P (code)
6666               || code == NON_LVALUE_EXPR)
6667             {
6668               /* Make sure to include signness in the hash computation.  */
6669               val += TYPE_UNSIGNED (TREE_TYPE (t));
6670               val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
6671             }
6672
6673           else if (commutative_tree_code (code))
6674             {
6675               /* It's a commutative expression.  We want to hash it the same
6676                  however it appears.  We do this by first hashing both operands
6677                  and then rehashing based on the order of their independent
6678                  hashes.  */
6679               hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
6680               hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
6681               hashval_t t;
6682
6683               if (one > two)
6684                 t = one, one = two, two = t;
6685
6686               val = iterative_hash_hashval_t (one, val);
6687               val = iterative_hash_hashval_t (two, val);
6688             }
6689           else
6690             for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
6691               val = iterative_hash_expr (TREE_OPERAND (t, i), val);
6692         }
6693       return val;
6694       break;
6695     }
6696 }
6697
6698 /* Generate a hash value for a pair of expressions.  This can be used
6699    iteratively by passing a previous result as the VAL argument.
6700
6701    The same hash value is always returned for a given pair of expressions,
6702    regardless of the order in which they are presented.  This is useful in
6703    hashing the operands of commutative functions.  */
6704
6705 hashval_t
6706 iterative_hash_exprs_commutative (const_tree t1,
6707                                   const_tree t2, hashval_t val)
6708 {
6709   hashval_t one = iterative_hash_expr (t1, 0);
6710   hashval_t two = iterative_hash_expr (t2, 0);
6711   hashval_t t;
6712
6713   if (one > two)
6714     t = one, one = two, two = t;
6715   val = iterative_hash_hashval_t (one, val);
6716   val = iterative_hash_hashval_t (two, val);
6717
6718   return val;
6719 }
6720 \f
6721 /* Constructors for pointer, array and function types.
6722    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
6723    constructed by language-dependent code, not here.)  */
6724
6725 /* Construct, lay out and return the type of pointers to TO_TYPE with
6726    mode MODE.  If CAN_ALIAS_ALL is TRUE, indicate this type can
6727    reference all of memory. If such a type has already been
6728    constructed, reuse it.  */
6729
6730 tree
6731 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
6732                              bool can_alias_all)
6733 {
6734   tree t;
6735
6736   if (to_type == error_mark_node)
6737     return error_mark_node;
6738
6739   /* If the pointed-to type has the may_alias attribute set, force
6740      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
6741   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
6742     can_alias_all = true;
6743
6744   /* In some cases, languages will have things that aren't a POINTER_TYPE
6745      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
6746      In that case, return that type without regard to the rest of our
6747      operands.
6748
6749      ??? This is a kludge, but consistent with the way this function has
6750      always operated and there doesn't seem to be a good way to avoid this
6751      at the moment.  */
6752   if (TYPE_POINTER_TO (to_type) != 0
6753       && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
6754     return TYPE_POINTER_TO (to_type);
6755
6756   /* First, if we already have a type for pointers to TO_TYPE and it's
6757      the proper mode, use it.  */
6758   for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
6759     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
6760       return t;
6761
6762   t = make_node (POINTER_TYPE);
6763
6764   TREE_TYPE (t) = to_type;
6765   SET_TYPE_MODE (t, mode);
6766   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
6767   TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
6768   TYPE_POINTER_TO (to_type) = t;
6769
6770   if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
6771     SET_TYPE_STRUCTURAL_EQUALITY (t);
6772   else if (TYPE_CANONICAL (to_type) != to_type)
6773     TYPE_CANONICAL (t)
6774       = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
6775                                      mode, can_alias_all);
6776
6777   /* Lay out the type.  This function has many callers that are concerned
6778      with expression-construction, and this simplifies them all.  */
6779   layout_type (t);
6780
6781   return t;
6782 }
6783
6784 /* By default build pointers in ptr_mode.  */
6785
6786 tree
6787 build_pointer_type (tree to_type)
6788 {
6789   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
6790                                               : TYPE_ADDR_SPACE (to_type);
6791   enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
6792   return build_pointer_type_for_mode (to_type, pointer_mode, false);
6793 }
6794
6795 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
6796
6797 tree
6798 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
6799                                bool can_alias_all)
6800 {
6801   tree t;
6802
6803   if (to_type == error_mark_node)
6804     return error_mark_node;
6805
6806   /* If the pointed-to type has the may_alias attribute set, force
6807      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
6808   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
6809     can_alias_all = true;
6810
6811   /* In some cases, languages will have things that aren't a REFERENCE_TYPE
6812      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
6813      In that case, return that type without regard to the rest of our
6814      operands.
6815
6816      ??? This is a kludge, but consistent with the way this function has
6817      always operated and there doesn't seem to be a good way to avoid this
6818      at the moment.  */
6819   if (TYPE_REFERENCE_TO (to_type) != 0
6820       && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
6821     return TYPE_REFERENCE_TO (to_type);
6822
6823   /* First, if we already have a type for pointers to TO_TYPE and it's
6824      the proper mode, use it.  */
6825   for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
6826     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
6827       return t;
6828
6829   t = make_node (REFERENCE_TYPE);
6830
6831   TREE_TYPE (t) = to_type;
6832   SET_TYPE_MODE (t, mode);
6833   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
6834   TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
6835   TYPE_REFERENCE_TO (to_type) = t;
6836
6837   if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
6838     SET_TYPE_STRUCTURAL_EQUALITY (t);
6839   else if (TYPE_CANONICAL (to_type) != to_type)
6840     TYPE_CANONICAL (t)
6841       = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
6842                                        mode, can_alias_all);
6843
6844   layout_type (t);
6845
6846   return t;
6847 }
6848
6849
6850 /* Build the node for the type of references-to-TO_TYPE by default
6851    in ptr_mode.  */
6852
6853 tree
6854 build_reference_type (tree to_type)
6855 {
6856   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
6857                                               : TYPE_ADDR_SPACE (to_type);
6858   enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
6859   return build_reference_type_for_mode (to_type, pointer_mode, false);
6860 }
6861
6862 /* Build a type that is compatible with t but has no cv quals anywhere
6863    in its type, thus
6864
6865    const char *const *const *  ->  char ***.  */
6866
6867 tree
6868 build_type_no_quals (tree t)
6869 {
6870   switch (TREE_CODE (t))
6871     {
6872     case POINTER_TYPE:
6873       return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
6874                                           TYPE_MODE (t),
6875                                           TYPE_REF_CAN_ALIAS_ALL (t));
6876     case REFERENCE_TYPE:
6877       return
6878         build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
6879                                        TYPE_MODE (t),
6880                                        TYPE_REF_CAN_ALIAS_ALL (t));
6881     default:
6882       return TYPE_MAIN_VARIANT (t);
6883     }
6884 }
6885
6886 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
6887    MAXVAL should be the maximum value in the domain
6888    (one less than the length of the array).
6889
6890    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
6891    We don't enforce this limit, that is up to caller (e.g. language front end).
6892    The limit exists because the result is a signed type and we don't handle
6893    sizes that use more than one HOST_WIDE_INT.  */
6894
6895 tree
6896 build_index_type (tree maxval)
6897 {
6898   tree itype = make_node (INTEGER_TYPE);
6899
6900   TREE_TYPE (itype) = sizetype;
6901   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
6902   TYPE_MIN_VALUE (itype) = size_zero_node;
6903   TYPE_MAX_VALUE (itype) = fold_convert (sizetype, maxval);
6904   SET_TYPE_MODE (itype, TYPE_MODE (sizetype));
6905   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
6906   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
6907   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
6908   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
6909
6910   if (host_integerp (maxval, 1))
6911     return type_hash_canon (tree_low_cst (maxval, 1), itype);
6912   else
6913     {
6914       /* Since we cannot hash this type, we need to compare it using
6915          structural equality checks. */
6916       SET_TYPE_STRUCTURAL_EQUALITY (itype);
6917       return itype;
6918     }
6919 }
6920
6921 #define MAX_INT_CACHED_PREC \
6922   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
6923 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
6924
6925 /* Builds a signed or unsigned integer type of precision PRECISION.
6926    Used for C bitfields whose precision does not match that of
6927    built-in target types.  */
6928 tree
6929 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
6930                                 int unsignedp)
6931 {
6932   tree itype, ret;
6933
6934   if (unsignedp)
6935     unsignedp = MAX_INT_CACHED_PREC + 1;
6936     
6937   if (precision <= MAX_INT_CACHED_PREC)
6938     {
6939       itype = nonstandard_integer_type_cache[precision + unsignedp];
6940       if (itype)
6941         return itype;
6942     }
6943
6944   itype = make_node (INTEGER_TYPE);
6945   TYPE_PRECISION (itype) = precision;
6946
6947   if (unsignedp)
6948     fixup_unsigned_type (itype);
6949   else
6950     fixup_signed_type (itype);
6951
6952   ret = itype;
6953   if (host_integerp (TYPE_MAX_VALUE (itype), 1))
6954     ret = type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype), 1), itype);
6955   if (precision <= MAX_INT_CACHED_PREC && lang_hooks.types.hash_types)
6956     nonstandard_integer_type_cache[precision + unsignedp] = ret;
6957
6958   return ret;
6959 }
6960
6961 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
6962    ENUMERAL_TYPE or BOOLEAN_TYPE), with low bound LOWVAL and
6963    high bound HIGHVAL.  If TYPE is NULL, sizetype is used.  */
6964
6965 tree
6966 build_range_type (tree type, tree lowval, tree highval)
6967 {
6968   tree itype = make_node (INTEGER_TYPE);
6969
6970   TREE_TYPE (itype) = type;
6971   if (type == NULL_TREE)
6972     type = sizetype;
6973
6974   TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
6975   TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
6976
6977   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
6978   SET_TYPE_MODE (itype, TYPE_MODE (type));
6979   TYPE_SIZE (itype) = TYPE_SIZE (type);
6980   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
6981   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
6982   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
6983
6984   if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
6985     return type_hash_canon (tree_low_cst (highval, 0)
6986                             - tree_low_cst (lowval, 0),
6987                             itype);
6988   else
6989     return itype;
6990 }
6991
6992 /* Return true if the debug information for TYPE, a subtype, should be emitted
6993    as a subrange type.  If so, set LOWVAL to the low bound and HIGHVAL to the
6994    high bound, respectively.  Sometimes doing so unnecessarily obfuscates the
6995    debug info and doesn't reflect the source code.  */
6996
6997 bool
6998 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
6999 {
7000   tree base_type = TREE_TYPE (type), low, high;
7001
7002   /* Subrange types have a base type which is an integral type.  */
7003   if (!INTEGRAL_TYPE_P (base_type))
7004     return false;
7005
7006   /* Get the real bounds of the subtype.  */
7007   if (lang_hooks.types.get_subrange_bounds)
7008     lang_hooks.types.get_subrange_bounds (type, &low, &high);
7009   else
7010     {
7011       low = TYPE_MIN_VALUE (type);
7012       high = TYPE_MAX_VALUE (type);
7013     }
7014
7015   /* If the type and its base type have the same representation and the same
7016      name, then the type is not a subrange but a copy of the base type.  */
7017   if ((TREE_CODE (base_type) == INTEGER_TYPE
7018        || TREE_CODE (base_type) == BOOLEAN_TYPE)
7019       && int_size_in_bytes (type) == int_size_in_bytes (base_type)
7020       && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
7021       && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type)))
7022     {
7023       tree type_name = TYPE_NAME (type);
7024       tree base_type_name = TYPE_NAME (base_type);
7025
7026       if (type_name && TREE_CODE (type_name) == TYPE_DECL)
7027         type_name = DECL_NAME (type_name);
7028
7029       if (base_type_name && TREE_CODE (base_type_name) == TYPE_DECL)
7030         base_type_name = DECL_NAME (base_type_name);
7031
7032       if (type_name == base_type_name)
7033         return false;
7034     }
7035
7036   if (lowval)
7037     *lowval = low;
7038   if (highval)
7039     *highval = high;
7040   return true;
7041 }
7042
7043 /* Just like build_index_type, but takes lowval and highval instead
7044    of just highval (maxval).  */
7045
7046 tree
7047 build_index_2_type (tree lowval, tree highval)
7048 {
7049   return build_range_type (sizetype, lowval, highval);
7050 }
7051
7052 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
7053    and number of elements specified by the range of values of INDEX_TYPE.
7054    If such a type has already been constructed, reuse it.  */
7055
7056 tree
7057 build_array_type (tree elt_type, tree index_type)
7058 {
7059   tree t;
7060   hashval_t hashcode = 0;
7061
7062   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
7063     {
7064       error ("arrays of functions are not meaningful");
7065       elt_type = integer_type_node;
7066     }
7067
7068   t = make_node (ARRAY_TYPE);
7069   TREE_TYPE (t) = elt_type;
7070   TYPE_DOMAIN (t) = index_type;
7071   TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
7072   layout_type (t);
7073
7074   /* If the element type is incomplete at this point we get marked for
7075      structural equality.  Do not record these types in the canonical
7076      type hashtable.  */
7077   if (TYPE_STRUCTURAL_EQUALITY_P (t))
7078     return t;
7079
7080   hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
7081   if (index_type)
7082     hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
7083   t = type_hash_canon (hashcode, t);
7084
7085   if (TYPE_CANONICAL (t) == t)
7086     {
7087       if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
7088           || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
7089         SET_TYPE_STRUCTURAL_EQUALITY (t);
7090       else if (TYPE_CANONICAL (elt_type) != elt_type
7091                || (index_type && TYPE_CANONICAL (index_type) != index_type))
7092         TYPE_CANONICAL (t)
7093           = build_array_type (TYPE_CANONICAL (elt_type),
7094                               index_type ? TYPE_CANONICAL (index_type) : NULL);
7095     }
7096
7097   return t;
7098 }
7099
7100 /* Recursively examines the array elements of TYPE, until a non-array
7101    element type is found.  */
7102
7103 tree
7104 strip_array_types (tree type)
7105 {
7106   while (TREE_CODE (type) == ARRAY_TYPE)
7107     type = TREE_TYPE (type);
7108
7109   return type;
7110 }
7111
7112 /* Computes the canonical argument types from the argument type list
7113    ARGTYPES.
7114
7115    Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
7116    on entry to this function, or if any of the ARGTYPES are
7117    structural.
7118
7119    Upon return, *ANY_NONCANONICAL_P will be true iff either it was
7120    true on entry to this function, or if any of the ARGTYPES are
7121    non-canonical.
7122
7123    Returns a canonical argument list, which may be ARGTYPES when the
7124    canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
7125    true) or would not differ from ARGTYPES.  */
7126
7127 static tree
7128 maybe_canonicalize_argtypes(tree argtypes,
7129                             bool *any_structural_p,
7130                             bool *any_noncanonical_p)
7131 {
7132   tree arg;
7133   bool any_noncanonical_argtypes_p = false;
7134
7135   for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
7136     {
7137       if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
7138         /* Fail gracefully by stating that the type is structural.  */
7139         *any_structural_p = true;
7140       else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
7141         *any_structural_p = true;
7142       else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
7143                || TREE_PURPOSE (arg))
7144         /* If the argument has a default argument, we consider it
7145            non-canonical even though the type itself is canonical.
7146            That way, different variants of function and method types
7147            with default arguments will all point to the variant with
7148            no defaults as their canonical type.  */
7149         any_noncanonical_argtypes_p = true;
7150     }
7151
7152   if (*any_structural_p)
7153     return argtypes;
7154
7155   if (any_noncanonical_argtypes_p)
7156     {
7157       /* Build the canonical list of argument types.  */
7158       tree canon_argtypes = NULL_TREE;
7159       bool is_void = false;
7160
7161       for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
7162         {
7163           if (arg == void_list_node)
7164             is_void = true;
7165           else
7166             canon_argtypes = tree_cons (NULL_TREE,
7167                                         TYPE_CANONICAL (TREE_VALUE (arg)),
7168                                         canon_argtypes);
7169         }
7170
7171       canon_argtypes = nreverse (canon_argtypes);
7172       if (is_void)
7173         canon_argtypes = chainon (canon_argtypes, void_list_node);
7174
7175       /* There is a non-canonical type.  */
7176       *any_noncanonical_p = true;
7177       return canon_argtypes;
7178     }
7179
7180   /* The canonical argument types are the same as ARGTYPES.  */
7181   return argtypes;
7182 }
7183
7184 /* Construct, lay out and return
7185    the type of functions returning type VALUE_TYPE
7186    given arguments of types ARG_TYPES.
7187    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
7188    are data type nodes for the arguments of the function.
7189    If such a type has already been constructed, reuse it.  */
7190
7191 tree
7192 build_function_type (tree value_type, tree arg_types)
7193 {
7194   tree t;
7195   hashval_t hashcode = 0;
7196   bool any_structural_p, any_noncanonical_p;
7197   tree canon_argtypes;
7198
7199   if (TREE_CODE (value_type) == FUNCTION_TYPE)
7200     {
7201       error ("function return type cannot be function");
7202       value_type = integer_type_node;
7203     }
7204
7205   /* Make a node of the sort we want.  */
7206   t = make_node (FUNCTION_TYPE);
7207   TREE_TYPE (t) = value_type;
7208   TYPE_ARG_TYPES (t) = arg_types;
7209
7210   /* If we already have such a type, use the old one.  */
7211   hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
7212   hashcode = type_hash_list (arg_types, hashcode);
7213   t = type_hash_canon (hashcode, t);
7214
7215   /* Set up the canonical type. */
7216   any_structural_p   = TYPE_STRUCTURAL_EQUALITY_P (value_type);
7217   any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
7218   canon_argtypes = maybe_canonicalize_argtypes (arg_types,
7219                                                 &any_structural_p,
7220                                                 &any_noncanonical_p);
7221   if (any_structural_p)
7222     SET_TYPE_STRUCTURAL_EQUALITY (t);
7223   else if (any_noncanonical_p)
7224     TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
7225                                               canon_argtypes);
7226
7227   if (!COMPLETE_TYPE_P (t))
7228     layout_type (t);
7229   return t;
7230 }
7231
7232 /* Build variant of function type ORIG_TYPE skipping ARGS_TO_SKIP.  */
7233
7234 tree
7235 build_function_type_skip_args (tree orig_type, bitmap args_to_skip)
7236 {
7237   tree new_type = NULL;
7238   tree args, new_args = NULL, t;
7239   tree new_reversed;
7240   int i = 0;
7241
7242   for (args = TYPE_ARG_TYPES (orig_type); args && args != void_list_node;
7243        args = TREE_CHAIN (args), i++)
7244     if (!bitmap_bit_p (args_to_skip, i))
7245       new_args = tree_cons (NULL_TREE, TREE_VALUE (args), new_args);
7246
7247   new_reversed = nreverse (new_args);
7248   if (args)
7249     {
7250       if (new_reversed)
7251         TREE_CHAIN (new_args) = void_list_node;
7252       else
7253         new_reversed = void_list_node;
7254     }
7255
7256   /* Use copy_node to preserve as much as possible from original type
7257      (debug info, attribute lists etc.)
7258      Exception is METHOD_TYPEs must have THIS argument.
7259      When we are asked to remove it, we need to build new FUNCTION_TYPE
7260      instead.  */
7261   if (TREE_CODE (orig_type) != METHOD_TYPE
7262       || !bitmap_bit_p (args_to_skip, 0))
7263     {
7264       new_type = copy_node (orig_type);
7265       TYPE_ARG_TYPES (new_type) = new_reversed;
7266     }
7267   else
7268     {
7269       new_type
7270         = build_distinct_type_copy (build_function_type (TREE_TYPE (orig_type),
7271                                                          new_reversed));
7272       TYPE_CONTEXT (new_type) = TYPE_CONTEXT (orig_type);
7273     }
7274
7275   /* This is a new type, not a copy of an old type.  Need to reassociate
7276      variants.  We can handle everything except the main variant lazily.  */
7277   t = TYPE_MAIN_VARIANT (orig_type);
7278   if (orig_type != t)
7279     {
7280       TYPE_MAIN_VARIANT (new_type) = t;
7281       TYPE_NEXT_VARIANT (new_type) = TYPE_NEXT_VARIANT (t);
7282       TYPE_NEXT_VARIANT (t) = new_type;
7283     }
7284   else
7285     {
7286       TYPE_MAIN_VARIANT (new_type) = new_type;
7287       TYPE_NEXT_VARIANT (new_type) = NULL;
7288     }
7289   return new_type;
7290 }
7291
7292 /* Build variant of function type ORIG_TYPE skipping ARGS_TO_SKIP.
7293
7294    Arguments from DECL_ARGUMENTS list can't be removed now, since they are
7295    linked by TREE_CHAIN directly.  It is caller responsibility to eliminate
7296    them when they are being duplicated (i.e. copy_arguments_for_versioning).  */
7297
7298 tree
7299 build_function_decl_skip_args (tree orig_decl, bitmap args_to_skip)
7300 {
7301   tree new_decl = copy_node (orig_decl);
7302   tree new_type;
7303
7304   new_type = TREE_TYPE (orig_decl);
7305   if (prototype_p (new_type))
7306     new_type = build_function_type_skip_args (new_type, args_to_skip);
7307   TREE_TYPE (new_decl) = new_type;
7308
7309   /* For declarations setting DECL_VINDEX (i.e. methods)
7310      we expect first argument to be THIS pointer.   */
7311   if (bitmap_bit_p (args_to_skip, 0))
7312     DECL_VINDEX (new_decl) = NULL_TREE;
7313   return new_decl;
7314 }
7315
7316 /* Build a function type.  The RETURN_TYPE is the type returned by the
7317    function. If VAARGS is set, no void_type_node is appended to the
7318    the list. ARGP muse be alway be terminated be a NULL_TREE.  */
7319
7320 static tree
7321 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
7322 {
7323   tree t, args, last;
7324
7325   t = va_arg (argp, tree);
7326   for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
7327     args = tree_cons (NULL_TREE, t, args);
7328
7329   if (vaargs)
7330     {
7331       last = args;
7332       if (args != NULL_TREE)
7333         args = nreverse (args);
7334       gcc_assert (last != void_list_node);
7335     }
7336   else if (args == NULL_TREE)
7337     args = void_list_node;
7338   else
7339     {
7340       last = args;
7341       args = nreverse (args);
7342       TREE_CHAIN (last) = void_list_node;
7343     }
7344   args = build_function_type (return_type, args);
7345
7346   return args;
7347 }
7348
7349 /* Build a function type.  The RETURN_TYPE is the type returned by the
7350    function.  If additional arguments are provided, they are
7351    additional argument types.  The list of argument types must always
7352    be terminated by NULL_TREE.  */
7353
7354 tree
7355 build_function_type_list (tree return_type, ...)
7356 {
7357   tree args;
7358   va_list p;
7359
7360   va_start (p, return_type);
7361   args = build_function_type_list_1 (false, return_type, p);
7362   va_end (p);
7363   return args;
7364 }
7365
7366 /* Build a variable argument function type.  The RETURN_TYPE is the
7367    type returned by the function.  If additional arguments are provided,
7368    they are additional argument types.  The list of argument types must
7369    always be terminated by NULL_TREE.  */
7370
7371 tree
7372 build_varargs_function_type_list (tree return_type, ...)
7373 {
7374   tree args;
7375   va_list p;
7376
7377   va_start (p, return_type);
7378   args = build_function_type_list_1 (true, return_type, p);
7379   va_end (p);
7380
7381   return args;
7382 }
7383
7384 /* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
7385    and ARGTYPES (a TREE_LIST) are the return type and arguments types
7386    for the method.  An implicit additional parameter (of type
7387    pointer-to-BASETYPE) is added to the ARGTYPES.  */
7388
7389 tree
7390 build_method_type_directly (tree basetype,
7391                             tree rettype,
7392                             tree argtypes)
7393 {
7394   tree t;
7395   tree ptype;
7396   int hashcode = 0;
7397   bool any_structural_p, any_noncanonical_p;
7398   tree canon_argtypes;
7399
7400   /* Make a node of the sort we want.  */
7401   t = make_node (METHOD_TYPE);
7402
7403   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
7404   TREE_TYPE (t) = rettype;
7405   ptype = build_pointer_type (basetype);
7406
7407   /* The actual arglist for this function includes a "hidden" argument
7408      which is "this".  Put it into the list of argument types.  */
7409   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
7410   TYPE_ARG_TYPES (t) = argtypes;
7411
7412   /* If we already have such a type, use the old one.  */
7413   hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
7414   hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
7415   hashcode = type_hash_list (argtypes, hashcode);
7416   t = type_hash_canon (hashcode, t);
7417
7418   /* Set up the canonical type. */
7419   any_structural_p
7420     = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
7421        || TYPE_STRUCTURAL_EQUALITY_P (rettype));
7422   any_noncanonical_p
7423     = (TYPE_CANONICAL (basetype) != basetype
7424        || TYPE_CANONICAL (rettype) != rettype);
7425   canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
7426                                                 &any_structural_p,
7427                                                 &any_noncanonical_p);
7428   if (any_structural_p)
7429     SET_TYPE_STRUCTURAL_EQUALITY (t);
7430   else if (any_noncanonical_p)
7431     TYPE_CANONICAL (t)
7432       = build_method_type_directly (TYPE_CANONICAL (basetype),
7433                                     TYPE_CANONICAL (rettype),
7434                                     canon_argtypes);
7435   if (!COMPLETE_TYPE_P (t))
7436     layout_type (t);
7437
7438   return t;
7439 }
7440
7441 /* Construct, lay out and return the type of methods belonging to class
7442    BASETYPE and whose arguments and values are described by TYPE.
7443    If that type exists already, reuse it.
7444    TYPE must be a FUNCTION_TYPE node.  */
7445
7446 tree
7447 build_method_type (tree basetype, tree type)
7448 {
7449   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
7450
7451   return build_method_type_directly (basetype,
7452                                      TREE_TYPE (type),
7453                                      TYPE_ARG_TYPES (type));
7454 }
7455
7456 /* Construct, lay out and return the type of offsets to a value
7457    of type TYPE, within an object of type BASETYPE.
7458    If a suitable offset type exists already, reuse it.  */
7459
7460 tree
7461 build_offset_type (tree basetype, tree type)
7462 {
7463   tree t;
7464   hashval_t hashcode = 0;
7465
7466   /* Make a node of the sort we want.  */
7467   t = make_node (OFFSET_TYPE);
7468
7469   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
7470   TREE_TYPE (t) = type;
7471
7472   /* If we already have such a type, use the old one.  */
7473   hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
7474   hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
7475   t = type_hash_canon (hashcode, t);
7476
7477   if (!COMPLETE_TYPE_P (t))
7478     layout_type (t);
7479
7480   if (TYPE_CANONICAL (t) == t)
7481     {
7482       if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
7483           || TYPE_STRUCTURAL_EQUALITY_P (type))
7484         SET_TYPE_STRUCTURAL_EQUALITY (t);
7485       else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
7486                || TYPE_CANONICAL (type) != type)
7487         TYPE_CANONICAL (t)
7488           = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
7489                                TYPE_CANONICAL (type));
7490     }
7491
7492   return t;
7493 }
7494
7495 /* Create a complex type whose components are COMPONENT_TYPE.  */
7496
7497 tree
7498 build_complex_type (tree component_type)
7499 {
7500   tree t;
7501   hashval_t hashcode;
7502
7503   gcc_assert (INTEGRAL_TYPE_P (component_type)
7504               || SCALAR_FLOAT_TYPE_P (component_type)
7505               || FIXED_POINT_TYPE_P (component_type));
7506
7507   /* Make a node of the sort we want.  */
7508   t = make_node (COMPLEX_TYPE);
7509
7510   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
7511
7512   /* If we already have such a type, use the old one.  */
7513   hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
7514   t = type_hash_canon (hashcode, t);
7515
7516   if (!COMPLETE_TYPE_P (t))
7517     layout_type (t);
7518
7519   if (TYPE_CANONICAL (t) == t)
7520     {
7521       if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
7522         SET_TYPE_STRUCTURAL_EQUALITY (t);
7523       else if (TYPE_CANONICAL (component_type) != component_type)
7524         TYPE_CANONICAL (t)
7525           = build_complex_type (TYPE_CANONICAL (component_type));
7526     }
7527
7528   /* We need to create a name, since complex is a fundamental type.  */
7529   if (! TYPE_NAME (t))
7530     {
7531       const char *name;
7532       if (component_type == char_type_node)
7533         name = "complex char";
7534       else if (component_type == signed_char_type_node)
7535         name = "complex signed char";
7536       else if (component_type == unsigned_char_type_node)
7537         name = "complex unsigned char";
7538       else if (component_type == short_integer_type_node)
7539         name = "complex short int";
7540       else if (component_type == short_unsigned_type_node)
7541         name = "complex short unsigned int";
7542       else if (component_type == integer_type_node)
7543         name = "complex int";
7544       else if (component_type == unsigned_type_node)
7545         name = "complex unsigned int";
7546       else if (component_type == long_integer_type_node)
7547         name = "complex long int";
7548       else if (component_type == long_unsigned_type_node)
7549         name = "complex long unsigned int";
7550       else if (component_type == long_long_integer_type_node)
7551         name = "complex long long int";
7552       else if (component_type == long_long_unsigned_type_node)
7553         name = "complex long long unsigned int";
7554       else
7555         name = 0;
7556
7557       if (name != 0)
7558         TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
7559                                     get_identifier (name), t);
7560     }
7561
7562   return build_qualified_type (t, TYPE_QUALS (component_type));
7563 }
7564
7565 /* If TYPE is a real or complex floating-point type and the target
7566    does not directly support arithmetic on TYPE then return the wider
7567    type to be used for arithmetic on TYPE.  Otherwise, return
7568    NULL_TREE.  */
7569
7570 tree
7571 excess_precision_type (tree type)
7572 {
7573   if (flag_excess_precision != EXCESS_PRECISION_FAST)
7574     {
7575       int flt_eval_method = TARGET_FLT_EVAL_METHOD;
7576       switch (TREE_CODE (type))
7577         {
7578         case REAL_TYPE:
7579           switch (flt_eval_method)
7580             {
7581             case 1:
7582               if (TYPE_MODE (type) == TYPE_MODE (float_type_node))
7583                 return double_type_node;
7584               break;
7585             case 2:
7586               if (TYPE_MODE (type) == TYPE_MODE (float_type_node)
7587                   || TYPE_MODE (type) == TYPE_MODE (double_type_node))
7588                 return long_double_type_node;
7589               break;
7590             default:
7591               gcc_unreachable ();
7592             }
7593           break;
7594         case COMPLEX_TYPE:
7595           if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
7596             return NULL_TREE;
7597           switch (flt_eval_method)
7598             {
7599             case 1:
7600               if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node))
7601                 return complex_double_type_node;
7602               break;
7603             case 2:
7604               if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node)
7605                   || (TYPE_MODE (TREE_TYPE (type))
7606                       == TYPE_MODE (double_type_node)))
7607                 return complex_long_double_type_node;
7608               break;
7609             default:
7610               gcc_unreachable ();
7611             }
7612           break;
7613         default:
7614           break;
7615         }
7616     }
7617   return NULL_TREE;
7618 }
7619 \f
7620 /* Return OP, stripped of any conversions to wider types as much as is safe.
7621    Converting the value back to OP's type makes a value equivalent to OP.
7622
7623    If FOR_TYPE is nonzero, we return a value which, if converted to
7624    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
7625
7626    OP must have integer, real or enumeral type.  Pointers are not allowed!
7627
7628    There are some cases where the obvious value we could return
7629    would regenerate to OP if converted to OP's type,
7630    but would not extend like OP to wider types.
7631    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
7632    For example, if OP is (unsigned short)(signed char)-1,
7633    we avoid returning (signed char)-1 if FOR_TYPE is int,
7634    even though extending that to an unsigned short would regenerate OP,
7635    since the result of extending (signed char)-1 to (int)
7636    is different from (int) OP.  */
7637
7638 tree
7639 get_unwidened (tree op, tree for_type)
7640 {
7641   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
7642   tree type = TREE_TYPE (op);
7643   unsigned final_prec
7644     = TYPE_PRECISION (for_type != 0 ? for_type : type);
7645   int uns
7646     = (for_type != 0 && for_type != type
7647        && final_prec > TYPE_PRECISION (type)
7648        && TYPE_UNSIGNED (type));
7649   tree win = op;
7650
7651   while (CONVERT_EXPR_P (op))
7652     {
7653       int bitschange;
7654
7655       /* TYPE_PRECISION on vector types has different meaning
7656          (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
7657          so avoid them here.  */
7658       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
7659         break;
7660
7661       bitschange = TYPE_PRECISION (TREE_TYPE (op))
7662                    - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
7663
7664       /* Truncations are many-one so cannot be removed.
7665          Unless we are later going to truncate down even farther.  */
7666       if (bitschange < 0
7667           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
7668         break;
7669
7670       /* See what's inside this conversion.  If we decide to strip it,
7671          we will set WIN.  */
7672       op = TREE_OPERAND (op, 0);
7673
7674       /* If we have not stripped any zero-extensions (uns is 0),
7675          we can strip any kind of extension.
7676          If we have previously stripped a zero-extension,
7677          only zero-extensions can safely be stripped.
7678          Any extension can be stripped if the bits it would produce
7679          are all going to be discarded later by truncating to FOR_TYPE.  */
7680
7681       if (bitschange > 0)
7682         {
7683           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
7684             win = op;
7685           /* TYPE_UNSIGNED says whether this is a zero-extension.
7686              Let's avoid computing it if it does not affect WIN
7687              and if UNS will not be needed again.  */
7688           if ((uns
7689                || CONVERT_EXPR_P (op))
7690               && TYPE_UNSIGNED (TREE_TYPE (op)))
7691             {
7692               uns = 1;
7693               win = op;
7694             }
7695         }
7696     }
7697
7698   /* If we finally reach a constant see if it fits in for_type and
7699      in that case convert it.  */
7700   if (for_type
7701       && TREE_CODE (win) == INTEGER_CST
7702       && TREE_TYPE (win) != for_type
7703       && int_fits_type_p (win, for_type))
7704     win = fold_convert (for_type, win);
7705
7706   return win;
7707 }
7708 \f
7709 /* Return OP or a simpler expression for a narrower value
7710    which can be sign-extended or zero-extended to give back OP.
7711    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
7712    or 0 if the value should be sign-extended.  */
7713
7714 tree
7715 get_narrower (tree op, int *unsignedp_ptr)
7716 {
7717   int uns = 0;
7718   int first = 1;
7719   tree win = op;
7720   bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
7721
7722   while (TREE_CODE (op) == NOP_EXPR)
7723     {
7724       int bitschange
7725         = (TYPE_PRECISION (TREE_TYPE (op))
7726            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
7727
7728       /* Truncations are many-one so cannot be removed.  */
7729       if (bitschange < 0)
7730         break;
7731
7732       /* See what's inside this conversion.  If we decide to strip it,
7733          we will set WIN.  */
7734
7735       if (bitschange > 0)
7736         {
7737           op = TREE_OPERAND (op, 0);
7738           /* An extension: the outermost one can be stripped,
7739              but remember whether it is zero or sign extension.  */
7740           if (first)
7741             uns = TYPE_UNSIGNED (TREE_TYPE (op));
7742           /* Otherwise, if a sign extension has been stripped,
7743              only sign extensions can now be stripped;
7744              if a zero extension has been stripped, only zero-extensions.  */
7745           else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
7746             break;
7747           first = 0;
7748         }
7749       else /* bitschange == 0 */
7750         {
7751           /* A change in nominal type can always be stripped, but we must
7752              preserve the unsignedness.  */
7753           if (first)
7754             uns = TYPE_UNSIGNED (TREE_TYPE (op));
7755           first = 0;
7756           op = TREE_OPERAND (op, 0);
7757           /* Keep trying to narrow, but don't assign op to win if it
7758              would turn an integral type into something else.  */
7759           if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
7760             continue;
7761         }
7762
7763       win = op;
7764     }
7765
7766   if (TREE_CODE (op) == COMPONENT_REF
7767       /* Since type_for_size always gives an integer type.  */
7768       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
7769       && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
7770       /* Ensure field is laid out already.  */
7771       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
7772       && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
7773     {
7774       unsigned HOST_WIDE_INT innerprec
7775         = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
7776       int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
7777                        || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
7778       tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
7779
7780       /* We can get this structure field in a narrower type that fits it,
7781          but the resulting extension to its nominal type (a fullword type)
7782          must satisfy the same conditions as for other extensions.
7783
7784          Do this only for fields that are aligned (not bit-fields),
7785          because when bit-field insns will be used there is no
7786          advantage in doing this.  */
7787
7788       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
7789           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
7790           && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
7791           && type != 0)
7792         {
7793           if (first)
7794             uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
7795           win = fold_convert (type, op);
7796         }
7797     }
7798
7799   *unsignedp_ptr = uns;
7800   return win;
7801 }
7802 \f
7803 /* Nonzero if integer constant C has a value that is permissible
7804    for type TYPE (an INTEGER_TYPE).  */
7805
7806 int
7807 int_fits_type_p (const_tree c, const_tree type)
7808 {
7809   tree type_low_bound, type_high_bound;
7810   bool ok_for_low_bound, ok_for_high_bound, unsc;
7811   double_int dc, dd;
7812
7813   dc = tree_to_double_int (c);
7814   unsc = TYPE_UNSIGNED (TREE_TYPE (c));
7815
7816   if (TREE_CODE (TREE_TYPE (c)) == INTEGER_TYPE
7817       && TYPE_IS_SIZETYPE (TREE_TYPE (c))
7818       && unsc)
7819     /* So c is an unsigned integer whose type is sizetype and type is not.
7820        sizetype'd integers are sign extended even though they are
7821        unsigned. If the integer value fits in the lower end word of c,
7822        and if the higher end word has all its bits set to 1, that
7823        means the higher end bits are set to 1 only for sign extension.
7824        So let's convert c into an equivalent zero extended unsigned
7825        integer.  */
7826     dc = double_int_zext (dc, TYPE_PRECISION (TREE_TYPE (c)));
7827
7828 retry:
7829   type_low_bound = TYPE_MIN_VALUE (type);
7830   type_high_bound = TYPE_MAX_VALUE (type);
7831
7832   /* If at least one bound of the type is a constant integer, we can check
7833      ourselves and maybe make a decision. If no such decision is possible, but
7834      this type is a subtype, try checking against that.  Otherwise, use
7835      fit_double_type, which checks against the precision.
7836
7837      Compute the status for each possibly constant bound, and return if we see
7838      one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
7839      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
7840      for "constant known to fit".  */
7841
7842   /* Check if c >= type_low_bound.  */
7843   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
7844     {
7845       dd = tree_to_double_int (type_low_bound);
7846       if (TREE_CODE (type) == INTEGER_TYPE
7847           && TYPE_IS_SIZETYPE (type)
7848           && TYPE_UNSIGNED (type))
7849         dd = double_int_zext (dd, TYPE_PRECISION (type));
7850       if (unsc != TYPE_UNSIGNED (TREE_TYPE (type_low_bound)))
7851         {
7852           int c_neg = (!unsc && double_int_negative_p (dc));
7853           int t_neg = (unsc && double_int_negative_p (dd));
7854
7855           if (c_neg && !t_neg)
7856             return 0;
7857           if ((c_neg || !t_neg) && double_int_ucmp (dc, dd) < 0)
7858             return 0;
7859         }
7860       else if (double_int_cmp (dc, dd, unsc) < 0)
7861         return 0;
7862       ok_for_low_bound = true;
7863     }
7864   else
7865     ok_for_low_bound = false;
7866
7867   /* Check if c <= type_high_bound.  */
7868   if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
7869     {
7870       dd = tree_to_double_int (type_high_bound);
7871       if (TREE_CODE (type) == INTEGER_TYPE
7872           && TYPE_IS_SIZETYPE (type)
7873           && TYPE_UNSIGNED (type))
7874         dd = double_int_zext (dd, TYPE_PRECISION (type));
7875       if (unsc != TYPE_UNSIGNED (TREE_TYPE (type_high_bound)))
7876         {
7877           int c_neg = (!unsc && double_int_negative_p (dc));
7878           int t_neg = (unsc && double_int_negative_p (dd));
7879
7880           if (t_neg && !c_neg)
7881             return 0;
7882           if ((t_neg || !c_neg) && double_int_ucmp (dc, dd) > 0)
7883             return 0;
7884         }
7885       else if (double_int_cmp (dc, dd, unsc) > 0)
7886         return 0;
7887       ok_for_high_bound = true;
7888     }
7889   else
7890     ok_for_high_bound = false;
7891
7892   /* If the constant fits both bounds, the result is known.  */
7893   if (ok_for_low_bound && ok_for_high_bound)
7894     return 1;
7895
7896   /* Perform some generic filtering which may allow making a decision
7897      even if the bounds are not constant.  First, negative integers
7898      never fit in unsigned types, */
7899   if (TYPE_UNSIGNED (type) && !unsc && double_int_negative_p (dc))
7900     return 0;
7901
7902   /* Second, narrower types always fit in wider ones.  */
7903   if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
7904     return 1;
7905
7906   /* Third, unsigned integers with top bit set never fit signed types.  */
7907   if (! TYPE_UNSIGNED (type) && unsc)
7908     {
7909       int prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (c))) - 1;
7910       if (prec < HOST_BITS_PER_WIDE_INT)
7911         {
7912           if (((((unsigned HOST_WIDE_INT) 1) << prec) & dc.low) != 0)
7913             return 0;
7914         }
7915       else if (((((unsigned HOST_WIDE_INT) 1)
7916                  << (prec - HOST_BITS_PER_WIDE_INT)) & dc.high) != 0)
7917         return 0;
7918     }
7919
7920   /* If we haven't been able to decide at this point, there nothing more we
7921      can check ourselves here.  Look at the base type if we have one and it
7922      has the same precision.  */
7923   if (TREE_CODE (type) == INTEGER_TYPE
7924       && TREE_TYPE (type) != 0
7925       && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
7926     {
7927       type = TREE_TYPE (type);
7928       goto retry;
7929     }
7930
7931   /* Or to fit_double_type, if nothing else.  */
7932   return !fit_double_type (dc.low, dc.high, &dc.low, &dc.high, type);
7933 }
7934
7935 /* Stores bounds of an integer TYPE in MIN and MAX.  If TYPE has non-constant
7936    bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
7937    represented (assuming two's-complement arithmetic) within the bit
7938    precision of the type are returned instead.  */
7939
7940 void
7941 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
7942 {
7943   if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
7944       && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
7945     mpz_set_double_int (min, tree_to_double_int (TYPE_MIN_VALUE (type)),
7946                         TYPE_UNSIGNED (type));
7947   else
7948     {
7949       if (TYPE_UNSIGNED (type))
7950         mpz_set_ui (min, 0);
7951       else
7952         {
7953           double_int mn;
7954           mn = double_int_mask (TYPE_PRECISION (type) - 1);
7955           mn = double_int_sext (double_int_add (mn, double_int_one),
7956                                 TYPE_PRECISION (type));
7957           mpz_set_double_int (min, mn, false);
7958         }
7959     }
7960
7961   if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
7962       && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
7963     mpz_set_double_int (max, tree_to_double_int (TYPE_MAX_VALUE (type)),
7964                         TYPE_UNSIGNED (type));
7965   else
7966     {
7967       if (TYPE_UNSIGNED (type))
7968         mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type)),
7969                             true);
7970       else
7971         mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type) - 1),
7972                             true);
7973     }
7974 }
7975
7976 /* Return true if VAR is an automatic variable defined in function FN.  */
7977
7978 bool
7979 auto_var_in_fn_p (const_tree var, const_tree fn)
7980 {
7981   return (DECL_P (var) && DECL_CONTEXT (var) == fn
7982           && ((((TREE_CODE (var) == VAR_DECL && ! DECL_EXTERNAL (var))
7983                 || TREE_CODE (var) == PARM_DECL)
7984                && ! TREE_STATIC (var))
7985               || TREE_CODE (var) == LABEL_DECL
7986               || TREE_CODE (var) == RESULT_DECL));
7987 }
7988
7989 /* Subprogram of following function.  Called by walk_tree.
7990
7991    Return *TP if it is an automatic variable or parameter of the
7992    function passed in as DATA.  */
7993
7994 static tree
7995 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
7996 {
7997   tree fn = (tree) data;
7998
7999   if (TYPE_P (*tp))
8000     *walk_subtrees = 0;
8001
8002   else if (DECL_P (*tp)
8003            && auto_var_in_fn_p (*tp, fn))
8004     return *tp;
8005
8006   return NULL_TREE;
8007 }
8008
8009 /* Returns true if T is, contains, or refers to a type with variable
8010    size.  For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
8011    arguments, but not the return type.  If FN is nonzero, only return
8012    true if a modifier of the type or position of FN is a variable or
8013    parameter inside FN.
8014
8015    This concept is more general than that of C99 'variably modified types':
8016    in C99, a struct type is never variably modified because a VLA may not
8017    appear as a structure member.  However, in GNU C code like:
8018
8019      struct S { int i[f()]; };
8020
8021    is valid, and other languages may define similar constructs.  */
8022
8023 bool
8024 variably_modified_type_p (tree type, tree fn)
8025 {
8026   tree t;
8027
8028 /* Test if T is either variable (if FN is zero) or an expression containing
8029    a variable in FN.  */
8030 #define RETURN_TRUE_IF_VAR(T)                                           \
8031   do { tree _t = (T);                                                   \
8032     if (_t && _t != error_mark_node && TREE_CODE (_t) != INTEGER_CST    \
8033         && (!fn || walk_tree (&_t, find_var_from_fn, fn, NULL)))        \
8034       return true;  } while (0)
8035
8036   if (type == error_mark_node)
8037     return false;
8038
8039   /* If TYPE itself has variable size, it is variably modified.  */
8040   RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
8041   RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
8042
8043   switch (TREE_CODE (type))
8044     {
8045     case POINTER_TYPE:
8046     case REFERENCE_TYPE:
8047     case VECTOR_TYPE:
8048       if (variably_modified_type_p (TREE_TYPE (type), fn))
8049         return true;
8050       break;
8051
8052     case FUNCTION_TYPE:
8053     case METHOD_TYPE:
8054       /* If TYPE is a function type, it is variably modified if the
8055          return type is variably modified.  */
8056       if (variably_modified_type_p (TREE_TYPE (type), fn))
8057           return true;
8058       break;
8059
8060     case INTEGER_TYPE:
8061     case REAL_TYPE:
8062     case FIXED_POINT_TYPE:
8063     case ENUMERAL_TYPE:
8064     case BOOLEAN_TYPE:
8065       /* Scalar types are variably modified if their end points
8066          aren't constant.  */
8067       RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
8068       RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
8069       break;
8070
8071     case RECORD_TYPE:
8072     case UNION_TYPE:
8073     case QUAL_UNION_TYPE:
8074       /* We can't see if any of the fields are variably-modified by the
8075          definition we normally use, since that would produce infinite
8076          recursion via pointers.  */
8077       /* This is variably modified if some field's type is.  */
8078       for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
8079         if (TREE_CODE (t) == FIELD_DECL)
8080           {
8081             RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
8082             RETURN_TRUE_IF_VAR (DECL_SIZE (t));
8083             RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
8084
8085             if (TREE_CODE (type) == QUAL_UNION_TYPE)
8086               RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
8087           }
8088         break;
8089
8090     case ARRAY_TYPE:
8091       /* Do not call ourselves to avoid infinite recursion.  This is
8092          variably modified if the element type is.  */
8093       RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
8094       RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
8095       break;
8096
8097     default:
8098       break;
8099     }
8100
8101   /* The current language may have other cases to check, but in general,
8102      all other types are not variably modified.  */
8103   return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
8104
8105 #undef RETURN_TRUE_IF_VAR
8106 }
8107
8108 /* Given a DECL or TYPE, return the scope in which it was declared, or
8109    NULL_TREE if there is no containing scope.  */
8110
8111 tree
8112 get_containing_scope (const_tree t)
8113 {
8114   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
8115 }
8116
8117 /* Return the innermost context enclosing DECL that is
8118    a FUNCTION_DECL, or zero if none.  */
8119
8120 tree
8121 decl_function_context (const_tree decl)
8122 {
8123   tree context;
8124
8125   if (TREE_CODE (decl) == ERROR_MARK)
8126     return 0;
8127
8128   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
8129      where we look up the function at runtime.  Such functions always take
8130      a first argument of type 'pointer to real context'.
8131
8132      C++ should really be fixed to use DECL_CONTEXT for the real context,
8133      and use something else for the "virtual context".  */
8134   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
8135     context
8136       = TYPE_MAIN_VARIANT
8137         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
8138   else
8139     context = DECL_CONTEXT (decl);
8140
8141   while (context && TREE_CODE (context) != FUNCTION_DECL)
8142     {
8143       if (TREE_CODE (context) == BLOCK)
8144         context = BLOCK_SUPERCONTEXT (context);
8145       else
8146         context = get_containing_scope (context);
8147     }
8148
8149   return context;
8150 }
8151
8152 /* Return the innermost context enclosing DECL that is
8153    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
8154    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
8155
8156 tree
8157 decl_type_context (const_tree decl)
8158 {
8159   tree context = DECL_CONTEXT (decl);
8160
8161   while (context)
8162     switch (TREE_CODE (context))
8163       {
8164       case NAMESPACE_DECL:
8165       case TRANSLATION_UNIT_DECL:
8166         return NULL_TREE;
8167
8168       case RECORD_TYPE:
8169       case UNION_TYPE:
8170       case QUAL_UNION_TYPE:
8171         return context;
8172
8173       case TYPE_DECL:
8174       case FUNCTION_DECL:
8175         context = DECL_CONTEXT (context);
8176         break;
8177
8178       case BLOCK:
8179         context = BLOCK_SUPERCONTEXT (context);
8180         break;
8181
8182       default:
8183         gcc_unreachable ();
8184       }
8185
8186   return NULL_TREE;
8187 }
8188
8189 /* CALL is a CALL_EXPR.  Return the declaration for the function
8190    called, or NULL_TREE if the called function cannot be
8191    determined.  */
8192
8193 tree
8194 get_callee_fndecl (const_tree call)
8195 {
8196   tree addr;
8197
8198   if (call == error_mark_node)
8199     return error_mark_node;
8200
8201   /* It's invalid to call this function with anything but a
8202      CALL_EXPR.  */
8203   gcc_assert (TREE_CODE (call) == CALL_EXPR);
8204
8205   /* The first operand to the CALL is the address of the function
8206      called.  */
8207   addr = CALL_EXPR_FN (call);
8208
8209   STRIP_NOPS (addr);
8210
8211   /* If this is a readonly function pointer, extract its initial value.  */
8212   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
8213       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
8214       && DECL_INITIAL (addr))
8215     addr = DECL_INITIAL (addr);
8216
8217   /* If the address is just `&f' for some function `f', then we know
8218      that `f' is being called.  */
8219   if (TREE_CODE (addr) == ADDR_EXPR
8220       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
8221     return TREE_OPERAND (addr, 0);
8222
8223   /* We couldn't figure out what was being called.  */
8224   return NULL_TREE;
8225 }
8226
8227 /* Print debugging information about tree nodes generated during the compile,
8228    and any language-specific information.  */
8229
8230 void
8231 dump_tree_statistics (void)
8232 {
8233 #ifdef GATHER_STATISTICS
8234   int i;
8235   int total_nodes, total_bytes;
8236 #endif
8237
8238   fprintf (stderr, "\n??? tree nodes created\n\n");
8239 #ifdef GATHER_STATISTICS
8240   fprintf (stderr, "Kind                   Nodes      Bytes\n");
8241   fprintf (stderr, "---------------------------------------\n");
8242   total_nodes = total_bytes = 0;
8243   for (i = 0; i < (int) all_kinds; i++)
8244     {
8245       fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
8246                tree_node_counts[i], tree_node_sizes[i]);
8247       total_nodes += tree_node_counts[i];
8248       total_bytes += tree_node_sizes[i];
8249     }
8250   fprintf (stderr, "---------------------------------------\n");
8251   fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
8252   fprintf (stderr, "---------------------------------------\n");
8253   ssanames_print_statistics ();
8254   phinodes_print_statistics ();
8255 #else
8256   fprintf (stderr, "(No per-node statistics)\n");
8257 #endif
8258   print_type_hash_statistics ();
8259   print_debug_expr_statistics ();
8260   print_value_expr_statistics ();
8261   lang_hooks.print_statistics ();
8262 }
8263 \f
8264 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
8265
8266 /* Generate a crc32 of a string.  */
8267
8268 unsigned
8269 crc32_string (unsigned chksum, const char *string)
8270 {
8271   do
8272     {
8273       unsigned value = *string << 24;
8274       unsigned ix;
8275
8276       for (ix = 8; ix--; value <<= 1)
8277         {
8278           unsigned feedback;
8279
8280           feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
8281           chksum <<= 1;
8282           chksum ^= feedback;
8283         }
8284     }
8285   while (*string++);
8286   return chksum;
8287 }
8288
8289 /* P is a string that will be used in a symbol.  Mask out any characters
8290    that are not valid in that context.  */
8291
8292 void
8293 clean_symbol_name (char *p)
8294 {
8295   for (; *p; p++)
8296     if (! (ISALNUM (*p)
8297 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
8298             || *p == '$'
8299 #endif
8300 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
8301             || *p == '.'
8302 #endif
8303            ))
8304       *p = '_';
8305 }
8306
8307 /* Generate a name for a special-purpose function function.
8308    The generated name may need to be unique across the whole link.
8309    TYPE is some string to identify the purpose of this function to the
8310    linker or collect2; it must start with an uppercase letter,
8311    one of:
8312    I - for constructors
8313    D - for destructors
8314    N - for C++ anonymous namespaces
8315    F - for DWARF unwind frame information.  */
8316
8317 tree
8318 get_file_function_name (const char *type)
8319 {
8320   char *buf;
8321   const char *p;
8322   char *q;
8323
8324   /* If we already have a name we know to be unique, just use that.  */
8325   if (first_global_object_name)
8326     p = q = ASTRDUP (first_global_object_name);
8327   /* If the target is handling the constructors/destructors, they
8328      will be local to this file and the name is only necessary for
8329      debugging purposes.  */
8330   else if ((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
8331     {
8332       const char *file = main_input_filename;
8333       if (! file)
8334         file = input_filename;
8335       /* Just use the file's basename, because the full pathname
8336          might be quite long.  */
8337       p = strrchr (file, '/');
8338       if (p)
8339         p++;
8340       else
8341         p = file;
8342       p = q = ASTRDUP (p);
8343     }
8344   else
8345     {
8346       /* Otherwise, the name must be unique across the entire link.
8347          We don't have anything that we know to be unique to this translation
8348          unit, so use what we do have and throw in some randomness.  */
8349       unsigned len;
8350       const char *name = weak_global_object_name;
8351       const char *file = main_input_filename;
8352
8353       if (! name)
8354         name = "";
8355       if (! file)
8356         file = input_filename;
8357
8358       len = strlen (file);
8359       q = (char *) alloca (9 * 2 + len + 1);
8360       memcpy (q, file, len + 1);
8361
8362       sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
8363                crc32_string (0, get_random_seed (false)));
8364
8365       p = q;
8366     }
8367
8368   clean_symbol_name (q);
8369   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
8370                          + strlen (type));
8371
8372   /* Set up the name of the file-level functions we may need.
8373      Use a global object (which is already required to be unique over
8374      the program) rather than the file name (which imposes extra
8375      constraints).  */
8376   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
8377
8378   return get_identifier (buf);
8379 }
8380 \f
8381 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
8382
8383 /* Complain that the tree code of NODE does not match the expected 0
8384    terminated list of trailing codes. The trailing code list can be
8385    empty, for a more vague error message.  FILE, LINE, and FUNCTION
8386    are of the caller.  */
8387
8388 void
8389 tree_check_failed (const_tree node, const char *file,
8390                    int line, const char *function, ...)
8391 {
8392   va_list args;
8393   const char *buffer;
8394   unsigned length = 0;
8395   int code;
8396
8397   va_start (args, function);
8398   while ((code = va_arg (args, int)))
8399     length += 4 + strlen (tree_code_name[code]);
8400   va_end (args);
8401   if (length)
8402     {
8403       char *tmp;
8404       va_start (args, function);
8405       length += strlen ("expected ");
8406       buffer = tmp = (char *) alloca (length);
8407       length = 0;
8408       while ((code = va_arg (args, int)))
8409         {
8410           const char *prefix = length ? " or " : "expected ";
8411
8412           strcpy (tmp + length, prefix);
8413           length += strlen (prefix);
8414           strcpy (tmp + length, tree_code_name[code]);
8415           length += strlen (tree_code_name[code]);
8416         }
8417       va_end (args);
8418     }
8419   else
8420     buffer = "unexpected node";
8421
8422   internal_error ("tree check: %s, have %s in %s, at %s:%d",
8423                   buffer, tree_code_name[TREE_CODE (node)],
8424                   function, trim_filename (file), line);
8425 }
8426
8427 /* Complain that the tree code of NODE does match the expected 0
8428    terminated list of trailing codes. FILE, LINE, and FUNCTION are of
8429    the caller.  */
8430
8431 void
8432 tree_not_check_failed (const_tree node, const char *file,
8433                        int line, const char *function, ...)
8434 {
8435   va_list args;
8436   char *buffer;
8437   unsigned length = 0;
8438   int code;
8439
8440   va_start (args, function);
8441   while ((code = va_arg (args, int)))
8442     length += 4 + strlen (tree_code_name[code]);
8443   va_end (args);
8444   va_start (args, function);
8445   buffer = (char *) alloca (length);
8446   length = 0;
8447   while ((code = va_arg (args, int)))
8448     {
8449       if (length)
8450         {
8451           strcpy (buffer + length, " or ");
8452           length += 4;
8453         }
8454       strcpy (buffer + length, tree_code_name[code]);
8455       length += strlen (tree_code_name[code]);
8456     }
8457   va_end (args);
8458
8459   internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
8460                   buffer, tree_code_name[TREE_CODE (node)],
8461                   function, trim_filename (file), line);
8462 }
8463
8464 /* Similar to tree_check_failed, except that we check for a class of tree
8465    code, given in CL.  */
8466
8467 void
8468 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
8469                          const char *file, int line, const char *function)
8470 {
8471   internal_error
8472     ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
8473      TREE_CODE_CLASS_STRING (cl),
8474      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
8475      tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
8476 }
8477
8478 /* Similar to tree_check_failed, except that instead of specifying a
8479    dozen codes, use the knowledge that they're all sequential.  */
8480
8481 void
8482 tree_range_check_failed (const_tree node, const char *file, int line,
8483                          const char *function, enum tree_code c1,
8484                          enum tree_code c2)
8485 {
8486   char *buffer;
8487   unsigned length = 0;
8488   unsigned int c;
8489
8490   for (c = c1; c <= c2; ++c)
8491     length += 4 + strlen (tree_code_name[c]);
8492
8493   length += strlen ("expected ");
8494   buffer = (char *) alloca (length);
8495   length = 0;
8496
8497   for (c = c1; c <= c2; ++c)
8498     {
8499       const char *prefix = length ? " or " : "expected ";
8500
8501       strcpy (buffer + length, prefix);
8502       length += strlen (prefix);
8503       strcpy (buffer + length, tree_code_name[c]);
8504       length += strlen (tree_code_name[c]);
8505     }
8506
8507   internal_error ("tree check: %s, have %s in %s, at %s:%d",
8508                   buffer, tree_code_name[TREE_CODE (node)],
8509                   function, trim_filename (file), line);
8510 }
8511
8512
8513 /* Similar to tree_check_failed, except that we check that a tree does
8514    not have the specified code, given in CL.  */
8515
8516 void
8517 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
8518                              const char *file, int line, const char *function)
8519 {
8520   internal_error
8521     ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
8522      TREE_CODE_CLASS_STRING (cl),
8523      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
8524      tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
8525 }
8526
8527
8528 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes.  */
8529
8530 void
8531 omp_clause_check_failed (const_tree node, const char *file, int line,
8532                          const char *function, enum omp_clause_code code)
8533 {
8534   internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
8535                   omp_clause_code_name[code], tree_code_name[TREE_CODE (node)],
8536                   function, trim_filename (file), line);
8537 }
8538
8539
8540 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes.  */
8541
8542 void
8543 omp_clause_range_check_failed (const_tree node, const char *file, int line,
8544                                const char *function, enum omp_clause_code c1,
8545                                enum omp_clause_code c2)
8546 {
8547   char *buffer;
8548   unsigned length = 0;
8549   unsigned int c;
8550
8551   for (c = c1; c <= c2; ++c)
8552     length += 4 + strlen (omp_clause_code_name[c]);
8553
8554   length += strlen ("expected ");
8555   buffer = (char *) alloca (length);
8556   length = 0;
8557
8558   for (c = c1; c <= c2; ++c)
8559     {
8560       const char *prefix = length ? " or " : "expected ";
8561
8562       strcpy (buffer + length, prefix);
8563       length += strlen (prefix);
8564       strcpy (buffer + length, omp_clause_code_name[c]);
8565       length += strlen (omp_clause_code_name[c]);
8566     }
8567
8568   internal_error ("tree check: %s, have %s in %s, at %s:%d",
8569                   buffer, omp_clause_code_name[TREE_CODE (node)],
8570                   function, trim_filename (file), line);
8571 }
8572
8573
8574 #undef DEFTREESTRUCT
8575 #define DEFTREESTRUCT(VAL, NAME) NAME,
8576
8577 static const char *ts_enum_names[] = {
8578 #include "treestruct.def"
8579 };
8580 #undef DEFTREESTRUCT
8581
8582 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
8583
8584 /* Similar to tree_class_check_failed, except that we check for
8585    whether CODE contains the tree structure identified by EN.  */
8586
8587 void
8588 tree_contains_struct_check_failed (const_tree node,
8589                                    const enum tree_node_structure_enum en,
8590                                    const char *file, int line,
8591                                    const char *function)
8592 {
8593   internal_error
8594     ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
8595      TS_ENUM_NAME(en),
8596      tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
8597 }
8598
8599
8600 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
8601    (dynamically sized) vector.  */
8602
8603 void
8604 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
8605                            const char *function)
8606 {
8607   internal_error
8608     ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
8609      idx + 1, len, function, trim_filename (file), line);
8610 }
8611
8612 /* Similar to above, except that the check is for the bounds of the operand
8613    vector of an expression node EXP.  */
8614
8615 void
8616 tree_operand_check_failed (int idx, const_tree exp, const char *file,
8617                            int line, const char *function)
8618 {
8619   int code = TREE_CODE (exp);
8620   internal_error
8621     ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
8622      idx + 1, tree_code_name[code], TREE_OPERAND_LENGTH (exp),
8623      function, trim_filename (file), line);
8624 }
8625
8626 /* Similar to above, except that the check is for the number of
8627    operands of an OMP_CLAUSE node.  */
8628
8629 void
8630 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
8631                                  int line, const char *function)
8632 {
8633   internal_error
8634     ("tree check: accessed operand %d of omp_clause %s with %d operands "
8635      "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
8636      omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
8637      trim_filename (file), line);
8638 }
8639 #endif /* ENABLE_TREE_CHECKING */
8640 \f
8641 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
8642    and mapped to the machine mode MODE.  Initialize its fields and build
8643    the information necessary for debugging output.  */
8644
8645 static tree
8646 make_vector_type (tree innertype, int nunits, enum machine_mode mode)
8647 {
8648   tree t;
8649   hashval_t hashcode = 0;
8650
8651   t = make_node (VECTOR_TYPE);
8652   TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
8653   SET_TYPE_VECTOR_SUBPARTS (t, nunits);
8654   SET_TYPE_MODE (t, mode);
8655
8656   if (TYPE_STRUCTURAL_EQUALITY_P (innertype))
8657     SET_TYPE_STRUCTURAL_EQUALITY (t);
8658   else if (TYPE_CANONICAL (innertype) != innertype
8659            || mode != VOIDmode)
8660     TYPE_CANONICAL (t)
8661       = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode);
8662
8663   layout_type (t);
8664
8665   {
8666     tree index = build_int_cst (NULL_TREE, nunits - 1);
8667     tree array = build_array_type (TYPE_MAIN_VARIANT (innertype),
8668                                    build_index_type (index));
8669     tree rt = make_node (RECORD_TYPE);
8670
8671     TYPE_FIELDS (rt) = build_decl (UNKNOWN_LOCATION, FIELD_DECL,
8672                                    get_identifier ("f"), array);
8673     DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
8674     layout_type (rt);
8675     TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
8676     /* In dwarfout.c, type lookup uses TYPE_UID numbers.  We want to output
8677        the representation type, and we want to find that die when looking up
8678        the vector type.  This is most easily achieved by making the TYPE_UID
8679        numbers equal.  */
8680     TYPE_UID (rt) = TYPE_UID (t);
8681   }
8682
8683   hashcode = iterative_hash_host_wide_int (VECTOR_TYPE, hashcode);
8684   hashcode = iterative_hash_host_wide_int (nunits, hashcode);
8685   hashcode = iterative_hash_host_wide_int (mode, hashcode);
8686   hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (t)), hashcode);
8687   t = type_hash_canon (hashcode, t);
8688
8689   /* We have built a main variant, based on the main variant of the
8690      inner type. Use it to build the variant we return.  */
8691   if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
8692       && TREE_TYPE (t) != innertype)
8693     return build_type_attribute_qual_variant (t,
8694                                               TYPE_ATTRIBUTES (innertype),
8695                                               TYPE_QUALS (innertype));
8696
8697   return t;
8698 }
8699
8700 static tree
8701 make_or_reuse_type (unsigned size, int unsignedp)
8702 {
8703   if (size == INT_TYPE_SIZE)
8704     return unsignedp ? unsigned_type_node : integer_type_node;
8705   if (size == CHAR_TYPE_SIZE)
8706     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
8707   if (size == SHORT_TYPE_SIZE)
8708     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
8709   if (size == LONG_TYPE_SIZE)
8710     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
8711   if (size == LONG_LONG_TYPE_SIZE)
8712     return (unsignedp ? long_long_unsigned_type_node
8713             : long_long_integer_type_node);
8714
8715   if (unsignedp)
8716     return make_unsigned_type (size);
8717   else
8718     return make_signed_type (size);
8719 }
8720
8721 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP.  */
8722
8723 static tree
8724 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
8725 {
8726   if (satp)
8727     {
8728       if (size == SHORT_FRACT_TYPE_SIZE)
8729         return unsignedp ? sat_unsigned_short_fract_type_node
8730                          : sat_short_fract_type_node;
8731       if (size == FRACT_TYPE_SIZE)
8732         return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
8733       if (size == LONG_FRACT_TYPE_SIZE)
8734         return unsignedp ? sat_unsigned_long_fract_type_node
8735                          : sat_long_fract_type_node;
8736       if (size == LONG_LONG_FRACT_TYPE_SIZE)
8737         return unsignedp ? sat_unsigned_long_long_fract_type_node
8738                          : sat_long_long_fract_type_node;
8739     }
8740   else
8741     {
8742       if (size == SHORT_FRACT_TYPE_SIZE)
8743         return unsignedp ? unsigned_short_fract_type_node
8744                          : short_fract_type_node;
8745       if (size == FRACT_TYPE_SIZE)
8746         return unsignedp ? unsigned_fract_type_node : fract_type_node;
8747       if (size == LONG_FRACT_TYPE_SIZE)
8748         return unsignedp ? unsigned_long_fract_type_node
8749                          : long_fract_type_node;
8750       if (size == LONG_LONG_FRACT_TYPE_SIZE)
8751         return unsignedp ? unsigned_long_long_fract_type_node
8752                          : long_long_fract_type_node;
8753     }
8754
8755   return make_fract_type (size, unsignedp, satp);
8756 }
8757
8758 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP.  */
8759
8760 static tree
8761 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
8762 {
8763   if (satp)
8764     {
8765       if (size == SHORT_ACCUM_TYPE_SIZE)
8766         return unsignedp ? sat_unsigned_short_accum_type_node
8767                          : sat_short_accum_type_node;
8768       if (size == ACCUM_TYPE_SIZE)
8769         return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
8770       if (size == LONG_ACCUM_TYPE_SIZE)
8771         return unsignedp ? sat_unsigned_long_accum_type_node
8772                          : sat_long_accum_type_node;
8773       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
8774         return unsignedp ? sat_unsigned_long_long_accum_type_node
8775                          : sat_long_long_accum_type_node;
8776     }
8777   else
8778     {
8779       if (size == SHORT_ACCUM_TYPE_SIZE)
8780         return unsignedp ? unsigned_short_accum_type_node
8781                          : short_accum_type_node;
8782       if (size == ACCUM_TYPE_SIZE)
8783         return unsignedp ? unsigned_accum_type_node : accum_type_node;
8784       if (size == LONG_ACCUM_TYPE_SIZE)
8785         return unsignedp ? unsigned_long_accum_type_node
8786                          : long_accum_type_node;
8787       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
8788         return unsignedp ? unsigned_long_long_accum_type_node
8789                          : long_long_accum_type_node;
8790     }
8791
8792   return make_accum_type (size, unsignedp, satp);
8793 }
8794
8795 /* Create nodes for all integer types (and error_mark_node) using the sizes
8796    of C datatypes.  The caller should call set_sizetype soon after calling
8797    this function to select one of the types as sizetype.  */
8798
8799 void
8800 build_common_tree_nodes (bool signed_char)
8801 {
8802   error_mark_node = make_node (ERROR_MARK);
8803   TREE_TYPE (error_mark_node) = error_mark_node;
8804
8805   initialize_sizetypes ();
8806
8807   /* Define both `signed char' and `unsigned char'.  */
8808   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
8809   TYPE_STRING_FLAG (signed_char_type_node) = 1;
8810   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
8811   TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
8812
8813   /* Define `char', which is like either `signed char' or `unsigned char'
8814      but not the same as either.  */
8815   char_type_node
8816     = (signed_char
8817        ? make_signed_type (CHAR_TYPE_SIZE)
8818        : make_unsigned_type (CHAR_TYPE_SIZE));
8819   TYPE_STRING_FLAG (char_type_node) = 1;
8820
8821   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
8822   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
8823   integer_type_node = make_signed_type (INT_TYPE_SIZE);
8824   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
8825   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
8826   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
8827   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
8828   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
8829
8830   /* Define a boolean type.  This type only represents boolean values but
8831      may be larger than char depending on the value of BOOL_TYPE_SIZE.
8832      Front ends which want to override this size (i.e. Java) can redefine
8833      boolean_type_node before calling build_common_tree_nodes_2.  */
8834   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
8835   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
8836   TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
8837   TYPE_PRECISION (boolean_type_node) = 1;
8838
8839   /* Fill in the rest of the sized types.  Reuse existing type nodes
8840      when possible.  */
8841   intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
8842   intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
8843   intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
8844   intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
8845   intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
8846
8847   unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
8848   unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
8849   unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
8850   unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
8851   unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
8852
8853   access_public_node = get_identifier ("public");
8854   access_protected_node = get_identifier ("protected");
8855   access_private_node = get_identifier ("private");
8856 }
8857
8858 /* Call this function after calling build_common_tree_nodes and set_sizetype.
8859    It will create several other common tree nodes.  */
8860
8861 void
8862 build_common_tree_nodes_2 (int short_double)
8863 {
8864   /* Define these next since types below may used them.  */
8865   integer_zero_node = build_int_cst (NULL_TREE, 0);
8866   integer_one_node = build_int_cst (NULL_TREE, 1);
8867   integer_minus_one_node = build_int_cst (NULL_TREE, -1);
8868
8869   size_zero_node = size_int (0);
8870   size_one_node = size_int (1);
8871   bitsize_zero_node = bitsize_int (0);
8872   bitsize_one_node = bitsize_int (1);
8873   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
8874
8875   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
8876   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
8877
8878   void_type_node = make_node (VOID_TYPE);
8879   layout_type (void_type_node);
8880
8881   /* We are not going to have real types in C with less than byte alignment,
8882      so we might as well not have any types that claim to have it.  */
8883   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
8884   TYPE_USER_ALIGN (void_type_node) = 0;
8885
8886   null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
8887   layout_type (TREE_TYPE (null_pointer_node));
8888
8889   ptr_type_node = build_pointer_type (void_type_node);
8890   const_ptr_type_node
8891     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
8892   fileptr_type_node = ptr_type_node;
8893
8894   float_type_node = make_node (REAL_TYPE);
8895   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
8896   layout_type (float_type_node);
8897
8898   double_type_node = make_node (REAL_TYPE);
8899   if (short_double)
8900     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
8901   else
8902     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
8903   layout_type (double_type_node);
8904
8905   long_double_type_node = make_node (REAL_TYPE);
8906   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
8907   layout_type (long_double_type_node);
8908
8909   float_ptr_type_node = build_pointer_type (float_type_node);
8910   double_ptr_type_node = build_pointer_type (double_type_node);
8911   long_double_ptr_type_node = build_pointer_type (long_double_type_node);
8912   integer_ptr_type_node = build_pointer_type (integer_type_node);
8913
8914   /* Fixed size integer types.  */
8915   uint32_type_node = build_nonstandard_integer_type (32, true);
8916   uint64_type_node = build_nonstandard_integer_type (64, true);
8917
8918   /* Decimal float types. */
8919   dfloat32_type_node = make_node (REAL_TYPE);
8920   TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
8921   layout_type (dfloat32_type_node);
8922   SET_TYPE_MODE (dfloat32_type_node, SDmode);
8923   dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
8924
8925   dfloat64_type_node = make_node (REAL_TYPE);
8926   TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
8927   layout_type (dfloat64_type_node);
8928   SET_TYPE_MODE (dfloat64_type_node, DDmode);
8929   dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
8930
8931   dfloat128_type_node = make_node (REAL_TYPE);
8932   TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
8933   layout_type (dfloat128_type_node);
8934   SET_TYPE_MODE (dfloat128_type_node, TDmode);
8935   dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
8936
8937   complex_integer_type_node = build_complex_type (integer_type_node);
8938   complex_float_type_node = build_complex_type (float_type_node);
8939   complex_double_type_node = build_complex_type (double_type_node);
8940   complex_long_double_type_node = build_complex_type (long_double_type_node);
8941
8942 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned.  */
8943 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
8944   sat_ ## KIND ## _type_node = \
8945     make_sat_signed_ ## KIND ## _type (SIZE); \
8946   sat_unsigned_ ## KIND ## _type_node = \
8947     make_sat_unsigned_ ## KIND ## _type (SIZE); \
8948   KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
8949   unsigned_ ## KIND ## _type_node = \
8950     make_unsigned_ ## KIND ## _type (SIZE);
8951
8952 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
8953   sat_ ## WIDTH ## KIND ## _type_node = \
8954     make_sat_signed_ ## KIND ## _type (SIZE); \
8955   sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
8956     make_sat_unsigned_ ## KIND ## _type (SIZE); \
8957   WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
8958   unsigned_ ## WIDTH ## KIND ## _type_node = \
8959     make_unsigned_ ## KIND ## _type (SIZE);
8960
8961 /* Make fixed-point type nodes based on four different widths.  */
8962 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
8963   MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
8964   MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
8965   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
8966   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
8967
8968 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned.  */
8969 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
8970   NAME ## _type_node = \
8971     make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
8972   u ## NAME ## _type_node = \
8973     make_or_reuse_unsigned_ ## KIND ## _type \
8974       (GET_MODE_BITSIZE (U ## MODE ## mode)); \
8975   sat_ ## NAME ## _type_node = \
8976     make_or_reuse_sat_signed_ ## KIND ## _type \
8977       (GET_MODE_BITSIZE (MODE ## mode)); \
8978   sat_u ## NAME ## _type_node = \
8979     make_or_reuse_sat_unsigned_ ## KIND ## _type \
8980       (GET_MODE_BITSIZE (U ## MODE ## mode));
8981
8982   /* Fixed-point type and mode nodes.  */
8983   MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
8984   MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
8985   MAKE_FIXED_MODE_NODE (fract, qq, QQ)
8986   MAKE_FIXED_MODE_NODE (fract, hq, HQ)
8987   MAKE_FIXED_MODE_NODE (fract, sq, SQ)
8988   MAKE_FIXED_MODE_NODE (fract, dq, DQ)
8989   MAKE_FIXED_MODE_NODE (fract, tq, TQ)
8990   MAKE_FIXED_MODE_NODE (accum, ha, HA)
8991   MAKE_FIXED_MODE_NODE (accum, sa, SA)
8992   MAKE_FIXED_MODE_NODE (accum, da, DA)
8993   MAKE_FIXED_MODE_NODE (accum, ta, TA)
8994
8995   {
8996     tree t = targetm.build_builtin_va_list ();
8997
8998     /* Many back-ends define record types without setting TYPE_NAME.
8999        If we copied the record type here, we'd keep the original
9000        record type without a name.  This breaks name mangling.  So,
9001        don't copy record types and let c_common_nodes_and_builtins()
9002        declare the type to be __builtin_va_list.  */
9003     if (TREE_CODE (t) != RECORD_TYPE)
9004       t = build_variant_type_copy (t);
9005
9006     va_list_type_node = t;
9007   }
9008 }
9009
9010 /* A subroutine of build_common_builtin_nodes.  Define a builtin function.  */
9011
9012 static void
9013 local_define_builtin (const char *name, tree type, enum built_in_function code,
9014                       const char *library_name, int ecf_flags)
9015 {
9016   tree decl;
9017
9018   decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
9019                                library_name, NULL_TREE);
9020   if (ecf_flags & ECF_CONST)
9021     TREE_READONLY (decl) = 1;
9022   if (ecf_flags & ECF_PURE)
9023     DECL_PURE_P (decl) = 1;
9024   if (ecf_flags & ECF_LOOPING_CONST_OR_PURE)
9025     DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
9026   if (ecf_flags & ECF_NORETURN)
9027     TREE_THIS_VOLATILE (decl) = 1;
9028   if (ecf_flags & ECF_NOTHROW)
9029     TREE_NOTHROW (decl) = 1;
9030   if (ecf_flags & ECF_MALLOC)
9031     DECL_IS_MALLOC (decl) = 1;
9032
9033   built_in_decls[code] = decl;
9034   implicit_built_in_decls[code] = decl;
9035 }
9036
9037 /* Call this function after instantiating all builtins that the language
9038    front end cares about.  This will build the rest of the builtins that
9039    are relied upon by the tree optimizers and the middle-end.  */
9040
9041 void
9042 build_common_builtin_nodes (void)
9043 {
9044   tree tmp, tmp2, ftype;
9045
9046   if (built_in_decls[BUILT_IN_MEMCPY] == NULL
9047       || built_in_decls[BUILT_IN_MEMMOVE] == NULL)
9048     {
9049       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
9050       tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
9051       tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
9052       ftype = build_function_type (ptr_type_node, tmp);
9053
9054       if (built_in_decls[BUILT_IN_MEMCPY] == NULL)
9055         local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
9056                               "memcpy", ECF_NOTHROW);
9057       if (built_in_decls[BUILT_IN_MEMMOVE] == NULL)
9058         local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
9059                               "memmove", ECF_NOTHROW);
9060     }
9061
9062   if (built_in_decls[BUILT_IN_MEMCMP] == NULL)
9063     {
9064       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
9065       tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
9066       tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
9067       ftype = build_function_type (integer_type_node, tmp);
9068       local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
9069                             "memcmp", ECF_PURE | ECF_NOTHROW);
9070     }
9071
9072   if (built_in_decls[BUILT_IN_MEMSET] == NULL)
9073     {
9074       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
9075       tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
9076       tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
9077       ftype = build_function_type (ptr_type_node, tmp);
9078       local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
9079                             "memset", ECF_NOTHROW);
9080     }
9081
9082   if (built_in_decls[BUILT_IN_ALLOCA] == NULL)
9083     {
9084       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
9085       ftype = build_function_type (ptr_type_node, tmp);
9086       local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
9087                             "alloca", ECF_MALLOC | ECF_NOTHROW);
9088     }
9089
9090   /* If we're checking the stack, `alloca' can throw.  */
9091   if (flag_stack_check)
9092     TREE_NOTHROW (built_in_decls[BUILT_IN_ALLOCA]) = 0;
9093
9094   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9095   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
9096   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
9097   ftype = build_function_type (void_type_node, tmp);
9098   local_define_builtin ("__builtin_init_trampoline", ftype,
9099                         BUILT_IN_INIT_TRAMPOLINE,
9100                         "__builtin_init_trampoline", ECF_NOTHROW);
9101
9102   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9103   ftype = build_function_type (ptr_type_node, tmp);
9104   local_define_builtin ("__builtin_adjust_trampoline", ftype,
9105                         BUILT_IN_ADJUST_TRAMPOLINE,
9106                         "__builtin_adjust_trampoline",
9107                         ECF_CONST | ECF_NOTHROW);
9108
9109   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9110   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
9111   ftype = build_function_type (void_type_node, tmp);
9112   local_define_builtin ("__builtin_nonlocal_goto", ftype,
9113                         BUILT_IN_NONLOCAL_GOTO,
9114                         "__builtin_nonlocal_goto",
9115                         ECF_NORETURN | ECF_NOTHROW);
9116
9117   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9118   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
9119   ftype = build_function_type (void_type_node, tmp);
9120   local_define_builtin ("__builtin_setjmp_setup", ftype,
9121                         BUILT_IN_SETJMP_SETUP,
9122                         "__builtin_setjmp_setup", ECF_NOTHROW);
9123
9124   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9125   ftype = build_function_type (ptr_type_node, tmp);
9126   local_define_builtin ("__builtin_setjmp_dispatcher", ftype,
9127                         BUILT_IN_SETJMP_DISPATCHER,
9128                         "__builtin_setjmp_dispatcher",
9129                         ECF_PURE | ECF_NOTHROW);
9130
9131   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9132   ftype = build_function_type (void_type_node, tmp);
9133   local_define_builtin ("__builtin_setjmp_receiver", ftype,
9134                         BUILT_IN_SETJMP_RECEIVER,
9135                         "__builtin_setjmp_receiver", ECF_NOTHROW);
9136
9137   ftype = build_function_type (ptr_type_node, void_list_node);
9138   local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
9139                         "__builtin_stack_save", ECF_NOTHROW);
9140
9141   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9142   ftype = build_function_type (void_type_node, tmp);
9143   local_define_builtin ("__builtin_stack_restore", ftype,
9144                         BUILT_IN_STACK_RESTORE,
9145                         "__builtin_stack_restore", ECF_NOTHROW);
9146
9147   ftype = build_function_type (void_type_node, void_list_node);
9148   local_define_builtin ("__builtin_profile_func_enter", ftype,
9149                         BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter", 0);
9150   local_define_builtin ("__builtin_profile_func_exit", ftype,
9151                         BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit", 0);
9152
9153   /* If there's a possibility that we might use the ARM EABI, build the
9154     alternate __cxa_end_cleanup node used to resume from C++ and Java.  */
9155   if (targetm.arm_eabi_unwinder)
9156     {
9157       ftype = build_function_type (void_type_node, void_list_node);
9158       local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
9159                             BUILT_IN_CXA_END_CLEANUP,
9160                             "__cxa_end_cleanup", ECF_NORETURN);
9161     }
9162
9163   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9164   ftype = build_function_type (void_type_node, tmp);
9165   local_define_builtin ("__builtin_unwind_resume", ftype,
9166                         BUILT_IN_UNWIND_RESUME,
9167                         (USING_SJLJ_EXCEPTIONS
9168                          ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
9169                         ECF_NORETURN);
9170
9171   /* The exception object and filter values from the runtime.  The argument
9172      must be zero before exception lowering, i.e. from the front end.  After
9173      exception lowering, it will be the region number for the exception
9174      landing pad.  These functions are PURE instead of CONST to prevent
9175      them from being hoisted past the exception edge that will initialize
9176      its value in the landing pad.  */
9177   tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
9178   ftype = build_function_type (ptr_type_node, tmp);
9179   local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
9180                         "__builtin_eh_pointer", ECF_PURE | ECF_NOTHROW);
9181
9182   tmp2 = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
9183   ftype = build_function_type (tmp2, tmp);
9184   local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
9185                         "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW);
9186
9187   tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
9188   tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
9189   ftype = build_function_type (void_type_node, tmp);
9190   local_define_builtin ("__builtin_eh_copy_values", ftype,
9191                         BUILT_IN_EH_COPY_VALUES,
9192                         "__builtin_eh_copy_values", ECF_NOTHROW);
9193
9194   /* Complex multiplication and division.  These are handled as builtins
9195      rather than optabs because emit_library_call_value doesn't support
9196      complex.  Further, we can do slightly better with folding these
9197      beasties if the real and complex parts of the arguments are separate.  */
9198   {
9199     int mode;
9200
9201     for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
9202       {
9203         char mode_name_buf[4], *q;
9204         const char *p;
9205         enum built_in_function mcode, dcode;
9206         tree type, inner_type;
9207
9208         type = lang_hooks.types.type_for_mode ((enum machine_mode) mode, 0);
9209         if (type == NULL)
9210           continue;
9211         inner_type = TREE_TYPE (type);
9212
9213         tmp = tree_cons (NULL_TREE, inner_type, void_list_node);
9214         tmp = tree_cons (NULL_TREE, inner_type, tmp);
9215         tmp = tree_cons (NULL_TREE, inner_type, tmp);
9216         tmp = tree_cons (NULL_TREE, inner_type, tmp);
9217         ftype = build_function_type (type, tmp);
9218
9219         mcode = ((enum built_in_function)
9220                  (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
9221         dcode = ((enum built_in_function)
9222                  (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
9223
9224         for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
9225           *q = TOLOWER (*p);
9226         *q = '\0';
9227
9228         built_in_names[mcode] = concat ("__mul", mode_name_buf, "3", NULL);
9229         local_define_builtin (built_in_names[mcode], ftype, mcode,
9230                               built_in_names[mcode], ECF_CONST | ECF_NOTHROW);
9231
9232         built_in_names[dcode] = concat ("__div", mode_name_buf, "3", NULL);
9233         local_define_builtin (built_in_names[dcode], ftype, dcode,
9234                               built_in_names[dcode], ECF_CONST | ECF_NOTHROW);
9235       }
9236   }
9237 }
9238
9239 /* HACK.  GROSS.  This is absolutely disgusting.  I wish there was a
9240    better way.
9241
9242    If we requested a pointer to a vector, build up the pointers that
9243    we stripped off while looking for the inner type.  Similarly for
9244    return values from functions.
9245
9246    The argument TYPE is the top of the chain, and BOTTOM is the
9247    new type which we will point to.  */
9248
9249 tree
9250 reconstruct_complex_type (tree type, tree bottom)
9251 {
9252   tree inner, outer;
9253
9254   if (TREE_CODE (type) == POINTER_TYPE)
9255     {
9256       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
9257       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
9258                                            TYPE_REF_CAN_ALIAS_ALL (type));
9259     }
9260   else if (TREE_CODE (type) == REFERENCE_TYPE)
9261     {
9262       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
9263       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
9264                                              TYPE_REF_CAN_ALIAS_ALL (type));
9265     }
9266   else if (TREE_CODE (type) == ARRAY_TYPE)
9267     {
9268       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
9269       outer = build_array_type (inner, TYPE_DOMAIN (type));
9270     }
9271   else if (TREE_CODE (type) == FUNCTION_TYPE)
9272     {
9273       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
9274       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
9275     }
9276   else if (TREE_CODE (type) == METHOD_TYPE)
9277     {
9278       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
9279       /* The build_method_type_directly() routine prepends 'this' to argument list,
9280          so we must compensate by getting rid of it.  */
9281       outer
9282         = build_method_type_directly
9283             (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
9284              inner,
9285              TREE_CHAIN (TYPE_ARG_TYPES (type)));
9286     }
9287   else if (TREE_CODE (type) == OFFSET_TYPE)
9288     {
9289       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
9290       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
9291     }
9292   else
9293     return bottom;
9294
9295   return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
9296                                             TYPE_QUALS (type));
9297 }
9298
9299 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
9300    the inner type.  */
9301 tree
9302 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
9303 {
9304   int nunits;
9305
9306   switch (GET_MODE_CLASS (mode))
9307     {
9308     case MODE_VECTOR_INT:
9309     case MODE_VECTOR_FLOAT:
9310     case MODE_VECTOR_FRACT:
9311     case MODE_VECTOR_UFRACT:
9312     case MODE_VECTOR_ACCUM:
9313     case MODE_VECTOR_UACCUM:
9314       nunits = GET_MODE_NUNITS (mode);
9315       break;
9316
9317     case MODE_INT:
9318       /* Check that there are no leftover bits.  */
9319       gcc_assert (GET_MODE_BITSIZE (mode)
9320                   % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
9321
9322       nunits = GET_MODE_BITSIZE (mode)
9323                / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
9324       break;
9325
9326     default:
9327       gcc_unreachable ();
9328     }
9329
9330   return make_vector_type (innertype, nunits, mode);
9331 }
9332
9333 /* Similarly, but takes the inner type and number of units, which must be
9334    a power of two.  */
9335
9336 tree
9337 build_vector_type (tree innertype, int nunits)
9338 {
9339   return make_vector_type (innertype, nunits, VOIDmode);
9340 }
9341
9342 /* Similarly, but takes the inner type and number of units, which must be
9343    a power of two.  */
9344
9345 tree
9346 build_opaque_vector_type (tree innertype, int nunits)
9347 {
9348   tree t;
9349   innertype = build_distinct_type_copy (innertype);
9350   t = make_vector_type (innertype, nunits, VOIDmode);
9351   TYPE_VECTOR_OPAQUE (t) = true;
9352   return t;
9353 }
9354
9355
9356 /* Given an initializer INIT, return TRUE if INIT is zero or some
9357    aggregate of zeros.  Otherwise return FALSE.  */
9358 bool
9359 initializer_zerop (const_tree init)
9360 {
9361   tree elt;
9362
9363   STRIP_NOPS (init);
9364
9365   switch (TREE_CODE (init))
9366     {
9367     case INTEGER_CST:
9368       return integer_zerop (init);
9369
9370     case REAL_CST:
9371       /* ??? Note that this is not correct for C4X float formats.  There,
9372          a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
9373          negative exponent.  */
9374       return real_zerop (init)
9375         && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
9376
9377     case FIXED_CST:
9378       return fixed_zerop (init);
9379
9380     case COMPLEX_CST:
9381       return integer_zerop (init)
9382         || (real_zerop (init)
9383             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
9384             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
9385
9386     case VECTOR_CST:
9387       for (elt = TREE_VECTOR_CST_ELTS (init); elt; elt = TREE_CHAIN (elt))
9388         if (!initializer_zerop (TREE_VALUE (elt)))
9389           return false;
9390       return true;
9391
9392     case CONSTRUCTOR:
9393       {
9394         unsigned HOST_WIDE_INT idx;
9395
9396         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
9397           if (!initializer_zerop (elt))
9398             return false;
9399         return true;
9400       }
9401
9402     case STRING_CST:
9403       {
9404         int i;
9405
9406         /* We need to loop through all elements to handle cases like
9407            "\0" and "\0foobar".  */
9408         for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
9409           if (TREE_STRING_POINTER (init)[i] != '\0')
9410             return false;
9411
9412         return true;
9413       }
9414
9415     default:
9416       return false;
9417     }
9418 }
9419
9420 /* Build an empty statement at location LOC.  */
9421
9422 tree
9423 build_empty_stmt (location_t loc)
9424 {
9425   tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
9426   SET_EXPR_LOCATION (t, loc);
9427   return t;
9428 }
9429
9430
9431 /* Build an OpenMP clause with code CODE.  LOC is the location of the
9432    clause.  */
9433
9434 tree
9435 build_omp_clause (location_t loc, enum omp_clause_code code)
9436 {
9437   tree t;
9438   int size, length;
9439
9440   length = omp_clause_num_ops[code];
9441   size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
9442
9443   t = GGC_NEWVAR (union tree_node, size);
9444   memset (t, 0, size);
9445   TREE_SET_CODE (t, OMP_CLAUSE);
9446   OMP_CLAUSE_SET_CODE (t, code);
9447   OMP_CLAUSE_LOCATION (t) = loc;
9448
9449 #ifdef GATHER_STATISTICS
9450   tree_node_counts[(int) omp_clause_kind]++;
9451   tree_node_sizes[(int) omp_clause_kind] += size;
9452 #endif
9453
9454   return t;
9455 }
9456
9457 /* Build a tcc_vl_exp object with code CODE and room for LEN operands.  LEN
9458    includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
9459    Except for the CODE and operand count field, other storage for the
9460    object is initialized to zeros.  */
9461
9462 tree
9463 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
9464 {
9465   tree t;
9466   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
9467
9468   gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
9469   gcc_assert (len >= 1);
9470
9471 #ifdef GATHER_STATISTICS
9472   tree_node_counts[(int) e_kind]++;
9473   tree_node_sizes[(int) e_kind] += length;
9474 #endif
9475
9476   t = (tree) ggc_alloc_zone_pass_stat (length, &tree_zone);
9477
9478   memset (t, 0, length);
9479
9480   TREE_SET_CODE (t, code);
9481
9482   /* Can't use TREE_OPERAND to store the length because if checking is
9483      enabled, it will try to check the length before we store it.  :-P  */
9484   t->exp.operands[0] = build_int_cst (sizetype, len);
9485
9486   return t;
9487 }
9488
9489
9490 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE
9491    and FN and a null static chain slot.  ARGLIST is a TREE_LIST of the
9492    arguments.  */
9493
9494 tree
9495 build_call_list (tree return_type, tree fn, tree arglist)
9496 {
9497   tree t;
9498   int i;
9499
9500   t = build_vl_exp (CALL_EXPR, list_length (arglist) + 3);
9501   TREE_TYPE (t) = return_type;
9502   CALL_EXPR_FN (t) = fn;
9503   CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
9504   for (i = 0; arglist; arglist = TREE_CHAIN (arglist), i++)
9505     CALL_EXPR_ARG (t, i) = TREE_VALUE (arglist);
9506   process_call_operands (t);
9507   return t;
9508 }
9509
9510 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
9511    FN and a null static chain slot.  NARGS is the number of call arguments
9512    which are specified as "..." arguments.  */
9513
9514 tree
9515 build_call_nary (tree return_type, tree fn, int nargs, ...)
9516 {
9517   tree ret;
9518   va_list args;
9519   va_start (args, nargs);
9520   ret = build_call_valist (return_type, fn, nargs, args);
9521   va_end (args);
9522   return ret;
9523 }
9524
9525 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
9526    FN and a null static chain slot.  NARGS is the number of call arguments
9527    which are specified as a va_list ARGS.  */
9528
9529 tree
9530 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
9531 {
9532   tree t;
9533   int i;
9534
9535   t = build_vl_exp (CALL_EXPR, nargs + 3);
9536   TREE_TYPE (t) = return_type;
9537   CALL_EXPR_FN (t) = fn;
9538   CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
9539   for (i = 0; i < nargs; i++)
9540     CALL_EXPR_ARG (t, i) = va_arg (args, tree);
9541   process_call_operands (t);
9542   return t;
9543 }
9544
9545 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
9546    FN and a null static chain slot.  NARGS is the number of call arguments
9547    which are specified as a tree array ARGS.  */
9548
9549 tree
9550 build_call_array_loc (location_t loc, tree return_type, tree fn,
9551                       int nargs, const tree *args)
9552 {
9553   tree t;
9554   int i;
9555
9556   t = build_vl_exp (CALL_EXPR, nargs + 3);
9557   TREE_TYPE (t) = return_type;
9558   CALL_EXPR_FN (t) = fn;
9559   CALL_EXPR_STATIC_CHAIN (t) = NULL_TREE;
9560   for (i = 0; i < nargs; i++)
9561     CALL_EXPR_ARG (t, i) = args[i];
9562   process_call_operands (t);
9563   SET_EXPR_LOCATION (t, loc);
9564   return t;
9565 }
9566
9567 /* Like build_call_array, but takes a VEC.  */
9568
9569 tree
9570 build_call_vec (tree return_type, tree fn, VEC(tree,gc) *args)
9571 {
9572   tree ret, t;
9573   unsigned int ix;
9574
9575   ret = build_vl_exp (CALL_EXPR, VEC_length (tree, args) + 3);
9576   TREE_TYPE (ret) = return_type;
9577   CALL_EXPR_FN (ret) = fn;
9578   CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
9579   for (ix = 0; VEC_iterate (tree, args, ix, t); ++ix)
9580     CALL_EXPR_ARG (ret, ix) = t;
9581   process_call_operands (ret);
9582   return ret;
9583 }
9584
9585
9586 /* Returns true if it is possible to prove that the index of
9587    an array access REF (an ARRAY_REF expression) falls into the
9588    array bounds.  */
9589
9590 bool
9591 in_array_bounds_p (tree ref)
9592 {
9593   tree idx = TREE_OPERAND (ref, 1);
9594   tree min, max;
9595
9596   if (TREE_CODE (idx) != INTEGER_CST)
9597     return false;
9598
9599   min = array_ref_low_bound (ref);
9600   max = array_ref_up_bound (ref);
9601   if (!min
9602       || !max
9603       || TREE_CODE (min) != INTEGER_CST
9604       || TREE_CODE (max) != INTEGER_CST)
9605     return false;
9606
9607   if (tree_int_cst_lt (idx, min)
9608       || tree_int_cst_lt (max, idx))
9609     return false;
9610
9611   return true;
9612 }
9613
9614 /* Returns true if it is possible to prove that the range of
9615    an array access REF (an ARRAY_RANGE_REF expression) falls
9616    into the array bounds.  */
9617
9618 bool
9619 range_in_array_bounds_p (tree ref)
9620 {
9621   tree domain_type = TYPE_DOMAIN (TREE_TYPE (ref));
9622   tree range_min, range_max, min, max;
9623
9624   range_min = TYPE_MIN_VALUE (domain_type);
9625   range_max = TYPE_MAX_VALUE (domain_type);
9626   if (!range_min
9627       || !range_max
9628       || TREE_CODE (range_min) != INTEGER_CST
9629       || TREE_CODE (range_max) != INTEGER_CST)
9630     return false;
9631
9632   min = array_ref_low_bound (ref);
9633   max = array_ref_up_bound (ref);
9634   if (!min
9635       || !max
9636       || TREE_CODE (min) != INTEGER_CST
9637       || TREE_CODE (max) != INTEGER_CST)
9638     return false;
9639
9640   if (tree_int_cst_lt (range_min, min)
9641       || tree_int_cst_lt (max, range_max))
9642     return false;
9643
9644   return true;
9645 }
9646
9647 /* Return true if T (assumed to be a DECL) must be assigned a memory
9648    location.  */
9649
9650 bool
9651 needs_to_live_in_memory (const_tree t)
9652 {
9653   if (TREE_CODE (t) == SSA_NAME)
9654     t = SSA_NAME_VAR (t);
9655
9656   return (TREE_ADDRESSABLE (t)
9657           || is_global_var (t)
9658           || (TREE_CODE (t) == RESULT_DECL
9659               && aggregate_value_p (t, current_function_decl)));
9660 }
9661
9662 /* There are situations in which a language considers record types
9663    compatible which have different field lists.  Decide if two fields
9664    are compatible.  It is assumed that the parent records are compatible.  */
9665
9666 bool
9667 fields_compatible_p (const_tree f1, const_tree f2)
9668 {
9669   if (!operand_equal_p (DECL_FIELD_BIT_OFFSET (f1),
9670                         DECL_FIELD_BIT_OFFSET (f2), OEP_ONLY_CONST))
9671     return false;
9672
9673   if (!operand_equal_p (DECL_FIELD_OFFSET (f1),
9674                         DECL_FIELD_OFFSET (f2), OEP_ONLY_CONST))
9675     return false;
9676
9677   if (!types_compatible_p (TREE_TYPE (f1), TREE_TYPE (f2)))
9678     return false;
9679
9680   return true;
9681 }
9682
9683 /* Locate within RECORD a field that is compatible with ORIG_FIELD.  */
9684
9685 tree
9686 find_compatible_field (tree record, tree orig_field)
9687 {
9688   tree f;
9689
9690   for (f = TYPE_FIELDS (record); f ; f = TREE_CHAIN (f))
9691     if (TREE_CODE (f) == FIELD_DECL
9692         && fields_compatible_p (f, orig_field))
9693       return f;
9694
9695   /* ??? Why isn't this on the main fields list?  */
9696   f = TYPE_VFIELD (record);
9697   if (f && TREE_CODE (f) == FIELD_DECL
9698       && fields_compatible_p (f, orig_field))
9699     return f;
9700
9701   /* ??? We should abort here, but Java appears to do Bad Things
9702      with inherited fields.  */
9703   return orig_field;
9704 }
9705
9706 /* Return value of a constant X and sign-extend it.  */
9707
9708 HOST_WIDE_INT
9709 int_cst_value (const_tree x)
9710 {
9711   unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
9712   unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
9713
9714   /* Make sure the sign-extended value will fit in a HOST_WIDE_INT.  */
9715   gcc_assert (TREE_INT_CST_HIGH (x) == 0
9716               || TREE_INT_CST_HIGH (x) == -1);
9717
9718   if (bits < HOST_BITS_PER_WIDE_INT)
9719     {
9720       bool negative = ((val >> (bits - 1)) & 1) != 0;
9721       if (negative)
9722         val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
9723       else
9724         val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
9725     }
9726
9727   return val;
9728 }
9729
9730 /* Return value of a constant X and sign-extend it.  */
9731
9732 HOST_WIDEST_INT
9733 widest_int_cst_value (const_tree x)
9734 {
9735   unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
9736   unsigned HOST_WIDEST_INT val = TREE_INT_CST_LOW (x);
9737
9738 #if HOST_BITS_PER_WIDEST_INT > HOST_BITS_PER_WIDE_INT
9739   gcc_assert (HOST_BITS_PER_WIDEST_INT >= 2 * HOST_BITS_PER_WIDE_INT);
9740   val |= (((unsigned HOST_WIDEST_INT) TREE_INT_CST_HIGH (x))
9741           << HOST_BITS_PER_WIDE_INT);
9742 #else
9743   /* Make sure the sign-extended value will fit in a HOST_WIDE_INT.  */
9744   gcc_assert (TREE_INT_CST_HIGH (x) == 0
9745               || TREE_INT_CST_HIGH (x) == -1);
9746 #endif
9747
9748   if (bits < HOST_BITS_PER_WIDEST_INT)
9749     {
9750       bool negative = ((val >> (bits - 1)) & 1) != 0;
9751       if (negative)
9752         val |= (~(unsigned HOST_WIDEST_INT) 0) << (bits - 1) << 1;
9753       else
9754         val &= ~((~(unsigned HOST_WIDEST_INT) 0) << (bits - 1) << 1);
9755     }
9756
9757   return val;
9758 }
9759
9760 /* If TYPE is an integral type, return an equivalent type which is
9761     unsigned iff UNSIGNEDP is true.  If TYPE is not an integral type,
9762     return TYPE itself.  */
9763
9764 tree
9765 signed_or_unsigned_type_for (int unsignedp, tree type)
9766 {
9767   tree t = type;
9768   if (POINTER_TYPE_P (type))
9769     {
9770       /* If the pointer points to the normal address space, use the
9771          size_type_node.  Otherwise use an appropriate size for the pointer
9772          based on the named address space it points to.  */
9773       if (!TYPE_ADDR_SPACE (TREE_TYPE (t)))
9774         t = size_type_node;
9775       else
9776         return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp);
9777     }
9778
9779   if (!INTEGRAL_TYPE_P (t) || TYPE_UNSIGNED (t) == unsignedp)
9780     return t;
9781
9782   return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp);
9783 }
9784
9785 /* Returns unsigned variant of TYPE.  */
9786
9787 tree
9788 unsigned_type_for (tree type)
9789 {
9790   return signed_or_unsigned_type_for (1, type);
9791 }
9792
9793 /* Returns signed variant of TYPE.  */
9794
9795 tree
9796 signed_type_for (tree type)
9797 {
9798   return signed_or_unsigned_type_for (0, type);
9799 }
9800
9801 /* Returns the largest value obtainable by casting something in INNER type to
9802    OUTER type.  */
9803
9804 tree
9805 upper_bound_in_type (tree outer, tree inner)
9806 {
9807   unsigned HOST_WIDE_INT lo, hi;
9808   unsigned int det = 0;
9809   unsigned oprec = TYPE_PRECISION (outer);
9810   unsigned iprec = TYPE_PRECISION (inner);
9811   unsigned prec;
9812
9813   /* Compute a unique number for every combination.  */
9814   det |= (oprec > iprec) ? 4 : 0;
9815   det |= TYPE_UNSIGNED (outer) ? 2 : 0;
9816   det |= TYPE_UNSIGNED (inner) ? 1 : 0;
9817
9818   /* Determine the exponent to use.  */
9819   switch (det)
9820     {
9821     case 0:
9822     case 1:
9823       /* oprec <= iprec, outer: signed, inner: don't care.  */
9824       prec = oprec - 1;
9825       break;
9826     case 2:
9827     case 3:
9828       /* oprec <= iprec, outer: unsigned, inner: don't care.  */
9829       prec = oprec;
9830       break;
9831     case 4:
9832       /* oprec > iprec, outer: signed, inner: signed.  */
9833       prec = iprec - 1;
9834       break;
9835     case 5:
9836       /* oprec > iprec, outer: signed, inner: unsigned.  */
9837       prec = iprec;
9838       break;
9839     case 6:
9840       /* oprec > iprec, outer: unsigned, inner: signed.  */
9841       prec = oprec;
9842       break;
9843     case 7:
9844       /* oprec > iprec, outer: unsigned, inner: unsigned.  */
9845       prec = iprec;
9846       break;
9847     default:
9848       gcc_unreachable ();
9849     }
9850
9851   /* Compute 2^^prec - 1.  */
9852   if (prec <= HOST_BITS_PER_WIDE_INT)
9853     {
9854       hi = 0;
9855       lo = ((~(unsigned HOST_WIDE_INT) 0)
9856             >> (HOST_BITS_PER_WIDE_INT - prec));
9857     }
9858   else
9859     {
9860       hi = ((~(unsigned HOST_WIDE_INT) 0)
9861             >> (2 * HOST_BITS_PER_WIDE_INT - prec));
9862       lo = ~(unsigned HOST_WIDE_INT) 0;
9863     }
9864
9865   return build_int_cst_wide (outer, lo, hi);
9866 }
9867
9868 /* Returns the smallest value obtainable by casting something in INNER type to
9869    OUTER type.  */
9870
9871 tree
9872 lower_bound_in_type (tree outer, tree inner)
9873 {
9874   unsigned HOST_WIDE_INT lo, hi;
9875   unsigned oprec = TYPE_PRECISION (outer);
9876   unsigned iprec = TYPE_PRECISION (inner);
9877
9878   /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
9879      and obtain 0.  */
9880   if (TYPE_UNSIGNED (outer)
9881       /* If we are widening something of an unsigned type, OUTER type
9882          contains all values of INNER type.  In particular, both INNER
9883          and OUTER types have zero in common.  */
9884       || (oprec > iprec && TYPE_UNSIGNED (inner)))
9885     lo = hi = 0;
9886   else
9887     {
9888       /* If we are widening a signed type to another signed type, we
9889          want to obtain -2^^(iprec-1).  If we are keeping the
9890          precision or narrowing to a signed type, we want to obtain
9891          -2^(oprec-1).  */
9892       unsigned prec = oprec > iprec ? iprec : oprec;
9893
9894       if (prec <= HOST_BITS_PER_WIDE_INT)
9895         {
9896           hi = ~(unsigned HOST_WIDE_INT) 0;
9897           lo = (~(unsigned HOST_WIDE_INT) 0) << (prec - 1);
9898         }
9899       else
9900         {
9901           hi = ((~(unsigned HOST_WIDE_INT) 0)
9902                 << (prec - HOST_BITS_PER_WIDE_INT - 1));
9903           lo = 0;
9904         }
9905     }
9906
9907   return build_int_cst_wide (outer, lo, hi);
9908 }
9909
9910 /* Return nonzero if two operands that are suitable for PHI nodes are
9911    necessarily equal.  Specifically, both ARG0 and ARG1 must be either
9912    SSA_NAME or invariant.  Note that this is strictly an optimization.
9913    That is, callers of this function can directly call operand_equal_p
9914    and get the same result, only slower.  */
9915
9916 int
9917 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
9918 {
9919   if (arg0 == arg1)
9920     return 1;
9921   if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
9922     return 0;
9923   return operand_equal_p (arg0, arg1, 0);
9924 }
9925
9926 /* Returns number of zeros at the end of binary representation of X.
9927
9928    ??? Use ffs if available?  */
9929
9930 tree
9931 num_ending_zeros (const_tree x)
9932 {
9933   unsigned HOST_WIDE_INT fr, nfr;
9934   unsigned num, abits;
9935   tree type = TREE_TYPE (x);
9936
9937   if (TREE_INT_CST_LOW (x) == 0)
9938     {
9939       num = HOST_BITS_PER_WIDE_INT;
9940       fr = TREE_INT_CST_HIGH (x);
9941     }
9942   else
9943     {
9944       num = 0;
9945       fr = TREE_INT_CST_LOW (x);
9946     }
9947
9948   for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
9949     {
9950       nfr = fr >> abits;
9951       if (nfr << abits == fr)
9952         {
9953           num += abits;
9954           fr = nfr;
9955         }
9956     }
9957
9958   if (num > TYPE_PRECISION (type))
9959     num = TYPE_PRECISION (type);
9960
9961   return build_int_cst_type (type, num);
9962 }
9963
9964
9965 #define WALK_SUBTREE(NODE)                              \
9966   do                                                    \
9967     {                                                   \
9968       result = walk_tree_1 (&(NODE), func, data, pset, lh);     \
9969       if (result)                                       \
9970         return result;                                  \
9971     }                                                   \
9972   while (0)
9973
9974 /* This is a subroutine of walk_tree that walks field of TYPE that are to
9975    be walked whenever a type is seen in the tree.  Rest of operands and return
9976    value are as for walk_tree.  */
9977
9978 static tree
9979 walk_type_fields (tree type, walk_tree_fn func, void *data,
9980                   struct pointer_set_t *pset, walk_tree_lh lh)
9981 {
9982   tree result = NULL_TREE;
9983
9984   switch (TREE_CODE (type))
9985     {
9986     case POINTER_TYPE:
9987     case REFERENCE_TYPE:
9988       /* We have to worry about mutually recursive pointers.  These can't
9989          be written in C.  They can in Ada.  It's pathological, but
9990          there's an ACATS test (c38102a) that checks it.  Deal with this
9991          by checking if we're pointing to another pointer, that one
9992          points to another pointer, that one does too, and we have no htab.
9993          If so, get a hash table.  We check three levels deep to avoid
9994          the cost of the hash table if we don't need one.  */
9995       if (POINTER_TYPE_P (TREE_TYPE (type))
9996           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
9997           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
9998           && !pset)
9999         {
10000           result = walk_tree_without_duplicates (&TREE_TYPE (type),
10001                                                  func, data);
10002           if (result)
10003             return result;
10004
10005           break;
10006         }
10007
10008       /* ... fall through ... */
10009
10010     case COMPLEX_TYPE:
10011       WALK_SUBTREE (TREE_TYPE (type));
10012       break;
10013
10014     case METHOD_TYPE:
10015       WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
10016
10017       /* Fall through.  */
10018
10019     case FUNCTION_TYPE:
10020       WALK_SUBTREE (TREE_TYPE (type));
10021       {
10022         tree arg;
10023
10024         /* We never want to walk into default arguments.  */
10025         for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
10026           WALK_SUBTREE (TREE_VALUE (arg));
10027       }
10028       break;
10029
10030     case ARRAY_TYPE:
10031       /* Don't follow this nodes's type if a pointer for fear that
10032          we'll have infinite recursion.  If we have a PSET, then we
10033          need not fear.  */
10034       if (pset
10035           || (!POINTER_TYPE_P (TREE_TYPE (type))
10036               && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
10037         WALK_SUBTREE (TREE_TYPE (type));
10038       WALK_SUBTREE (TYPE_DOMAIN (type));
10039       break;
10040
10041     case OFFSET_TYPE:
10042       WALK_SUBTREE (TREE_TYPE (type));
10043       WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
10044       break;
10045
10046     default:
10047       break;
10048     }
10049
10050   return NULL_TREE;
10051 }
10052
10053 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal.  FUNC is
10054    called with the DATA and the address of each sub-tree.  If FUNC returns a
10055    non-NULL value, the traversal is stopped, and the value returned by FUNC
10056    is returned.  If PSET is non-NULL it is used to record the nodes visited,
10057    and to avoid visiting a node more than once.  */
10058
10059 tree
10060 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
10061              struct pointer_set_t *pset, walk_tree_lh lh)
10062 {
10063   enum tree_code code;
10064   int walk_subtrees;
10065   tree result;
10066
10067 #define WALK_SUBTREE_TAIL(NODE)                         \
10068   do                                                    \
10069     {                                                   \
10070        tp = & (NODE);                                   \
10071        goto tail_recurse;                               \
10072     }                                                   \
10073   while (0)
10074
10075  tail_recurse:
10076   /* Skip empty subtrees.  */
10077   if (!*tp)
10078     return NULL_TREE;
10079
10080   /* Don't walk the same tree twice, if the user has requested
10081      that we avoid doing so.  */
10082   if (pset && pointer_set_insert (pset, *tp))
10083     return NULL_TREE;
10084
10085   /* Call the function.  */
10086   walk_subtrees = 1;
10087   result = (*func) (tp, &walk_subtrees, data);
10088
10089   /* If we found something, return it.  */
10090   if (result)
10091     return result;
10092
10093   code = TREE_CODE (*tp);
10094
10095   /* Even if we didn't, FUNC may have decided that there was nothing
10096      interesting below this point in the tree.  */
10097   if (!walk_subtrees)
10098     {
10099       /* But we still need to check our siblings.  */
10100       if (code == TREE_LIST)
10101         WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
10102       else if (code == OMP_CLAUSE)
10103         WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
10104       else
10105         return NULL_TREE;
10106     }
10107
10108   if (lh)
10109     {
10110       result = (*lh) (tp, &walk_subtrees, func, data, pset);
10111       if (result || !walk_subtrees)
10112         return result;
10113     }
10114
10115   switch (code)
10116     {
10117     case ERROR_MARK:
10118     case IDENTIFIER_NODE:
10119     case INTEGER_CST:
10120     case REAL_CST:
10121     case FIXED_CST:
10122     case VECTOR_CST:
10123     case STRING_CST:
10124     case BLOCK:
10125     case PLACEHOLDER_EXPR:
10126     case SSA_NAME:
10127     case FIELD_DECL:
10128     case RESULT_DECL:
10129       /* None of these have subtrees other than those already walked
10130          above.  */
10131       break;
10132
10133     case TREE_LIST:
10134       WALK_SUBTREE (TREE_VALUE (*tp));
10135       WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
10136       break;
10137
10138     case TREE_VEC:
10139       {
10140         int len = TREE_VEC_LENGTH (*tp);
10141
10142         if (len == 0)
10143           break;
10144
10145         /* Walk all elements but the first.  */
10146         while (--len)
10147           WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
10148
10149         /* Now walk the first one as a tail call.  */
10150         WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
10151       }
10152
10153     case COMPLEX_CST:
10154       WALK_SUBTREE (TREE_REALPART (*tp));
10155       WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
10156
10157     case CONSTRUCTOR:
10158       {
10159         unsigned HOST_WIDE_INT idx;
10160         constructor_elt *ce;
10161
10162         for (idx = 0;
10163              VEC_iterate(constructor_elt, CONSTRUCTOR_ELTS (*tp), idx, ce);
10164              idx++)
10165           WALK_SUBTREE (ce->value);
10166       }
10167       break;
10168
10169     case SAVE_EXPR:
10170       WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
10171
10172     case BIND_EXPR:
10173       {
10174         tree decl;
10175         for (decl = BIND_EXPR_VARS (*tp); decl; decl = TREE_CHAIN (decl))
10176           {
10177             /* Walk the DECL_INITIAL and DECL_SIZE.  We don't want to walk
10178                into declarations that are just mentioned, rather than
10179                declared; they don't really belong to this part of the tree.
10180                And, we can see cycles: the initializer for a declaration
10181                can refer to the declaration itself.  */
10182             WALK_SUBTREE (DECL_INITIAL (decl));
10183             WALK_SUBTREE (DECL_SIZE (decl));
10184             WALK_SUBTREE (DECL_SIZE_UNIT (decl));
10185           }
10186         WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
10187       }
10188
10189     case STATEMENT_LIST:
10190       {
10191         tree_stmt_iterator i;
10192         for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
10193           WALK_SUBTREE (*tsi_stmt_ptr (i));
10194       }
10195       break;
10196
10197     case OMP_CLAUSE:
10198       switch (OMP_CLAUSE_CODE (*tp))
10199         {
10200         case OMP_CLAUSE_PRIVATE:
10201         case OMP_CLAUSE_SHARED:
10202         case OMP_CLAUSE_FIRSTPRIVATE:
10203         case OMP_CLAUSE_COPYIN:
10204         case OMP_CLAUSE_COPYPRIVATE:
10205         case OMP_CLAUSE_IF:
10206         case OMP_CLAUSE_NUM_THREADS:
10207         case OMP_CLAUSE_SCHEDULE:
10208           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
10209           /* FALLTHRU */
10210
10211         case OMP_CLAUSE_NOWAIT:
10212         case OMP_CLAUSE_ORDERED:
10213         case OMP_CLAUSE_DEFAULT:
10214         case OMP_CLAUSE_UNTIED:
10215           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
10216
10217         case OMP_CLAUSE_LASTPRIVATE:
10218           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
10219           WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
10220           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
10221
10222         case OMP_CLAUSE_COLLAPSE:
10223           {
10224             int i;
10225             for (i = 0; i < 3; i++)
10226               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
10227             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
10228           }
10229
10230         case OMP_CLAUSE_REDUCTION:
10231           {
10232             int i;
10233             for (i = 0; i < 4; i++)
10234               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
10235             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
10236           }
10237
10238         default:
10239           gcc_unreachable ();
10240         }
10241       break;
10242
10243     case TARGET_EXPR:
10244       {
10245         int i, len;
10246
10247         /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
10248            But, we only want to walk once.  */
10249         len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
10250         for (i = 0; i < len; ++i)
10251           WALK_SUBTREE (TREE_OPERAND (*tp, i));
10252         WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
10253       }
10254
10255     case DECL_EXPR:
10256       /* If this is a TYPE_DECL, walk into the fields of the type that it's
10257          defining.  We only want to walk into these fields of a type in this
10258          case and not in the general case of a mere reference to the type.
10259
10260          The criterion is as follows: if the field can be an expression, it
10261          must be walked only here.  This should be in keeping with the fields
10262          that are directly gimplified in gimplify_type_sizes in order for the
10263          mark/copy-if-shared/unmark machinery of the gimplifier to work with
10264          variable-sized types.
10265
10266          Note that DECLs get walked as part of processing the BIND_EXPR.  */
10267       if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
10268         {
10269           tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
10270           if (TREE_CODE (*type_p) == ERROR_MARK)
10271             return NULL_TREE;
10272
10273           /* Call the function for the type.  See if it returns anything or
10274              doesn't want us to continue.  If we are to continue, walk both
10275              the normal fields and those for the declaration case.  */
10276           result = (*func) (type_p, &walk_subtrees, data);
10277           if (result || !walk_subtrees)
10278             return result;
10279
10280           result = walk_type_fields (*type_p, func, data, pset, lh);
10281           if (result)
10282             return result;
10283
10284           /* If this is a record type, also walk the fields.  */
10285           if (RECORD_OR_UNION_TYPE_P (*type_p))
10286             {
10287               tree field;
10288
10289               for (field = TYPE_FIELDS (*type_p); field;
10290                    field = TREE_CHAIN (field))
10291                 {
10292                   /* We'd like to look at the type of the field, but we can
10293                      easily get infinite recursion.  So assume it's pointed
10294                      to elsewhere in the tree.  Also, ignore things that
10295                      aren't fields.  */
10296                   if (TREE_CODE (field) != FIELD_DECL)
10297                     continue;
10298
10299                   WALK_SUBTREE (DECL_FIELD_OFFSET (field));
10300                   WALK_SUBTREE (DECL_SIZE (field));
10301                   WALK_SUBTREE (DECL_SIZE_UNIT (field));
10302                   if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
10303                     WALK_SUBTREE (DECL_QUALIFIER (field));
10304                 }
10305             }
10306
10307           /* Same for scalar types.  */
10308           else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
10309                    || TREE_CODE (*type_p) == ENUMERAL_TYPE
10310                    || TREE_CODE (*type_p) == INTEGER_TYPE
10311                    || TREE_CODE (*type_p) == FIXED_POINT_TYPE
10312                    || TREE_CODE (*type_p) == REAL_TYPE)
10313             {
10314               WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
10315               WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
10316             }
10317
10318           WALK_SUBTREE (TYPE_SIZE (*type_p));
10319           WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
10320         }
10321       /* FALLTHRU */
10322
10323     default:
10324       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
10325         {
10326           int i, len;
10327
10328           /* Walk over all the sub-trees of this operand.  */
10329           len = TREE_OPERAND_LENGTH (*tp);
10330
10331           /* Go through the subtrees.  We need to do this in forward order so
10332              that the scope of a FOR_EXPR is handled properly.  */
10333           if (len)
10334             {
10335               for (i = 0; i < len - 1; ++i)
10336                 WALK_SUBTREE (TREE_OPERAND (*tp, i));
10337               WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
10338             }
10339         }
10340       /* If this is a type, walk the needed fields in the type.  */
10341       else if (TYPE_P (*tp))
10342         return walk_type_fields (*tp, func, data, pset, lh);
10343       break;
10344     }
10345
10346   /* We didn't find what we were looking for.  */
10347   return NULL_TREE;
10348
10349 #undef WALK_SUBTREE_TAIL
10350 }
10351 #undef WALK_SUBTREE
10352
10353 /* Like walk_tree, but does not walk duplicate nodes more than once.  */
10354
10355 tree
10356 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
10357                                 walk_tree_lh lh)
10358 {
10359   tree result;
10360   struct pointer_set_t *pset;
10361
10362   pset = pointer_set_create ();
10363   result = walk_tree_1 (tp, func, data, pset, lh);
10364   pointer_set_destroy (pset);
10365   return result;
10366 }
10367
10368
10369 tree *
10370 tree_block (tree t)
10371 {
10372   char const c = TREE_CODE_CLASS (TREE_CODE (t));
10373
10374   if (IS_EXPR_CODE_CLASS (c))
10375     return &t->exp.block;
10376   gcc_unreachable ();
10377   return NULL;
10378 }
10379
10380 /* Create a nameless artificial label and put it in the current
10381    function context.  The label has a location of LOC.  Returns the
10382    newly created label.  */
10383
10384 tree
10385 create_artificial_label (location_t loc)
10386 {
10387   tree lab = build_decl (loc,
10388                          LABEL_DECL, NULL_TREE, void_type_node);
10389
10390   DECL_ARTIFICIAL (lab) = 1;
10391   DECL_IGNORED_P (lab) = 1;
10392   DECL_CONTEXT (lab) = current_function_decl;
10393   return lab;
10394 }
10395
10396 /*  Given a tree, try to return a useful variable name that we can use
10397     to prefix a temporary that is being assigned the value of the tree.
10398     I.E. given  <temp> = &A, return A.  */
10399
10400 const char *
10401 get_name (tree t)
10402 {
10403   tree stripped_decl;
10404
10405   stripped_decl = t;
10406   STRIP_NOPS (stripped_decl);
10407   if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
10408     return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
10409   else
10410     {
10411       switch (TREE_CODE (stripped_decl))
10412         {
10413         case ADDR_EXPR:
10414           return get_name (TREE_OPERAND (stripped_decl, 0));
10415         default:
10416           return NULL;
10417         }
10418     }
10419 }
10420
10421 /* Return true if TYPE has a variable argument list.  */
10422
10423 bool
10424 stdarg_p (tree fntype)
10425 {
10426   function_args_iterator args_iter;
10427   tree n = NULL_TREE, t;
10428
10429   if (!fntype)
10430     return false;
10431
10432   FOREACH_FUNCTION_ARGS(fntype, t, args_iter)
10433     {
10434       n = t;
10435     }
10436
10437   return n != NULL_TREE && n != void_type_node;
10438 }
10439
10440 /* Return true if TYPE has a prototype.  */
10441
10442 bool
10443 prototype_p (tree fntype)
10444 {
10445   tree t;
10446
10447   gcc_assert (fntype != NULL_TREE);
10448
10449   t = TYPE_ARG_TYPES (fntype);
10450   return (t != NULL_TREE);
10451 }
10452
10453 /* If BLOCK is inlined from an __attribute__((__artificial__))
10454    routine, return pointer to location from where it has been
10455    called.  */
10456 location_t *
10457 block_nonartificial_location (tree block)
10458 {
10459   location_t *ret = NULL;
10460
10461   while (block && TREE_CODE (block) == BLOCK
10462          && BLOCK_ABSTRACT_ORIGIN (block))
10463     {
10464       tree ao = BLOCK_ABSTRACT_ORIGIN (block);
10465
10466       while (TREE_CODE (ao) == BLOCK
10467              && BLOCK_ABSTRACT_ORIGIN (ao)
10468              && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
10469         ao = BLOCK_ABSTRACT_ORIGIN (ao);
10470
10471       if (TREE_CODE (ao) == FUNCTION_DECL)
10472         {
10473           /* If AO is an artificial inline, point RET to the
10474              call site locus at which it has been inlined and continue
10475              the loop, in case AO's caller is also an artificial
10476              inline.  */
10477           if (DECL_DECLARED_INLINE_P (ao)
10478               && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
10479             ret = &BLOCK_SOURCE_LOCATION (block);
10480           else
10481             break;
10482         }
10483       else if (TREE_CODE (ao) != BLOCK)
10484         break;
10485
10486       block = BLOCK_SUPERCONTEXT (block);
10487     }
10488   return ret;
10489 }
10490
10491
10492 /* If EXP is inlined from an __attribute__((__artificial__))
10493    function, return the location of the original call expression.  */
10494
10495 location_t
10496 tree_nonartificial_location (tree exp)
10497 {
10498   location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
10499
10500   if (loc)
10501     return *loc;
10502   else
10503     return EXPR_LOCATION (exp);
10504 }
10505
10506
10507 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
10508    nodes.  */
10509
10510 /* Return the hash code code X, an OPTIMIZATION_NODE or TARGET_OPTION code.  */
10511
10512 static hashval_t
10513 cl_option_hash_hash (const void *x)
10514 {
10515   const_tree const t = (const_tree) x;
10516   const char *p;
10517   size_t i;
10518   size_t len = 0;
10519   hashval_t hash = 0;
10520
10521   if (TREE_CODE (t) == OPTIMIZATION_NODE)
10522     {
10523       p = (const char *)TREE_OPTIMIZATION (t);
10524       len = sizeof (struct cl_optimization);
10525     }
10526
10527   else if (TREE_CODE (t) == TARGET_OPTION_NODE)
10528     {
10529       p = (const char *)TREE_TARGET_OPTION (t);
10530       len = sizeof (struct cl_target_option);
10531     }
10532
10533   else
10534     gcc_unreachable ();
10535
10536   /* assume most opt flags are just 0/1, some are 2-3, and a few might be
10537      something else.  */
10538   for (i = 0; i < len; i++)
10539     if (p[i])
10540       hash = (hash << 4) ^ ((i << 2) | p[i]);
10541
10542   return hash;
10543 }
10544
10545 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
10546    TARGET_OPTION tree node) is the same as that given by *Y, which is the
10547    same.  */
10548
10549 static int
10550 cl_option_hash_eq (const void *x, const void *y)
10551 {
10552   const_tree const xt = (const_tree) x;
10553   const_tree const yt = (const_tree) y;
10554   const char *xp;
10555   const char *yp;
10556   size_t len;
10557
10558   if (TREE_CODE (xt) != TREE_CODE (yt))
10559     return 0;
10560
10561   if (TREE_CODE (xt) == OPTIMIZATION_NODE)
10562     {
10563       xp = (const char *)TREE_OPTIMIZATION (xt);
10564       yp = (const char *)TREE_OPTIMIZATION (yt);
10565       len = sizeof (struct cl_optimization);
10566     }
10567
10568   else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
10569     {
10570       xp = (const char *)TREE_TARGET_OPTION (xt);
10571       yp = (const char *)TREE_TARGET_OPTION (yt);
10572       len = sizeof (struct cl_target_option);
10573     }
10574
10575   else
10576     gcc_unreachable ();
10577
10578   return (memcmp (xp, yp, len) == 0);
10579 }
10580
10581 /* Build an OPTIMIZATION_NODE based on the current options.  */
10582
10583 tree
10584 build_optimization_node (void)
10585 {
10586   tree t;
10587   void **slot;
10588
10589   /* Use the cache of optimization nodes.  */
10590
10591   cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node));
10592
10593   slot = htab_find_slot (cl_option_hash_table, cl_optimization_node, INSERT);
10594   t = (tree) *slot;
10595   if (!t)
10596     {
10597       /* Insert this one into the hash table.  */
10598       t = cl_optimization_node;
10599       *slot = t;
10600
10601       /* Make a new node for next time round.  */
10602       cl_optimization_node = make_node (OPTIMIZATION_NODE);
10603     }
10604
10605   return t;
10606 }
10607
10608 /* Build a TARGET_OPTION_NODE based on the current options.  */
10609
10610 tree
10611 build_target_option_node (void)
10612 {
10613   tree t;
10614   void **slot;
10615
10616   /* Use the cache of optimization nodes.  */
10617
10618   cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node));
10619
10620   slot = htab_find_slot (cl_option_hash_table, cl_target_option_node, INSERT);
10621   t = (tree) *slot;
10622   if (!t)
10623     {
10624       /* Insert this one into the hash table.  */
10625       t = cl_target_option_node;
10626       *slot = t;
10627
10628       /* Make a new node for next time round.  */
10629       cl_target_option_node = make_node (TARGET_OPTION_NODE);
10630     }
10631
10632   return t;
10633 }
10634
10635 /* Determine the "ultimate origin" of a block.  The block may be an inlined
10636    instance of an inlined instance of a block which is local to an inline
10637    function, so we have to trace all of the way back through the origin chain
10638    to find out what sort of node actually served as the original seed for the
10639    given block.  */
10640
10641 tree
10642 block_ultimate_origin (const_tree block)
10643 {
10644   tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
10645
10646   /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
10647      nodes in the function to point to themselves; ignore that if
10648      we're trying to output the abstract instance of this function.  */
10649   if (BLOCK_ABSTRACT (block) && immediate_origin == block)
10650     return NULL_TREE;
10651
10652   if (immediate_origin == NULL_TREE)
10653     return NULL_TREE;
10654   else
10655     {
10656       tree ret_val;
10657       tree lookahead = immediate_origin;
10658
10659       do
10660         {
10661           ret_val = lookahead;
10662           lookahead = (TREE_CODE (ret_val) == BLOCK
10663                        ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
10664         }
10665       while (lookahead != NULL && lookahead != ret_val);
10666
10667       /* The block's abstract origin chain may not be the *ultimate* origin of
10668          the block. It could lead to a DECL that has an abstract origin set.
10669          If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
10670          will give us if it has one).  Note that DECL's abstract origins are
10671          supposed to be the most distant ancestor (or so decl_ultimate_origin
10672          claims), so we don't need to loop following the DECL origins.  */
10673       if (DECL_P (ret_val))
10674         return DECL_ORIGIN (ret_val);
10675
10676       return ret_val;
10677     }
10678 }
10679
10680 /* Return true if T1 and T2 are equivalent lists.  */
10681
10682 bool
10683 list_equal_p (const_tree t1, const_tree t2)
10684 {
10685   for (; t1 && t2; t1 = TREE_CHAIN (t1) , t2 = TREE_CHAIN (t2))
10686     if (TREE_VALUE (t1) != TREE_VALUE (t2))
10687       return false;
10688   return !t1 && !t2;
10689 }
10690
10691 /* Return true iff conversion in EXP generates no instruction.  Mark
10692    it inline so that we fully inline into the stripping functions even
10693    though we have two uses of this function.  */
10694
10695 static inline bool
10696 tree_nop_conversion (const_tree exp)
10697 {
10698   tree outer_type, inner_type;
10699
10700   if (!CONVERT_EXPR_P (exp)
10701       && TREE_CODE (exp) != NON_LVALUE_EXPR)
10702     return false;
10703   if (TREE_OPERAND (exp, 0) == error_mark_node)
10704     return false;
10705
10706   outer_type = TREE_TYPE (exp);
10707   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
10708
10709   if (!inner_type)
10710     return false;
10711
10712   /* Use precision rather then machine mode when we can, which gives
10713      the correct answer even for submode (bit-field) types.  */
10714   if ((INTEGRAL_TYPE_P (outer_type)
10715        || POINTER_TYPE_P (outer_type)
10716        || TREE_CODE (outer_type) == OFFSET_TYPE)
10717       && (INTEGRAL_TYPE_P (inner_type)
10718           || POINTER_TYPE_P (inner_type)
10719           || TREE_CODE (inner_type) == OFFSET_TYPE))
10720     return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
10721
10722   /* Otherwise fall back on comparing machine modes (e.g. for
10723      aggregate types, floats).  */
10724   return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
10725 }
10726
10727 /* Return true iff conversion in EXP generates no instruction.  Don't
10728    consider conversions changing the signedness.  */
10729
10730 static bool
10731 tree_sign_nop_conversion (const_tree exp)
10732 {
10733   tree outer_type, inner_type;
10734
10735   if (!tree_nop_conversion (exp))
10736     return false;
10737
10738   outer_type = TREE_TYPE (exp);
10739   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
10740
10741   return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
10742           && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
10743 }
10744
10745 /* Strip conversions from EXP according to tree_nop_conversion and
10746    return the resulting expression.  */
10747
10748 tree
10749 tree_strip_nop_conversions (tree exp)
10750 {
10751   while (tree_nop_conversion (exp))
10752     exp = TREE_OPERAND (exp, 0);
10753   return exp;
10754 }
10755
10756 /* Strip conversions from EXP according to tree_sign_nop_conversion
10757    and return the resulting expression.  */
10758
10759 tree
10760 tree_strip_sign_nop_conversions (tree exp)
10761 {
10762   while (tree_sign_nop_conversion (exp))
10763     exp = TREE_OPERAND (exp, 0);
10764   return exp;
10765 }
10766
10767 static GTY(()) tree gcc_eh_personality_decl;
10768
10769 /* Return the GCC personality function decl.  */
10770
10771 tree
10772 lhd_gcc_personality (void)
10773 {
10774   if (!gcc_eh_personality_decl)
10775     gcc_eh_personality_decl
10776       = build_personality_function (USING_SJLJ_EXCEPTIONS
10777                                     ? "__gcc_personality_sj0"
10778                                     : "__gcc_personality_v0");
10779
10780   return gcc_eh_personality_decl;
10781 }
10782
10783 /* Try to find a base info of BINFO that would have its field decl at offset
10784    OFFSET within the BINFO type and which is of EXPECTED_TYPE.  If it can be
10785    found, return, otherwise return NULL_TREE.  */
10786
10787 tree
10788 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
10789 {
10790   tree type;
10791
10792   if (offset == 0)
10793     return binfo;
10794
10795   type = TREE_TYPE (binfo);
10796   while (offset > 0)
10797     {
10798       tree base_binfo, found_binfo;
10799       HOST_WIDE_INT pos, size;
10800       tree fld;
10801       int i;
10802
10803       if (TREE_CODE (type) != RECORD_TYPE)
10804         return NULL_TREE;
10805
10806       for (fld = TYPE_FIELDS (type); fld; fld = TREE_CHAIN (fld))
10807         {
10808           if (TREE_CODE (fld) != FIELD_DECL)
10809             continue;
10810
10811           pos = int_bit_position (fld);
10812           size = tree_low_cst (DECL_SIZE (fld), 1);
10813           if (pos <= offset && (pos + size) > offset)
10814             break;
10815         }
10816       if (!fld)
10817         return NULL_TREE;
10818
10819       found_binfo = NULL_TREE;
10820       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10821         if (TREE_TYPE (base_binfo) == TREE_TYPE (fld))
10822           {
10823             found_binfo = base_binfo;
10824             break;
10825           }
10826
10827       if (!found_binfo)
10828         return NULL_TREE;
10829
10830       type = TREE_TYPE (fld);
10831       binfo = found_binfo;
10832       offset -= pos;
10833     }
10834   if (type != expected_type)
10835     return NULL_TREE;
10836   return binfo;
10837 }
10838
10839 #include "gt-tree.h"