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