OSDN Git Service

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