OSDN Git Service

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