OSDN Git Service

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