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