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