OSDN Git Service

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