OSDN Git Service

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