Collections.java (UnmodifiableMap.toArray): Imported changes from Classpath.
[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
4 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 2, 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 COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA. */
22
23 /* This file contains the low level primitives for operating on tree nodes,
24 including allocation, list operations, interning of identifiers,
25 construction of data type nodes and statement nodes,
26 and construction of type conversion nodes. It also contains
27 tables index by tree code that describe how to take apart
28 nodes of that code.
29
30 It is intended to be language-independent, but occasionally
31 calls language-dependent routines defined (for C) in typecheck.c. */
32
33 #include "config.h"
34 #include "system.h"
35 #include "coretypes.h"
36 #include "tm.h"
37 #include "flags.h"
38 #include "tree.h"
39 #include "real.h"
40 #include "tm_p.h"
41 #include "function.h"
42 #include "obstack.h"
43 #include "toplev.h"
44 #include "ggc.h"
45 #include "hashtab.h"
46 #include "output.h"
47 #include "target.h"
48 #include "langhooks.h"
49 #include "tree-iterator.h"
50 #include "basic-block.h"
51 #include "tree-flow.h"
52 #include "params.h"
53 #include "pointer-set.h"
54
55 /* Each tree code class has an associated string representation.
56 These must correspond to the tree_code_class entries. */
57
58 const char *const tree_code_class_strings[] =
59 {
60 "exceptional",
61 "constant",
62 "type",
63 "declaration",
64 "reference",
65 "comparison",
66 "unary",
67 "binary",
68 "statement",
69 "expression",
70 };
71
72 /* obstack.[ch] explicitly declined to prototype this. */
73 extern int _obstack_allocated_p (struct obstack *h, void *obj);
74
75 #ifdef GATHER_STATISTICS
76 /* Statistics-gathering stuff. */
77
78 int tree_node_counts[(int) all_kinds];
79 int tree_node_sizes[(int) all_kinds];
80
81 /* Keep in sync with tree.h:enum tree_node_kind. */
82 static const char * const tree_node_kind_names[] = {
83 "decls",
84 "types",
85 "blocks",
86 "stmts",
87 "refs",
88 "exprs",
89 "constants",
90 "identifiers",
91 "perm_tree_lists",
92 "temp_tree_lists",
93 "vecs",
94 "binfos",
95 "phi_nodes",
96 "ssa names",
97 "constructors",
98 "random kinds",
99 "lang_decl kinds",
100 "lang_type kinds",
101 "omp clauses",
102 "gimple statements"
103 };
104 #endif /* GATHER_STATISTICS */
105
106 /* Unique id for next decl created. */
107 static GTY(()) int next_decl_uid;
108 /* Unique id for next type created. */
109 static GTY(()) int next_type_uid = 1;
110
111 /* Since we cannot rehash a type after it is in the table, we have to
112 keep the hash code. */
113
114 struct type_hash GTY(())
115 {
116 unsigned long hash;
117 tree type;
118 };
119
120 /* Initial size of the hash table (rounded to next prime). */
121 #define TYPE_HASH_INITIAL_SIZE 1000
122
123 /* Now here is the hash table. When recording a type, it is added to
124 the slot whose index is the hash code. Note that the hash table is
125 used for several kinds of types (function types, array types and
126 array index range types, for now). While all these live in the
127 same table, they are completely independent, and the hash code is
128 computed differently for each of these. */
129
130 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
131 htab_t type_hash_table;
132
133 /* Hash table and temporary node for larger integer const values. */
134 static GTY (()) tree int_cst_node;
135 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
136 htab_t int_cst_hash_table;
137
138 /* General tree->tree mapping structure for use in hash tables. */
139
140
141 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
142 htab_t debug_expr_for_decl;
143
144 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
145 htab_t value_expr_for_decl;
146
147 static GTY ((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
148 htab_t init_priority_for_decl;
149
150 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
151 htab_t restrict_base_for_decl;
152
153 static void set_type_quals (tree, int);
154 static int type_hash_eq (const void *, const void *);
155 static hashval_t type_hash_hash (const void *);
156 static hashval_t int_cst_hash_hash (const void *);
157 static int int_cst_hash_eq (const void *, const void *);
158 static void print_type_hash_statistics (void);
159 static void print_debug_expr_statistics (void);
160 static void print_value_expr_statistics (void);
161 static int type_hash_marked_p (const void *);
162 static unsigned int type_hash_list (tree, hashval_t);
163 static unsigned int attribute_hash_list (tree, hashval_t);
164
165 tree global_trees[TI_MAX];
166 tree integer_types[itk_none];
167
168 unsigned char tree_contains_struct[256][64];
169
170 /* Number of operands for each OpenMP clause. */
171 unsigned const char omp_clause_num_ops[] =
172 {
173 0, /* OMP_CLAUSE_ERROR */
174 1, /* OMP_CLAUSE_PRIVATE */
175 1, /* OMP_CLAUSE_SHARED */
176 1, /* OMP_CLAUSE_FIRSTPRIVATE */
177 1, /* OMP_CLAUSE_LASTPRIVATE */
178 4, /* OMP_CLAUSE_REDUCTION */
179 1, /* OMP_CLAUSE_COPYIN */
180 1, /* OMP_CLAUSE_COPYPRIVATE */
181 1, /* OMP_CLAUSE_IF */
182 1, /* OMP_CLAUSE_NUM_THREADS */
183 1, /* OMP_CLAUSE_SCHEDULE */
184 0, /* OMP_CLAUSE_NOWAIT */
185 0, /* OMP_CLAUSE_ORDERED */
186 0 /* OMP_CLAUSE_DEFAULT */
187 };
188
189 const char * const omp_clause_code_name[] =
190 {
191 "error_clause",
192 "private",
193 "shared",
194 "firstprivate",
195 "lastprivate",
196 "reduction",
197 "copyin",
198 "copyprivate",
199 "if",
200 "num_threads",
201 "schedule",
202 "nowait",
203 "ordered",
204 "default"
205 };
206 \f
207 /* Init tree.c. */
208
209 void
210 init_ttree (void)
211 {
212 /* Initialize the hash table of types. */
213 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
214 type_hash_eq, 0);
215
216 debug_expr_for_decl = htab_create_ggc (512, tree_map_hash,
217 tree_map_eq, 0);
218
219 value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
220 tree_map_eq, 0);
221 init_priority_for_decl = htab_create_ggc (512, tree_int_map_hash,
222 tree_int_map_eq, 0);
223 restrict_base_for_decl = htab_create_ggc (256, tree_map_hash,
224 tree_map_eq, 0);
225
226 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
227 int_cst_hash_eq, NULL);
228
229 int_cst_node = make_node (INTEGER_CST);
230
231 tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON] = 1;
232 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_NON_COMMON] = 1;
233 tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON] = 1;
234
235
236 tree_contains_struct[CONST_DECL][TS_DECL_COMMON] = 1;
237 tree_contains_struct[VAR_DECL][TS_DECL_COMMON] = 1;
238 tree_contains_struct[PARM_DECL][TS_DECL_COMMON] = 1;
239 tree_contains_struct[RESULT_DECL][TS_DECL_COMMON] = 1;
240 tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON] = 1;
241 tree_contains_struct[TYPE_DECL][TS_DECL_COMMON] = 1;
242 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON] = 1;
243 tree_contains_struct[LABEL_DECL][TS_DECL_COMMON] = 1;
244 tree_contains_struct[FIELD_DECL][TS_DECL_COMMON] = 1;
245
246
247 tree_contains_struct[CONST_DECL][TS_DECL_WRTL] = 1;
248 tree_contains_struct[VAR_DECL][TS_DECL_WRTL] = 1;
249 tree_contains_struct[PARM_DECL][TS_DECL_WRTL] = 1;
250 tree_contains_struct[RESULT_DECL][TS_DECL_WRTL] = 1;
251 tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL] = 1;
252 tree_contains_struct[LABEL_DECL][TS_DECL_WRTL] = 1;
253
254 tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL] = 1;
255 tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL] = 1;
256 tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL] = 1;
257 tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL] = 1;
258 tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL] = 1;
259 tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL] = 1;
260 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL] = 1;
261 tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL] = 1;
262 tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL] = 1;
263 tree_contains_struct[STRUCT_FIELD_TAG][TS_DECL_MINIMAL] = 1;
264 tree_contains_struct[NAME_MEMORY_TAG][TS_DECL_MINIMAL] = 1;
265 tree_contains_struct[SYMBOL_MEMORY_TAG][TS_DECL_MINIMAL] = 1;
266 tree_contains_struct[MEMORY_PARTITION_TAG][TS_DECL_MINIMAL] = 1;
267
268 tree_contains_struct[STRUCT_FIELD_TAG][TS_MEMORY_TAG] = 1;
269 tree_contains_struct[NAME_MEMORY_TAG][TS_MEMORY_TAG] = 1;
270 tree_contains_struct[SYMBOL_MEMORY_TAG][TS_MEMORY_TAG] = 1;
271 tree_contains_struct[MEMORY_PARTITION_TAG][TS_MEMORY_TAG] = 1;
272
273 tree_contains_struct[STRUCT_FIELD_TAG][TS_STRUCT_FIELD_TAG] = 1;
274 tree_contains_struct[MEMORY_PARTITION_TAG][TS_MEMORY_PARTITION_TAG] = 1;
275
276 tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS] = 1;
277 tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS] = 1;
278 tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS] = 1;
279 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_WITH_VIS] = 1;
280
281 tree_contains_struct[VAR_DECL][TS_VAR_DECL] = 1;
282 tree_contains_struct[FIELD_DECL][TS_FIELD_DECL] = 1;
283 tree_contains_struct[PARM_DECL][TS_PARM_DECL] = 1;
284 tree_contains_struct[LABEL_DECL][TS_LABEL_DECL] = 1;
285 tree_contains_struct[RESULT_DECL][TS_RESULT_DECL] = 1;
286 tree_contains_struct[CONST_DECL][TS_CONST_DECL] = 1;
287 tree_contains_struct[TYPE_DECL][TS_TYPE_DECL] = 1;
288 tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL] = 1;
289
290 lang_hooks.init_ts ();
291 }
292
293 \f
294 /* The name of the object as the assembler will see it (but before any
295 translations made by ASM_OUTPUT_LABELREF). Often this is the same
296 as DECL_NAME. It is an IDENTIFIER_NODE. */
297 tree
298 decl_assembler_name (tree decl)
299 {
300 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
301 lang_hooks.set_decl_assembler_name (decl);
302 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
303 }
304
305 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL. */
306
307 bool
308 decl_assembler_name_equal (tree decl, tree asmname)
309 {
310 tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
311
312 if (decl_asmname == asmname)
313 return true;
314
315 /* If the target assembler name was set by the user, things are trickier.
316 We have a leading '*' to begin with. After that, it's arguable what
317 is the correct thing to do with -fleading-underscore. Arguably, we've
318 historically been doing the wrong thing in assemble_alias by always
319 printing the leading underscore. Since we're not changing that, make
320 sure user_label_prefix follows the '*' before matching. */
321 if (IDENTIFIER_POINTER (decl_asmname)[0] == '*')
322 {
323 const char *decl_str = IDENTIFIER_POINTER (decl_asmname) + 1;
324 size_t ulp_len = strlen (user_label_prefix);
325
326 if (ulp_len == 0)
327 ;
328 else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
329 decl_str += ulp_len;
330 else
331 return false;
332
333 return strcmp (decl_str, IDENTIFIER_POINTER (asmname)) == 0;
334 }
335
336 return false;
337 }
338
339 /* Compute the number of bytes occupied by a tree with code CODE.
340 This function cannot be used for TREE_VEC, PHI_NODE, or STRING_CST
341 codes, which are of variable length. */
342 size_t
343 tree_code_size (enum tree_code code)
344 {
345 switch (TREE_CODE_CLASS (code))
346 {
347 case tcc_declaration: /* A decl node */
348 {
349 switch (code)
350 {
351 case FIELD_DECL:
352 return sizeof (struct tree_field_decl);
353 case PARM_DECL:
354 return sizeof (struct tree_parm_decl);
355 case VAR_DECL:
356 return sizeof (struct tree_var_decl);
357 case LABEL_DECL:
358 return sizeof (struct tree_label_decl);
359 case RESULT_DECL:
360 return sizeof (struct tree_result_decl);
361 case CONST_DECL:
362 return sizeof (struct tree_const_decl);
363 case TYPE_DECL:
364 return sizeof (struct tree_type_decl);
365 case FUNCTION_DECL:
366 return sizeof (struct tree_function_decl);
367 case NAME_MEMORY_TAG:
368 case SYMBOL_MEMORY_TAG:
369 return sizeof (struct tree_memory_tag);
370 case STRUCT_FIELD_TAG:
371 return sizeof (struct tree_struct_field_tag);
372 case MEMORY_PARTITION_TAG:
373 return sizeof (struct tree_memory_partition_tag);
374 default:
375 return sizeof (struct tree_decl_non_common);
376 }
377 }
378
379 case tcc_type: /* a type node */
380 return sizeof (struct tree_type);
381
382 case tcc_reference: /* a reference */
383 case tcc_expression: /* an expression */
384 case tcc_statement: /* an expression with side effects */
385 case tcc_comparison: /* a comparison expression */
386 case tcc_unary: /* a unary arithmetic expression */
387 case tcc_binary: /* a binary arithmetic expression */
388 return (sizeof (struct tree_exp)
389 + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
390
391 case tcc_gimple_stmt:
392 return (sizeof (struct gimple_stmt)
393 + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
394
395 case tcc_constant: /* a constant */
396 switch (code)
397 {
398 case INTEGER_CST: return sizeof (struct tree_int_cst);
399 case REAL_CST: return sizeof (struct tree_real_cst);
400 case COMPLEX_CST: return sizeof (struct tree_complex);
401 case VECTOR_CST: return sizeof (struct tree_vector);
402 case STRING_CST: gcc_unreachable ();
403 default:
404 return lang_hooks.tree_size (code);
405 }
406
407 case tcc_exceptional: /* something random, like an identifier. */
408 switch (code)
409 {
410 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
411 case TREE_LIST: return sizeof (struct tree_list);
412
413 case ERROR_MARK:
414 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
415
416 case TREE_VEC:
417 case OMP_CLAUSE:
418 case PHI_NODE: gcc_unreachable ();
419
420 case SSA_NAME: return sizeof (struct tree_ssa_name);
421
422 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
423 case BLOCK: return sizeof (struct tree_block);
424 case VALUE_HANDLE: return sizeof (struct tree_value_handle);
425 case CONSTRUCTOR: return sizeof (struct tree_constructor);
426
427 default:
428 return lang_hooks.tree_size (code);
429 }
430
431 default:
432 gcc_unreachable ();
433 }
434 }
435
436 /* Compute the number of bytes occupied by NODE. This routine only
437 looks at TREE_CODE, except for PHI_NODE and TREE_VEC nodes. */
438 size_t
439 tree_size (tree node)
440 {
441 enum tree_code code = TREE_CODE (node);
442 switch (code)
443 {
444 case PHI_NODE:
445 return (sizeof (struct tree_phi_node)
446 + (PHI_ARG_CAPACITY (node) - 1) * sizeof (struct phi_arg_d));
447
448 case TREE_BINFO:
449 return (offsetof (struct tree_binfo, base_binfos)
450 + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
451
452 case TREE_VEC:
453 return (sizeof (struct tree_vec)
454 + (TREE_VEC_LENGTH (node) - 1) * sizeof(char *));
455
456 case STRING_CST:
457 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
458
459 case OMP_CLAUSE:
460 return (sizeof (struct tree_omp_clause)
461 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
462 * sizeof (tree));
463
464 default:
465 return tree_code_size (code);
466 }
467 }
468
469 /* Return a newly allocated node of code CODE. For decl and type
470 nodes, some other fields are initialized. The rest of the node is
471 initialized to zero. This function cannot be used for PHI_NODE,
472 TREE_VEC or OMP_CLAUSE nodes, which is enforced by asserts in
473 tree_code_size.
474
475 Achoo! I got a code in the node. */
476
477 tree
478 make_node_stat (enum tree_code code MEM_STAT_DECL)
479 {
480 tree t;
481 enum tree_code_class type = TREE_CODE_CLASS (code);
482 size_t length = tree_code_size (code);
483 #ifdef GATHER_STATISTICS
484 tree_node_kind kind;
485
486 switch (type)
487 {
488 case tcc_declaration: /* A decl node */
489 kind = d_kind;
490 break;
491
492 case tcc_type: /* a type node */
493 kind = t_kind;
494 break;
495
496 case tcc_statement: /* an expression with side effects */
497 kind = s_kind;
498 break;
499
500 case tcc_reference: /* a reference */
501 kind = r_kind;
502 break;
503
504 case tcc_expression: /* an expression */
505 case tcc_comparison: /* a comparison expression */
506 case tcc_unary: /* a unary arithmetic expression */
507 case tcc_binary: /* a binary arithmetic expression */
508 kind = e_kind;
509 break;
510
511 case tcc_constant: /* a constant */
512 kind = c_kind;
513 break;
514
515 case tcc_gimple_stmt:
516 kind = gimple_stmt_kind;
517 break;
518
519 case tcc_exceptional: /* something random, like an identifier. */
520 switch (code)
521 {
522 case IDENTIFIER_NODE:
523 kind = id_kind;
524 break;
525
526 case TREE_VEC:
527 kind = vec_kind;
528 break;
529
530 case TREE_BINFO:
531 kind = binfo_kind;
532 break;
533
534 case PHI_NODE:
535 kind = phi_kind;
536 break;
537
538 case SSA_NAME:
539 kind = ssa_name_kind;
540 break;
541
542 case BLOCK:
543 kind = b_kind;
544 break;
545
546 case CONSTRUCTOR:
547 kind = constr_kind;
548 break;
549
550 default:
551 kind = x_kind;
552 break;
553 }
554 break;
555
556 default:
557 gcc_unreachable ();
558 }
559
560 tree_node_counts[(int) kind]++;
561 tree_node_sizes[(int) kind] += length;
562 #endif
563
564 if (code == IDENTIFIER_NODE)
565 t = ggc_alloc_zone_pass_stat (length, &tree_id_zone);
566 else
567 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
568
569 memset (t, 0, length);
570
571 TREE_SET_CODE (t, code);
572
573 switch (type)
574 {
575 case tcc_statement:
576 TREE_SIDE_EFFECTS (t) = 1;
577 break;
578
579 case tcc_declaration:
580 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
581 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
582 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
583 {
584 if (code != FUNCTION_DECL)
585 DECL_ALIGN (t) = 1;
586 DECL_USER_ALIGN (t) = 0;
587 /* We have not yet computed the alias set for this declaration. */
588 DECL_POINTER_ALIAS_SET (t) = -1;
589 }
590 DECL_SOURCE_LOCATION (t) = input_location;
591 DECL_UID (t) = next_decl_uid++;
592
593 break;
594
595 case tcc_type:
596 TYPE_UID (t) = next_type_uid++;
597 TYPE_ALIGN (t) = BITS_PER_UNIT;
598 TYPE_USER_ALIGN (t) = 0;
599 TYPE_MAIN_VARIANT (t) = t;
600 TYPE_CANONICAL (t) = t;
601
602 /* Default to no attributes for type, but let target change that. */
603 TYPE_ATTRIBUTES (t) = NULL_TREE;
604 targetm.set_default_type_attributes (t);
605
606 /* We have not yet computed the alias set for this type. */
607 TYPE_ALIAS_SET (t) = -1;
608 break;
609
610 case tcc_constant:
611 TREE_CONSTANT (t) = 1;
612 TREE_INVARIANT (t) = 1;
613 break;
614
615 case tcc_expression:
616 switch (code)
617 {
618 case INIT_EXPR:
619 case MODIFY_EXPR:
620 case VA_ARG_EXPR:
621 case PREDECREMENT_EXPR:
622 case PREINCREMENT_EXPR:
623 case POSTDECREMENT_EXPR:
624 case POSTINCREMENT_EXPR:
625 /* All of these have side-effects, no matter what their
626 operands are. */
627 TREE_SIDE_EFFECTS (t) = 1;
628 break;
629
630 default:
631 break;
632 }
633 break;
634
635 case tcc_gimple_stmt:
636 switch (code)
637 {
638 case GIMPLE_MODIFY_STMT:
639 TREE_SIDE_EFFECTS (t) = 1;
640 break;
641
642 default:
643 break;
644 }
645
646 default:
647 /* Other classes need no special treatment. */
648 break;
649 }
650
651 return t;
652 }
653 \f
654 /* Return a new node with the same contents as NODE except that its
655 TREE_CHAIN is zero and it has a fresh uid. */
656
657 tree
658 copy_node_stat (tree node MEM_STAT_DECL)
659 {
660 tree t;
661 enum tree_code code = TREE_CODE (node);
662 size_t length;
663
664 gcc_assert (code != STATEMENT_LIST);
665
666 length = tree_size (node);
667 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
668 memcpy (t, node, length);
669
670 if (!GIMPLE_TUPLE_P (node))
671 TREE_CHAIN (t) = 0;
672 TREE_ASM_WRITTEN (t) = 0;
673 TREE_VISITED (t) = 0;
674 t->base.ann = 0;
675
676 if (TREE_CODE_CLASS (code) == tcc_declaration)
677 {
678 DECL_UID (t) = next_decl_uid++;
679 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
680 && DECL_HAS_VALUE_EXPR_P (node))
681 {
682 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
683 DECL_HAS_VALUE_EXPR_P (t) = 1;
684 }
685 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
686 {
687 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
688 DECL_HAS_INIT_PRIORITY_P (t) = 1;
689 }
690 if (TREE_CODE (node) == VAR_DECL && DECL_BASED_ON_RESTRICT_P (node))
691 {
692 SET_DECL_RESTRICT_BASE (t, DECL_GET_RESTRICT_BASE (node));
693 DECL_BASED_ON_RESTRICT_P (t) = 1;
694 }
695 }
696 else if (TREE_CODE_CLASS (code) == tcc_type)
697 {
698 TYPE_UID (t) = next_type_uid++;
699 /* The following is so that the debug code for
700 the copy is different from the original type.
701 The two statements usually duplicate each other
702 (because they clear fields of the same union),
703 but the optimizer should catch that. */
704 TYPE_SYMTAB_POINTER (t) = 0;
705 TYPE_SYMTAB_ADDRESS (t) = 0;
706
707 /* Do not copy the values cache. */
708 if (TYPE_CACHED_VALUES_P(t))
709 {
710 TYPE_CACHED_VALUES_P (t) = 0;
711 TYPE_CACHED_VALUES (t) = NULL_TREE;
712 }
713 }
714
715 return t;
716 }
717
718 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
719 For example, this can copy a list made of TREE_LIST nodes. */
720
721 tree
722 copy_list (tree list)
723 {
724 tree head;
725 tree prev, next;
726
727 if (list == 0)
728 return 0;
729
730 head = prev = copy_node (list);
731 next = TREE_CHAIN (list);
732 while (next)
733 {
734 TREE_CHAIN (prev) = copy_node (next);
735 prev = TREE_CHAIN (prev);
736 next = TREE_CHAIN (next);
737 }
738 return head;
739 }
740
741 \f
742 /* Create an INT_CST node with a LOW value sign extended. */
743
744 tree
745 build_int_cst (tree type, HOST_WIDE_INT low)
746 {
747 /* Support legacy code. */
748 if (!type)
749 type = integer_type_node;
750
751 return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
752 }
753
754 /* Create an INT_CST node with a LOW value zero extended. */
755
756 tree
757 build_int_cstu (tree type, unsigned HOST_WIDE_INT low)
758 {
759 return build_int_cst_wide (type, low, 0);
760 }
761
762 /* Create an INT_CST node with a LOW value in TYPE. The value is sign extended
763 if it is negative. This function is similar to build_int_cst, but
764 the extra bits outside of the type precision are cleared. Constants
765 with these extra bits may confuse the fold so that it detects overflows
766 even in cases when they do not occur, and in general should be avoided.
767 We cannot however make this a default behavior of build_int_cst without
768 more intrusive changes, since there are parts of gcc that rely on the extra
769 precision of the integer constants. */
770
771 tree
772 build_int_cst_type (tree type, HOST_WIDE_INT low)
773 {
774 unsigned HOST_WIDE_INT low1;
775 HOST_WIDE_INT hi;
776
777 gcc_assert (type);
778
779 fit_double_type (low, low < 0 ? -1 : 0, &low1, &hi, type);
780
781 return build_int_cst_wide (type, low1, hi);
782 }
783
784 /* Create an INT_CST node of TYPE and value HI:LOW. The value is truncated
785 and sign extended according to the value range of TYPE. */
786
787 tree
788 build_int_cst_wide_type (tree type,
789 unsigned HOST_WIDE_INT low, HOST_WIDE_INT high)
790 {
791 fit_double_type (low, high, &low, &high, type);
792 return build_int_cst_wide (type, low, high);
793 }
794
795 /* These are the hash table functions for the hash table of INTEGER_CST
796 nodes of a sizetype. */
797
798 /* Return the hash code code X, an INTEGER_CST. */
799
800 static hashval_t
801 int_cst_hash_hash (const void *x)
802 {
803 tree t = (tree) x;
804
805 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
806 ^ htab_hash_pointer (TREE_TYPE (t)));
807 }
808
809 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
810 is the same as that given by *Y, which is the same. */
811
812 static int
813 int_cst_hash_eq (const void *x, const void *y)
814 {
815 tree xt = (tree) x;
816 tree yt = (tree) y;
817
818 return (TREE_TYPE (xt) == TREE_TYPE (yt)
819 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
820 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
821 }
822
823 /* Create an INT_CST node of TYPE and value HI:LOW.
824 The returned node is always shared. For small integers we use a
825 per-type vector cache, for larger ones we use a single hash table. */
826
827 tree
828 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
829 {
830 tree t;
831 int ix = -1;
832 int limit = 0;
833
834 gcc_assert (type);
835
836 switch (TREE_CODE (type))
837 {
838 case POINTER_TYPE:
839 case REFERENCE_TYPE:
840 /* Cache NULL pointer. */
841 if (!hi && !low)
842 {
843 limit = 1;
844 ix = 0;
845 }
846 break;
847
848 case BOOLEAN_TYPE:
849 /* Cache false or true. */
850 limit = 2;
851 if (!hi && low < 2)
852 ix = low;
853 break;
854
855 case INTEGER_TYPE:
856 case OFFSET_TYPE:
857 if (TYPE_UNSIGNED (type))
858 {
859 /* Cache 0..N */
860 limit = INTEGER_SHARE_LIMIT;
861 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
862 ix = low;
863 }
864 else
865 {
866 /* Cache -1..N */
867 limit = INTEGER_SHARE_LIMIT + 1;
868 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
869 ix = low + 1;
870 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
871 ix = 0;
872 }
873 break;
874
875 case ENUMERAL_TYPE:
876 break;
877
878 default:
879 gcc_unreachable ();
880 }
881
882 if (ix >= 0)
883 {
884 /* Look for it in the type's vector of small shared ints. */
885 if (!TYPE_CACHED_VALUES_P (type))
886 {
887 TYPE_CACHED_VALUES_P (type) = 1;
888 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
889 }
890
891 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
892 if (t)
893 {
894 /* Make sure no one is clobbering the shared constant. */
895 gcc_assert (TREE_TYPE (t) == type);
896 gcc_assert (TREE_INT_CST_LOW (t) == low);
897 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
898 }
899 else
900 {
901 /* Create a new shared int. */
902 t = make_node (INTEGER_CST);
903
904 TREE_INT_CST_LOW (t) = low;
905 TREE_INT_CST_HIGH (t) = hi;
906 TREE_TYPE (t) = type;
907
908 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
909 }
910 }
911 else
912 {
913 /* Use the cache of larger shared ints. */
914 void **slot;
915
916 TREE_INT_CST_LOW (int_cst_node) = low;
917 TREE_INT_CST_HIGH (int_cst_node) = hi;
918 TREE_TYPE (int_cst_node) = type;
919
920 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
921 t = *slot;
922 if (!t)
923 {
924 /* Insert this one into the hash table. */
925 t = int_cst_node;
926 *slot = t;
927 /* Make a new node for next time round. */
928 int_cst_node = make_node (INTEGER_CST);
929 }
930 }
931
932 return t;
933 }
934
935 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
936 and the rest are zeros. */
937
938 tree
939 build_low_bits_mask (tree type, unsigned bits)
940 {
941 unsigned HOST_WIDE_INT low;
942 HOST_WIDE_INT high;
943 unsigned HOST_WIDE_INT all_ones = ~(unsigned HOST_WIDE_INT) 0;
944
945 gcc_assert (bits <= TYPE_PRECISION (type));
946
947 if (bits == TYPE_PRECISION (type)
948 && !TYPE_UNSIGNED (type))
949 {
950 /* Sign extended all-ones mask. */
951 low = all_ones;
952 high = -1;
953 }
954 else if (bits <= HOST_BITS_PER_WIDE_INT)
955 {
956 low = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
957 high = 0;
958 }
959 else
960 {
961 bits -= HOST_BITS_PER_WIDE_INT;
962 low = all_ones;
963 high = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
964 }
965
966 return build_int_cst_wide (type, low, high);
967 }
968
969 /* Checks that X is integer constant that can be expressed in (unsigned)
970 HOST_WIDE_INT without loss of precision. */
971
972 bool
973 cst_and_fits_in_hwi (tree x)
974 {
975 if (TREE_CODE (x) != INTEGER_CST)
976 return false;
977
978 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
979 return false;
980
981 return (TREE_INT_CST_HIGH (x) == 0
982 || TREE_INT_CST_HIGH (x) == -1);
983 }
984
985 /* Return a new VECTOR_CST node whose type is TYPE and whose values
986 are in a list pointed to by VALS. */
987
988 tree
989 build_vector (tree type, tree vals)
990 {
991 tree v = make_node (VECTOR_CST);
992 int over = 0;
993 tree link;
994
995 TREE_VECTOR_CST_ELTS (v) = vals;
996 TREE_TYPE (v) = type;
997
998 /* Iterate through elements and check for overflow. */
999 for (link = vals; link; link = TREE_CHAIN (link))
1000 {
1001 tree value = TREE_VALUE (link);
1002
1003 /* Don't crash if we get an address constant. */
1004 if (!CONSTANT_CLASS_P (value))
1005 continue;
1006
1007 over |= TREE_OVERFLOW (value);
1008 }
1009
1010 TREE_OVERFLOW (v) = over;
1011 return v;
1012 }
1013
1014 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1015 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1016
1017 tree
1018 build_vector_from_ctor (tree type, VEC(constructor_elt,gc) *v)
1019 {
1020 tree list = NULL_TREE;
1021 unsigned HOST_WIDE_INT idx;
1022 tree value;
1023
1024 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1025 list = tree_cons (NULL_TREE, value, list);
1026 return build_vector (type, nreverse (list));
1027 }
1028
1029 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1030 are in the VEC pointed to by VALS. */
1031 tree
1032 build_constructor (tree type, VEC(constructor_elt,gc) *vals)
1033 {
1034 tree c = make_node (CONSTRUCTOR);
1035 TREE_TYPE (c) = type;
1036 CONSTRUCTOR_ELTS (c) = vals;
1037 return c;
1038 }
1039
1040 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1041 INDEX and VALUE. */
1042 tree
1043 build_constructor_single (tree type, tree index, tree value)
1044 {
1045 VEC(constructor_elt,gc) *v;
1046 constructor_elt *elt;
1047 tree t;
1048
1049 v = VEC_alloc (constructor_elt, gc, 1);
1050 elt = VEC_quick_push (constructor_elt, v, NULL);
1051 elt->index = index;
1052 elt->value = value;
1053
1054 t = build_constructor (type, v);
1055 TREE_CONSTANT (t) = TREE_CONSTANT (value);
1056 return t;
1057 }
1058
1059
1060 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1061 are in a list pointed to by VALS. */
1062 tree
1063 build_constructor_from_list (tree type, tree vals)
1064 {
1065 tree t, val;
1066 VEC(constructor_elt,gc) *v = NULL;
1067 bool constant_p = true;
1068
1069 if (vals)
1070 {
1071 v = VEC_alloc (constructor_elt, gc, list_length (vals));
1072 for (t = vals; t; t = TREE_CHAIN (t))
1073 {
1074 constructor_elt *elt = VEC_quick_push (constructor_elt, v, NULL);
1075 val = TREE_VALUE (t);
1076 elt->index = TREE_PURPOSE (t);
1077 elt->value = val;
1078 if (!TREE_CONSTANT (val))
1079 constant_p = false;
1080 }
1081 }
1082
1083 t = build_constructor (type, v);
1084 TREE_CONSTANT (t) = constant_p;
1085 return t;
1086 }
1087
1088
1089 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1090
1091 tree
1092 build_real (tree type, REAL_VALUE_TYPE d)
1093 {
1094 tree v;
1095 REAL_VALUE_TYPE *dp;
1096 int overflow = 0;
1097
1098 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1099 Consider doing it via real_convert now. */
1100
1101 v = make_node (REAL_CST);
1102 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
1103 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1104
1105 TREE_TYPE (v) = type;
1106 TREE_REAL_CST_PTR (v) = dp;
1107 TREE_OVERFLOW (v) = overflow;
1108 return v;
1109 }
1110
1111 /* Return a new REAL_CST node whose type is TYPE
1112 and whose value is the integer value of the INTEGER_CST node I. */
1113
1114 REAL_VALUE_TYPE
1115 real_value_from_int_cst (tree type, tree i)
1116 {
1117 REAL_VALUE_TYPE d;
1118
1119 /* Clear all bits of the real value type so that we can later do
1120 bitwise comparisons to see if two values are the same. */
1121 memset (&d, 0, sizeof d);
1122
1123 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1124 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1125 TYPE_UNSIGNED (TREE_TYPE (i)));
1126 return d;
1127 }
1128
1129 /* Given a tree representing an integer constant I, return a tree
1130 representing the same value as a floating-point constant of type TYPE. */
1131
1132 tree
1133 build_real_from_int_cst (tree type, tree i)
1134 {
1135 tree v;
1136 int overflow = TREE_OVERFLOW (i);
1137
1138 v = build_real (type, real_value_from_int_cst (type, i));
1139
1140 TREE_OVERFLOW (v) |= overflow;
1141 return v;
1142 }
1143
1144 /* Return a newly constructed STRING_CST node whose value is
1145 the LEN characters at STR.
1146 The TREE_TYPE is not initialized. */
1147
1148 tree
1149 build_string (int len, const char *str)
1150 {
1151 tree s;
1152 size_t length;
1153
1154 /* Do not waste bytes provided by padding of struct tree_string. */
1155 length = len + offsetof (struct tree_string, str) + 1;
1156
1157 #ifdef GATHER_STATISTICS
1158 tree_node_counts[(int) c_kind]++;
1159 tree_node_sizes[(int) c_kind] += length;
1160 #endif
1161
1162 s = ggc_alloc_tree (length);
1163
1164 memset (s, 0, sizeof (struct tree_common));
1165 TREE_SET_CODE (s, STRING_CST);
1166 TREE_CONSTANT (s) = 1;
1167 TREE_INVARIANT (s) = 1;
1168 TREE_STRING_LENGTH (s) = len;
1169 memcpy ((char *) TREE_STRING_POINTER (s), str, len);
1170 ((char *) TREE_STRING_POINTER (s))[len] = '\0';
1171
1172 return s;
1173 }
1174
1175 /* Return a newly constructed COMPLEX_CST node whose value is
1176 specified by the real and imaginary parts REAL and IMAG.
1177 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1178 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1179
1180 tree
1181 build_complex (tree type, tree real, tree imag)
1182 {
1183 tree t = make_node (COMPLEX_CST);
1184
1185 TREE_REALPART (t) = real;
1186 TREE_IMAGPART (t) = imag;
1187 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1188 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1189 return t;
1190 }
1191
1192 /* Return a constant of arithmetic type TYPE which is the
1193 multiplicative identity of the set TYPE. */
1194
1195 tree
1196 build_one_cst (tree type)
1197 {
1198 switch (TREE_CODE (type))
1199 {
1200 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1201 case POINTER_TYPE: case REFERENCE_TYPE:
1202 case OFFSET_TYPE:
1203 return build_int_cst (type, 1);
1204
1205 case REAL_TYPE:
1206 return build_real (type, dconst1);
1207
1208 case VECTOR_TYPE:
1209 {
1210 tree scalar, cst;
1211 int i;
1212
1213 scalar = build_one_cst (TREE_TYPE (type));
1214
1215 /* Create 'vect_cst_ = {cst,cst,...,cst}' */
1216 cst = NULL_TREE;
1217 for (i = TYPE_VECTOR_SUBPARTS (type); --i >= 0; )
1218 cst = tree_cons (NULL_TREE, scalar, cst);
1219
1220 return build_vector (type, cst);
1221 }
1222
1223 case COMPLEX_TYPE:
1224 return build_complex (type,
1225 build_one_cst (TREE_TYPE (type)),
1226 fold_convert (TREE_TYPE (type), integer_zero_node));
1227
1228 default:
1229 gcc_unreachable ();
1230 }
1231 }
1232
1233 /* Build a BINFO with LEN language slots. */
1234
1235 tree
1236 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1237 {
1238 tree t;
1239 size_t length = (offsetof (struct tree_binfo, base_binfos)
1240 + VEC_embedded_size (tree, base_binfos));
1241
1242 #ifdef GATHER_STATISTICS
1243 tree_node_counts[(int) binfo_kind]++;
1244 tree_node_sizes[(int) binfo_kind] += length;
1245 #endif
1246
1247 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1248
1249 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1250
1251 TREE_SET_CODE (t, TREE_BINFO);
1252
1253 VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
1254
1255 return t;
1256 }
1257
1258
1259 /* Build a newly constructed TREE_VEC node of length LEN. */
1260
1261 tree
1262 make_tree_vec_stat (int len MEM_STAT_DECL)
1263 {
1264 tree t;
1265 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1266
1267 #ifdef GATHER_STATISTICS
1268 tree_node_counts[(int) vec_kind]++;
1269 tree_node_sizes[(int) vec_kind] += length;
1270 #endif
1271
1272 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1273
1274 memset (t, 0, length);
1275
1276 TREE_SET_CODE (t, TREE_VEC);
1277 TREE_VEC_LENGTH (t) = len;
1278
1279 return t;
1280 }
1281 \f
1282 /* Return 1 if EXPR is the integer constant zero or a complex constant
1283 of zero. */
1284
1285 int
1286 integer_zerop (tree expr)
1287 {
1288 STRIP_NOPS (expr);
1289
1290 return ((TREE_CODE (expr) == INTEGER_CST
1291 && TREE_INT_CST_LOW (expr) == 0
1292 && TREE_INT_CST_HIGH (expr) == 0)
1293 || (TREE_CODE (expr) == COMPLEX_CST
1294 && integer_zerop (TREE_REALPART (expr))
1295 && integer_zerop (TREE_IMAGPART (expr))));
1296 }
1297
1298 /* Return 1 if EXPR is the integer constant one or the corresponding
1299 complex constant. */
1300
1301 int
1302 integer_onep (tree expr)
1303 {
1304 STRIP_NOPS (expr);
1305
1306 return ((TREE_CODE (expr) == INTEGER_CST
1307 && TREE_INT_CST_LOW (expr) == 1
1308 && TREE_INT_CST_HIGH (expr) == 0)
1309 || (TREE_CODE (expr) == COMPLEX_CST
1310 && integer_onep (TREE_REALPART (expr))
1311 && integer_zerop (TREE_IMAGPART (expr))));
1312 }
1313
1314 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1315 it contains. Likewise for the corresponding complex constant. */
1316
1317 int
1318 integer_all_onesp (tree expr)
1319 {
1320 int prec;
1321 int uns;
1322
1323 STRIP_NOPS (expr);
1324
1325 if (TREE_CODE (expr) == COMPLEX_CST
1326 && integer_all_onesp (TREE_REALPART (expr))
1327 && integer_zerop (TREE_IMAGPART (expr)))
1328 return 1;
1329
1330 else if (TREE_CODE (expr) != INTEGER_CST)
1331 return 0;
1332
1333 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1334 if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1335 && TREE_INT_CST_HIGH (expr) == -1)
1336 return 1;
1337 if (!uns)
1338 return 0;
1339
1340 /* Note that using TYPE_PRECISION here is wrong. We care about the
1341 actual bits, not the (arbitrary) range of the type. */
1342 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1343 if (prec >= HOST_BITS_PER_WIDE_INT)
1344 {
1345 HOST_WIDE_INT high_value;
1346 int shift_amount;
1347
1348 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1349
1350 /* Can not handle precisions greater than twice the host int size. */
1351 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
1352 if (shift_amount == HOST_BITS_PER_WIDE_INT)
1353 /* Shifting by the host word size is undefined according to the ANSI
1354 standard, so we must handle this as a special case. */
1355 high_value = -1;
1356 else
1357 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1358
1359 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1360 && TREE_INT_CST_HIGH (expr) == high_value);
1361 }
1362 else
1363 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1364 }
1365
1366 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1367 one bit on). */
1368
1369 int
1370 integer_pow2p (tree expr)
1371 {
1372 int prec;
1373 HOST_WIDE_INT high, low;
1374
1375 STRIP_NOPS (expr);
1376
1377 if (TREE_CODE (expr) == COMPLEX_CST
1378 && integer_pow2p (TREE_REALPART (expr))
1379 && integer_zerop (TREE_IMAGPART (expr)))
1380 return 1;
1381
1382 if (TREE_CODE (expr) != INTEGER_CST)
1383 return 0;
1384
1385 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1386 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1387 high = TREE_INT_CST_HIGH (expr);
1388 low = TREE_INT_CST_LOW (expr);
1389
1390 /* First clear all bits that are beyond the type's precision in case
1391 we've been sign extended. */
1392
1393 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1394 ;
1395 else if (prec > HOST_BITS_PER_WIDE_INT)
1396 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1397 else
1398 {
1399 high = 0;
1400 if (prec < HOST_BITS_PER_WIDE_INT)
1401 low &= ~((HOST_WIDE_INT) (-1) << prec);
1402 }
1403
1404 if (high == 0 && low == 0)
1405 return 0;
1406
1407 return ((high == 0 && (low & (low - 1)) == 0)
1408 || (low == 0 && (high & (high - 1)) == 0));
1409 }
1410
1411 /* Return 1 if EXPR is an integer constant other than zero or a
1412 complex constant other than zero. */
1413
1414 int
1415 integer_nonzerop (tree expr)
1416 {
1417 STRIP_NOPS (expr);
1418
1419 return ((TREE_CODE (expr) == INTEGER_CST
1420 && (TREE_INT_CST_LOW (expr) != 0
1421 || TREE_INT_CST_HIGH (expr) != 0))
1422 || (TREE_CODE (expr) == COMPLEX_CST
1423 && (integer_nonzerop (TREE_REALPART (expr))
1424 || integer_nonzerop (TREE_IMAGPART (expr)))));
1425 }
1426
1427 /* Return the power of two represented by a tree node known to be a
1428 power of two. */
1429
1430 int
1431 tree_log2 (tree expr)
1432 {
1433 int prec;
1434 HOST_WIDE_INT high, low;
1435
1436 STRIP_NOPS (expr);
1437
1438 if (TREE_CODE (expr) == COMPLEX_CST)
1439 return tree_log2 (TREE_REALPART (expr));
1440
1441 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1442 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1443
1444 high = TREE_INT_CST_HIGH (expr);
1445 low = TREE_INT_CST_LOW (expr);
1446
1447 /* First clear all bits that are beyond the type's precision in case
1448 we've been sign extended. */
1449
1450 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1451 ;
1452 else if (prec > HOST_BITS_PER_WIDE_INT)
1453 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1454 else
1455 {
1456 high = 0;
1457 if (prec < HOST_BITS_PER_WIDE_INT)
1458 low &= ~((HOST_WIDE_INT) (-1) << prec);
1459 }
1460
1461 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1462 : exact_log2 (low));
1463 }
1464
1465 /* Similar, but return the largest integer Y such that 2 ** Y is less
1466 than or equal to EXPR. */
1467
1468 int
1469 tree_floor_log2 (tree expr)
1470 {
1471 int prec;
1472 HOST_WIDE_INT high, low;
1473
1474 STRIP_NOPS (expr);
1475
1476 if (TREE_CODE (expr) == COMPLEX_CST)
1477 return tree_log2 (TREE_REALPART (expr));
1478
1479 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1480 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1481
1482 high = TREE_INT_CST_HIGH (expr);
1483 low = TREE_INT_CST_LOW (expr);
1484
1485 /* First clear all bits that are beyond the type's precision in case
1486 we've been sign extended. Ignore if type's precision hasn't been set
1487 since what we are doing is setting it. */
1488
1489 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1490 ;
1491 else if (prec > HOST_BITS_PER_WIDE_INT)
1492 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1493 else
1494 {
1495 high = 0;
1496 if (prec < HOST_BITS_PER_WIDE_INT)
1497 low &= ~((HOST_WIDE_INT) (-1) << prec);
1498 }
1499
1500 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1501 : floor_log2 (low));
1502 }
1503
1504 /* Return 1 if EXPR is the real constant zero. */
1505
1506 int
1507 real_zerop (tree expr)
1508 {
1509 STRIP_NOPS (expr);
1510
1511 return ((TREE_CODE (expr) == REAL_CST
1512 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1513 || (TREE_CODE (expr) == COMPLEX_CST
1514 && real_zerop (TREE_REALPART (expr))
1515 && real_zerop (TREE_IMAGPART (expr))));
1516 }
1517
1518 /* Return 1 if EXPR is the real constant one in real or complex form. */
1519
1520 int
1521 real_onep (tree expr)
1522 {
1523 STRIP_NOPS (expr);
1524
1525 return ((TREE_CODE (expr) == REAL_CST
1526 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1527 || (TREE_CODE (expr) == COMPLEX_CST
1528 && real_onep (TREE_REALPART (expr))
1529 && real_zerop (TREE_IMAGPART (expr))));
1530 }
1531
1532 /* Return 1 if EXPR is the real constant two. */
1533
1534 int
1535 real_twop (tree expr)
1536 {
1537 STRIP_NOPS (expr);
1538
1539 return ((TREE_CODE (expr) == REAL_CST
1540 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1541 || (TREE_CODE (expr) == COMPLEX_CST
1542 && real_twop (TREE_REALPART (expr))
1543 && real_zerop (TREE_IMAGPART (expr))));
1544 }
1545
1546 /* Return 1 if EXPR is the real constant minus one. */
1547
1548 int
1549 real_minus_onep (tree expr)
1550 {
1551 STRIP_NOPS (expr);
1552
1553 return ((TREE_CODE (expr) == REAL_CST
1554 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
1555 || (TREE_CODE (expr) == COMPLEX_CST
1556 && real_minus_onep (TREE_REALPART (expr))
1557 && real_zerop (TREE_IMAGPART (expr))));
1558 }
1559
1560 /* Nonzero if EXP is a constant or a cast of a constant. */
1561
1562 int
1563 really_constant_p (tree exp)
1564 {
1565 /* This is not quite the same as STRIP_NOPS. It does more. */
1566 while (TREE_CODE (exp) == NOP_EXPR
1567 || TREE_CODE (exp) == CONVERT_EXPR
1568 || TREE_CODE (exp) == NON_LVALUE_EXPR)
1569 exp = TREE_OPERAND (exp, 0);
1570 return TREE_CONSTANT (exp);
1571 }
1572 \f
1573 /* Return first list element whose TREE_VALUE is ELEM.
1574 Return 0 if ELEM is not in LIST. */
1575
1576 tree
1577 value_member (tree elem, tree list)
1578 {
1579 while (list)
1580 {
1581 if (elem == TREE_VALUE (list))
1582 return list;
1583 list = TREE_CHAIN (list);
1584 }
1585 return NULL_TREE;
1586 }
1587
1588 /* Return first list element whose TREE_PURPOSE is ELEM.
1589 Return 0 if ELEM is not in LIST. */
1590
1591 tree
1592 purpose_member (tree elem, tree list)
1593 {
1594 while (list)
1595 {
1596 if (elem == TREE_PURPOSE (list))
1597 return list;
1598 list = TREE_CHAIN (list);
1599 }
1600 return NULL_TREE;
1601 }
1602
1603 /* Return nonzero if ELEM is part of the chain CHAIN. */
1604
1605 int
1606 chain_member (tree elem, tree chain)
1607 {
1608 while (chain)
1609 {
1610 if (elem == chain)
1611 return 1;
1612 chain = TREE_CHAIN (chain);
1613 }
1614
1615 return 0;
1616 }
1617
1618 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1619 We expect a null pointer to mark the end of the chain.
1620 This is the Lisp primitive `length'. */
1621
1622 int
1623 list_length (tree t)
1624 {
1625 tree p = t;
1626 #ifdef ENABLE_TREE_CHECKING
1627 tree q = t;
1628 #endif
1629 int len = 0;
1630
1631 while (p)
1632 {
1633 p = TREE_CHAIN (p);
1634 #ifdef ENABLE_TREE_CHECKING
1635 if (len % 2)
1636 q = TREE_CHAIN (q);
1637 gcc_assert (p != q);
1638 #endif
1639 len++;
1640 }
1641
1642 return len;
1643 }
1644
1645 /* Returns the number of FIELD_DECLs in TYPE. */
1646
1647 int
1648 fields_length (tree type)
1649 {
1650 tree t = TYPE_FIELDS (type);
1651 int count = 0;
1652
1653 for (; t; t = TREE_CHAIN (t))
1654 if (TREE_CODE (t) == FIELD_DECL)
1655 ++count;
1656
1657 return count;
1658 }
1659
1660 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1661 by modifying the last node in chain 1 to point to chain 2.
1662 This is the Lisp primitive `nconc'. */
1663
1664 tree
1665 chainon (tree op1, tree op2)
1666 {
1667 tree t1;
1668
1669 if (!op1)
1670 return op2;
1671 if (!op2)
1672 return op1;
1673
1674 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1675 continue;
1676 TREE_CHAIN (t1) = op2;
1677
1678 #ifdef ENABLE_TREE_CHECKING
1679 {
1680 tree t2;
1681 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1682 gcc_assert (t2 != t1);
1683 }
1684 #endif
1685
1686 return op1;
1687 }
1688
1689 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1690
1691 tree
1692 tree_last (tree chain)
1693 {
1694 tree next;
1695 if (chain)
1696 while ((next = TREE_CHAIN (chain)))
1697 chain = next;
1698 return chain;
1699 }
1700
1701 /* Reverse the order of elements in the chain T,
1702 and return the new head of the chain (old last element). */
1703
1704 tree
1705 nreverse (tree t)
1706 {
1707 tree prev = 0, decl, next;
1708 for (decl = t; decl; decl = next)
1709 {
1710 next = TREE_CHAIN (decl);
1711 TREE_CHAIN (decl) = prev;
1712 prev = decl;
1713 }
1714 return prev;
1715 }
1716 \f
1717 /* Return a newly created TREE_LIST node whose
1718 purpose and value fields are PARM and VALUE. */
1719
1720 tree
1721 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1722 {
1723 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1724 TREE_PURPOSE (t) = parm;
1725 TREE_VALUE (t) = value;
1726 return t;
1727 }
1728
1729 /* Return a newly created TREE_LIST node whose
1730 purpose and value fields are PURPOSE and VALUE
1731 and whose TREE_CHAIN is CHAIN. */
1732
1733 tree
1734 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1735 {
1736 tree node;
1737
1738 node = ggc_alloc_zone_pass_stat (sizeof (struct tree_list), &tree_zone);
1739
1740 memset (node, 0, sizeof (struct tree_common));
1741
1742 #ifdef GATHER_STATISTICS
1743 tree_node_counts[(int) x_kind]++;
1744 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1745 #endif
1746
1747 TREE_SET_CODE (node, TREE_LIST);
1748 TREE_CHAIN (node) = chain;
1749 TREE_PURPOSE (node) = purpose;
1750 TREE_VALUE (node) = value;
1751 return node;
1752 }
1753
1754 \f
1755 /* Return the size nominally occupied by an object of type TYPE
1756 when it resides in memory. The value is measured in units of bytes,
1757 and its data type is that normally used for type sizes
1758 (which is the first type created by make_signed_type or
1759 make_unsigned_type). */
1760
1761 tree
1762 size_in_bytes (tree type)
1763 {
1764 tree t;
1765
1766 if (type == error_mark_node)
1767 return integer_zero_node;
1768
1769 type = TYPE_MAIN_VARIANT (type);
1770 t = TYPE_SIZE_UNIT (type);
1771
1772 if (t == 0)
1773 {
1774 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1775 return size_zero_node;
1776 }
1777
1778 return t;
1779 }
1780
1781 /* Return the size of TYPE (in bytes) as a wide integer
1782 or return -1 if the size can vary or is larger than an integer. */
1783
1784 HOST_WIDE_INT
1785 int_size_in_bytes (tree type)
1786 {
1787 tree t;
1788
1789 if (type == error_mark_node)
1790 return 0;
1791
1792 type = TYPE_MAIN_VARIANT (type);
1793 t = TYPE_SIZE_UNIT (type);
1794 if (t == 0
1795 || TREE_CODE (t) != INTEGER_CST
1796 || TREE_INT_CST_HIGH (t) != 0
1797 /* If the result would appear negative, it's too big to represent. */
1798 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1799 return -1;
1800
1801 return TREE_INT_CST_LOW (t);
1802 }
1803
1804 /* Return the maximum size of TYPE (in bytes) as a wide integer
1805 or return -1 if the size can vary or is larger than an integer. */
1806
1807 HOST_WIDE_INT
1808 max_int_size_in_bytes (tree type)
1809 {
1810 HOST_WIDE_INT size = -1;
1811 tree size_tree;
1812
1813 /* If this is an array type, check for a possible MAX_SIZE attached. */
1814
1815 if (TREE_CODE (type) == ARRAY_TYPE)
1816 {
1817 size_tree = TYPE_ARRAY_MAX_SIZE (type);
1818
1819 if (size_tree && host_integerp (size_tree, 1))
1820 size = tree_low_cst (size_tree, 1);
1821 }
1822
1823 /* If we still haven't been able to get a size, see if the language
1824 can compute a maximum size. */
1825
1826 if (size == -1)
1827 {
1828 size_tree = lang_hooks.types.max_size (type);
1829
1830 if (size_tree && host_integerp (size_tree, 1))
1831 size = tree_low_cst (size_tree, 1);
1832 }
1833
1834 return size;
1835 }
1836 \f
1837 /* Return the bit position of FIELD, in bits from the start of the record.
1838 This is a tree of type bitsizetype. */
1839
1840 tree
1841 bit_position (tree field)
1842 {
1843 return bit_from_pos (DECL_FIELD_OFFSET (field),
1844 DECL_FIELD_BIT_OFFSET (field));
1845 }
1846
1847 /* Likewise, but return as an integer. It must be representable in
1848 that way (since it could be a signed value, we don't have the
1849 option of returning -1 like int_size_in_byte can. */
1850
1851 HOST_WIDE_INT
1852 int_bit_position (tree field)
1853 {
1854 return tree_low_cst (bit_position (field), 0);
1855 }
1856 \f
1857 /* Return the byte position of FIELD, in bytes from the start of the record.
1858 This is a tree of type sizetype. */
1859
1860 tree
1861 byte_position (tree field)
1862 {
1863 return byte_from_pos (DECL_FIELD_OFFSET (field),
1864 DECL_FIELD_BIT_OFFSET (field));
1865 }
1866
1867 /* Likewise, but return as an integer. It must be representable in
1868 that way (since it could be a signed value, we don't have the
1869 option of returning -1 like int_size_in_byte can. */
1870
1871 HOST_WIDE_INT
1872 int_byte_position (tree field)
1873 {
1874 return tree_low_cst (byte_position (field), 0);
1875 }
1876 \f
1877 /* Return the strictest alignment, in bits, that T is known to have. */
1878
1879 unsigned int
1880 expr_align (tree t)
1881 {
1882 unsigned int align0, align1;
1883
1884 switch (TREE_CODE (t))
1885 {
1886 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1887 /* If we have conversions, we know that the alignment of the
1888 object must meet each of the alignments of the types. */
1889 align0 = expr_align (TREE_OPERAND (t, 0));
1890 align1 = TYPE_ALIGN (TREE_TYPE (t));
1891 return MAX (align0, align1);
1892
1893 case MODIFY_EXPR:
1894 /* FIXME tuples: It is unclear to me if this function, which
1895 is only called from ADA, is called on gimple or non gimple
1896 trees. Let's assume it's from gimple trees unless we hit
1897 this abort. */
1898 gcc_unreachable ();
1899
1900 case SAVE_EXPR: case COMPOUND_EXPR: case GIMPLE_MODIFY_STMT:
1901 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1902 case CLEANUP_POINT_EXPR:
1903 /* These don't change the alignment of an object. */
1904 return expr_align (TREE_OPERAND (t, 0));
1905
1906 case COND_EXPR:
1907 /* The best we can do is say that the alignment is the least aligned
1908 of the two arms. */
1909 align0 = expr_align (TREE_OPERAND (t, 1));
1910 align1 = expr_align (TREE_OPERAND (t, 2));
1911 return MIN (align0, align1);
1912
1913 case LABEL_DECL: case CONST_DECL:
1914 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1915 if (DECL_ALIGN (t) != 0)
1916 return DECL_ALIGN (t);
1917 break;
1918
1919 case FUNCTION_DECL:
1920 return FUNCTION_BOUNDARY;
1921
1922 default:
1923 break;
1924 }
1925
1926 /* Otherwise take the alignment from that of the type. */
1927 return TYPE_ALIGN (TREE_TYPE (t));
1928 }
1929 \f
1930 /* Return, as a tree node, the number of elements for TYPE (which is an
1931 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1932
1933 tree
1934 array_type_nelts (tree type)
1935 {
1936 tree index_type, min, max;
1937
1938 /* If they did it with unspecified bounds, then we should have already
1939 given an error about it before we got here. */
1940 if (! TYPE_DOMAIN (type))
1941 return error_mark_node;
1942
1943 index_type = TYPE_DOMAIN (type);
1944 min = TYPE_MIN_VALUE (index_type);
1945 max = TYPE_MAX_VALUE (index_type);
1946
1947 return (integer_zerop (min)
1948 ? max
1949 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
1950 }
1951 \f
1952 /* If arg is static -- a reference to an object in static storage -- then
1953 return the object. This is not the same as the C meaning of `static'.
1954 If arg isn't static, return NULL. */
1955
1956 tree
1957 staticp (tree arg)
1958 {
1959 switch (TREE_CODE (arg))
1960 {
1961 case FUNCTION_DECL:
1962 /* Nested functions are static, even though taking their address will
1963 involve a trampoline as we unnest the nested function and create
1964 the trampoline on the tree level. */
1965 return arg;
1966
1967 case VAR_DECL:
1968 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1969 && ! DECL_THREAD_LOCAL_P (arg)
1970 && ! DECL_DLLIMPORT_P (arg)
1971 ? arg : NULL);
1972
1973 case CONST_DECL:
1974 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1975 ? arg : NULL);
1976
1977 case CONSTRUCTOR:
1978 return TREE_STATIC (arg) ? arg : NULL;
1979
1980 case LABEL_DECL:
1981 case STRING_CST:
1982 return arg;
1983
1984 case COMPONENT_REF:
1985 /* If the thing being referenced is not a field, then it is
1986 something language specific. */
1987 if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1988 return (*lang_hooks.staticp) (arg);
1989
1990 /* If we are referencing a bitfield, we can't evaluate an
1991 ADDR_EXPR at compile time and so it isn't a constant. */
1992 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1993 return NULL;
1994
1995 return staticp (TREE_OPERAND (arg, 0));
1996
1997 case BIT_FIELD_REF:
1998 return NULL;
1999
2000 case MISALIGNED_INDIRECT_REF:
2001 case ALIGN_INDIRECT_REF:
2002 case INDIRECT_REF:
2003 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
2004
2005 case ARRAY_REF:
2006 case ARRAY_RANGE_REF:
2007 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2008 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2009 return staticp (TREE_OPERAND (arg, 0));
2010 else
2011 return false;
2012
2013 default:
2014 if ((unsigned int) TREE_CODE (arg)
2015 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
2016 return lang_hooks.staticp (arg);
2017 else
2018 return NULL;
2019 }
2020 }
2021 \f
2022 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2023 Do this to any expression which may be used in more than one place,
2024 but must be evaluated only once.
2025
2026 Normally, expand_expr would reevaluate the expression each time.
2027 Calling save_expr produces something that is evaluated and recorded
2028 the first time expand_expr is called on it. Subsequent calls to
2029 expand_expr just reuse the recorded value.
2030
2031 The call to expand_expr that generates code that actually computes
2032 the value is the first call *at compile time*. Subsequent calls
2033 *at compile time* generate code to use the saved value.
2034 This produces correct result provided that *at run time* control
2035 always flows through the insns made by the first expand_expr
2036 before reaching the other places where the save_expr was evaluated.
2037 You, the caller of save_expr, must make sure this is so.
2038
2039 Constants, and certain read-only nodes, are returned with no
2040 SAVE_EXPR because that is safe. Expressions containing placeholders
2041 are not touched; see tree.def for an explanation of what these
2042 are used for. */
2043
2044 tree
2045 save_expr (tree expr)
2046 {
2047 tree t = fold (expr);
2048 tree inner;
2049
2050 /* If the tree evaluates to a constant, then we don't want to hide that
2051 fact (i.e. this allows further folding, and direct checks for constants).
2052 However, a read-only object that has side effects cannot be bypassed.
2053 Since it is no problem to reevaluate literals, we just return the
2054 literal node. */
2055 inner = skip_simple_arithmetic (t);
2056
2057 if (TREE_INVARIANT (inner)
2058 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
2059 || TREE_CODE (inner) == SAVE_EXPR
2060 || TREE_CODE (inner) == ERROR_MARK)
2061 return t;
2062
2063 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2064 it means that the size or offset of some field of an object depends on
2065 the value within another field.
2066
2067 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2068 and some variable since it would then need to be both evaluated once and
2069 evaluated more than once. Front-ends must assure this case cannot
2070 happen by surrounding any such subexpressions in their own SAVE_EXPR
2071 and forcing evaluation at the proper time. */
2072 if (contains_placeholder_p (inner))
2073 return t;
2074
2075 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
2076
2077 /* This expression might be placed ahead of a jump to ensure that the
2078 value was computed on both sides of the jump. So make sure it isn't
2079 eliminated as dead. */
2080 TREE_SIDE_EFFECTS (t) = 1;
2081 TREE_INVARIANT (t) = 1;
2082 return t;
2083 }
2084
2085 /* Look inside EXPR and into any simple arithmetic operations. Return
2086 the innermost non-arithmetic node. */
2087
2088 tree
2089 skip_simple_arithmetic (tree expr)
2090 {
2091 tree inner;
2092
2093 /* We don't care about whether this can be used as an lvalue in this
2094 context. */
2095 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
2096 expr = TREE_OPERAND (expr, 0);
2097
2098 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
2099 a constant, it will be more efficient to not make another SAVE_EXPR since
2100 it will allow better simplification and GCSE will be able to merge the
2101 computations if they actually occur. */
2102 inner = expr;
2103 while (1)
2104 {
2105 if (UNARY_CLASS_P (inner))
2106 inner = TREE_OPERAND (inner, 0);
2107 else if (BINARY_CLASS_P (inner))
2108 {
2109 if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
2110 inner = TREE_OPERAND (inner, 0);
2111 else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
2112 inner = TREE_OPERAND (inner, 1);
2113 else
2114 break;
2115 }
2116 else
2117 break;
2118 }
2119
2120 return inner;
2121 }
2122
2123 /* Return which tree structure is used by T. */
2124
2125 enum tree_node_structure_enum
2126 tree_node_structure (tree t)
2127 {
2128 enum tree_code code = TREE_CODE (t);
2129
2130 switch (TREE_CODE_CLASS (code))
2131 {
2132 case tcc_declaration:
2133 {
2134 switch (code)
2135 {
2136 case FIELD_DECL:
2137 return TS_FIELD_DECL;
2138 case PARM_DECL:
2139 return TS_PARM_DECL;
2140 case VAR_DECL:
2141 return TS_VAR_DECL;
2142 case LABEL_DECL:
2143 return TS_LABEL_DECL;
2144 case RESULT_DECL:
2145 return TS_RESULT_DECL;
2146 case CONST_DECL:
2147 return TS_CONST_DECL;
2148 case TYPE_DECL:
2149 return TS_TYPE_DECL;
2150 case FUNCTION_DECL:
2151 return TS_FUNCTION_DECL;
2152 case SYMBOL_MEMORY_TAG:
2153 case NAME_MEMORY_TAG:
2154 case STRUCT_FIELD_TAG:
2155 case MEMORY_PARTITION_TAG:
2156 return TS_MEMORY_TAG;
2157 default:
2158 return TS_DECL_NON_COMMON;
2159 }
2160 }
2161 case tcc_type:
2162 return TS_TYPE;
2163 case tcc_reference:
2164 case tcc_comparison:
2165 case tcc_unary:
2166 case tcc_binary:
2167 case tcc_expression:
2168 case tcc_statement:
2169 return TS_EXP;
2170 case tcc_gimple_stmt:
2171 return TS_GIMPLE_STATEMENT;
2172 default: /* tcc_constant and tcc_exceptional */
2173 break;
2174 }
2175 switch (code)
2176 {
2177 /* tcc_constant cases. */
2178 case INTEGER_CST: return TS_INT_CST;
2179 case REAL_CST: return TS_REAL_CST;
2180 case COMPLEX_CST: return TS_COMPLEX;
2181 case VECTOR_CST: return TS_VECTOR;
2182 case STRING_CST: return TS_STRING;
2183 /* tcc_exceptional cases. */
2184 /* FIXME tuples: eventually this should be TS_BASE. For now, nothing
2185 returns TS_BASE. */
2186 case ERROR_MARK: return TS_COMMON;
2187 case IDENTIFIER_NODE: return TS_IDENTIFIER;
2188 case TREE_LIST: return TS_LIST;
2189 case TREE_VEC: return TS_VEC;
2190 case PHI_NODE: return TS_PHI_NODE;
2191 case SSA_NAME: return TS_SSA_NAME;
2192 case PLACEHOLDER_EXPR: return TS_COMMON;
2193 case STATEMENT_LIST: return TS_STATEMENT_LIST;
2194 case BLOCK: return TS_BLOCK;
2195 case CONSTRUCTOR: return TS_CONSTRUCTOR;
2196 case TREE_BINFO: return TS_BINFO;
2197 case VALUE_HANDLE: return TS_VALUE_HANDLE;
2198 case OMP_CLAUSE: return TS_OMP_CLAUSE;
2199
2200 default:
2201 gcc_unreachable ();
2202 }
2203 }
2204 \f
2205 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2206 or offset that depends on a field within a record. */
2207
2208 bool
2209 contains_placeholder_p (tree exp)
2210 {
2211 enum tree_code code;
2212
2213 if (!exp)
2214 return 0;
2215
2216 code = TREE_CODE (exp);
2217 if (code == PLACEHOLDER_EXPR)
2218 return 1;
2219
2220 switch (TREE_CODE_CLASS (code))
2221 {
2222 case tcc_reference:
2223 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2224 position computations since they will be converted into a
2225 WITH_RECORD_EXPR involving the reference, which will assume
2226 here will be valid. */
2227 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2228
2229 case tcc_exceptional:
2230 if (code == TREE_LIST)
2231 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
2232 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
2233 break;
2234
2235 case tcc_unary:
2236 case tcc_binary:
2237 case tcc_comparison:
2238 case tcc_expression:
2239 switch (code)
2240 {
2241 case COMPOUND_EXPR:
2242 /* Ignoring the first operand isn't quite right, but works best. */
2243 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2244
2245 case COND_EXPR:
2246 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2247 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
2248 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
2249
2250 case CALL_EXPR:
2251 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2252
2253 default:
2254 break;
2255 }
2256
2257 switch (TREE_CODE_LENGTH (code))
2258 {
2259 case 1:
2260 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2261 case 2:
2262 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2263 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
2264 default:
2265 return 0;
2266 }
2267
2268 default:
2269 return 0;
2270 }
2271 return 0;
2272 }
2273
2274 /* Return true if any part of the computation of TYPE involves a
2275 PLACEHOLDER_EXPR. This includes size, bounds, qualifiers
2276 (for QUAL_UNION_TYPE) and field positions. */
2277
2278 static bool
2279 type_contains_placeholder_1 (tree type)
2280 {
2281 /* If the size contains a placeholder or the parent type (component type in
2282 the case of arrays) type involves a placeholder, this type does. */
2283 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2284 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2285 || (TREE_TYPE (type) != 0
2286 && type_contains_placeholder_p (TREE_TYPE (type))))
2287 return true;
2288
2289 /* Now do type-specific checks. Note that the last part of the check above
2290 greatly limits what we have to do below. */
2291 switch (TREE_CODE (type))
2292 {
2293 case VOID_TYPE:
2294 case COMPLEX_TYPE:
2295 case ENUMERAL_TYPE:
2296 case BOOLEAN_TYPE:
2297 case POINTER_TYPE:
2298 case OFFSET_TYPE:
2299 case REFERENCE_TYPE:
2300 case METHOD_TYPE:
2301 case FUNCTION_TYPE:
2302 case VECTOR_TYPE:
2303 return false;
2304
2305 case INTEGER_TYPE:
2306 case REAL_TYPE:
2307 /* Here we just check the bounds. */
2308 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2309 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2310
2311 case ARRAY_TYPE:
2312 /* We're already checked the component type (TREE_TYPE), so just check
2313 the index type. */
2314 return type_contains_placeholder_p (TYPE_DOMAIN (type));
2315
2316 case RECORD_TYPE:
2317 case UNION_TYPE:
2318 case QUAL_UNION_TYPE:
2319 {
2320 tree field;
2321
2322 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2323 if (TREE_CODE (field) == FIELD_DECL
2324 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2325 || (TREE_CODE (type) == QUAL_UNION_TYPE
2326 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2327 || type_contains_placeholder_p (TREE_TYPE (field))))
2328 return true;
2329
2330 return false;
2331 }
2332
2333 default:
2334 gcc_unreachable ();
2335 }
2336 }
2337
2338 bool
2339 type_contains_placeholder_p (tree type)
2340 {
2341 bool result;
2342
2343 /* If the contains_placeholder_bits field has been initialized,
2344 then we know the answer. */
2345 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
2346 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
2347
2348 /* Indicate that we've seen this type node, and the answer is false.
2349 This is what we want to return if we run into recursion via fields. */
2350 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
2351
2352 /* Compute the real value. */
2353 result = type_contains_placeholder_1 (type);
2354
2355 /* Store the real value. */
2356 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
2357
2358 return result;
2359 }
2360 \f
2361 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2362 return a tree with all occurrences of references to F in a
2363 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
2364 contains only arithmetic expressions or a CALL_EXPR with a
2365 PLACEHOLDER_EXPR occurring only in its arglist. */
2366
2367 tree
2368 substitute_in_expr (tree exp, tree f, tree r)
2369 {
2370 enum tree_code code = TREE_CODE (exp);
2371 tree op0, op1, op2, op3;
2372 tree new;
2373 tree inner;
2374
2375 /* We handle TREE_LIST and COMPONENT_REF separately. */
2376 if (code == TREE_LIST)
2377 {
2378 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
2379 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
2380 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2381 return exp;
2382
2383 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2384 }
2385 else if (code == COMPONENT_REF)
2386 {
2387 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2388 and it is the right field, replace it with R. */
2389 for (inner = TREE_OPERAND (exp, 0);
2390 REFERENCE_CLASS_P (inner);
2391 inner = TREE_OPERAND (inner, 0))
2392 ;
2393 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2394 && TREE_OPERAND (exp, 1) == f)
2395 return r;
2396
2397 /* If this expression hasn't been completed let, leave it alone. */
2398 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
2399 return exp;
2400
2401 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2402 if (op0 == TREE_OPERAND (exp, 0))
2403 return exp;
2404
2405 new = fold_build3 (COMPONENT_REF, TREE_TYPE (exp),
2406 op0, TREE_OPERAND (exp, 1), NULL_TREE);
2407 }
2408 else
2409 switch (TREE_CODE_CLASS (code))
2410 {
2411 case tcc_constant:
2412 case tcc_declaration:
2413 return exp;
2414
2415 case tcc_exceptional:
2416 case tcc_unary:
2417 case tcc_binary:
2418 case tcc_comparison:
2419 case tcc_expression:
2420 case tcc_reference:
2421 switch (TREE_CODE_LENGTH (code))
2422 {
2423 case 0:
2424 return exp;
2425
2426 case 1:
2427 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2428 if (op0 == TREE_OPERAND (exp, 0))
2429 return exp;
2430
2431 new = fold_build1 (code, TREE_TYPE (exp), op0);
2432 break;
2433
2434 case 2:
2435 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2436 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2437
2438 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2439 return exp;
2440
2441 new = fold_build2 (code, TREE_TYPE (exp), op0, op1);
2442 break;
2443
2444 case 3:
2445 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2446 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2447 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2448
2449 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2450 && op2 == TREE_OPERAND (exp, 2))
2451 return exp;
2452
2453 new = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2454 break;
2455
2456 case 4:
2457 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2458 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2459 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2460 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
2461
2462 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2463 && op2 == TREE_OPERAND (exp, 2)
2464 && op3 == TREE_OPERAND (exp, 3))
2465 return exp;
2466
2467 new = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2468 break;
2469
2470 default:
2471 gcc_unreachable ();
2472 }
2473 break;
2474
2475 default:
2476 gcc_unreachable ();
2477 }
2478
2479 TREE_READONLY (new) = TREE_READONLY (exp);
2480 return new;
2481 }
2482
2483 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
2484 for it within OBJ, a tree that is an object or a chain of references. */
2485
2486 tree
2487 substitute_placeholder_in_expr (tree exp, tree obj)
2488 {
2489 enum tree_code code = TREE_CODE (exp);
2490 tree op0, op1, op2, op3;
2491
2492 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
2493 in the chain of OBJ. */
2494 if (code == PLACEHOLDER_EXPR)
2495 {
2496 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
2497 tree elt;
2498
2499 for (elt = obj; elt != 0;
2500 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2501 || TREE_CODE (elt) == COND_EXPR)
2502 ? TREE_OPERAND (elt, 1)
2503 : (REFERENCE_CLASS_P (elt)
2504 || UNARY_CLASS_P (elt)
2505 || BINARY_CLASS_P (elt)
2506 || EXPRESSION_CLASS_P (elt))
2507 ? TREE_OPERAND (elt, 0) : 0))
2508 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
2509 return elt;
2510
2511 for (elt = obj; elt != 0;
2512 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2513 || TREE_CODE (elt) == COND_EXPR)
2514 ? TREE_OPERAND (elt, 1)
2515 : (REFERENCE_CLASS_P (elt)
2516 || UNARY_CLASS_P (elt)
2517 || BINARY_CLASS_P (elt)
2518 || EXPRESSION_CLASS_P (elt))
2519 ? TREE_OPERAND (elt, 0) : 0))
2520 if (POINTER_TYPE_P (TREE_TYPE (elt))
2521 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2522 == need_type))
2523 return fold_build1 (INDIRECT_REF, need_type, elt);
2524
2525 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2526 survives until RTL generation, there will be an error. */
2527 return exp;
2528 }
2529
2530 /* TREE_LIST is special because we need to look at TREE_VALUE
2531 and TREE_CHAIN, not TREE_OPERANDS. */
2532 else if (code == TREE_LIST)
2533 {
2534 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2535 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2536 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2537 return exp;
2538
2539 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2540 }
2541 else
2542 switch (TREE_CODE_CLASS (code))
2543 {
2544 case tcc_constant:
2545 case tcc_declaration:
2546 return exp;
2547
2548 case tcc_exceptional:
2549 case tcc_unary:
2550 case tcc_binary:
2551 case tcc_comparison:
2552 case tcc_expression:
2553 case tcc_reference:
2554 case tcc_statement:
2555 switch (TREE_CODE_LENGTH (code))
2556 {
2557 case 0:
2558 return exp;
2559
2560 case 1:
2561 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2562 if (op0 == TREE_OPERAND (exp, 0))
2563 return exp;
2564 else
2565 return fold_build1 (code, TREE_TYPE (exp), op0);
2566
2567 case 2:
2568 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2569 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2570
2571 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2572 return exp;
2573 else
2574 return fold_build2 (code, TREE_TYPE (exp), op0, op1);
2575
2576 case 3:
2577 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2578 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2579 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2580
2581 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2582 && op2 == TREE_OPERAND (exp, 2))
2583 return exp;
2584 else
2585 return fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2586
2587 case 4:
2588 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2589 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2590 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2591 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2592
2593 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2594 && op2 == TREE_OPERAND (exp, 2)
2595 && op3 == TREE_OPERAND (exp, 3))
2596 return exp;
2597 else
2598 return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2599
2600 default:
2601 gcc_unreachable ();
2602 }
2603 break;
2604
2605 default:
2606 gcc_unreachable ();
2607 }
2608 }
2609 \f
2610 /* Stabilize a reference so that we can use it any number of times
2611 without causing its operands to be evaluated more than once.
2612 Returns the stabilized reference. This works by means of save_expr,
2613 so see the caveats in the comments about save_expr.
2614
2615 Also allows conversion expressions whose operands are references.
2616 Any other kind of expression is returned unchanged. */
2617
2618 tree
2619 stabilize_reference (tree ref)
2620 {
2621 tree result;
2622 enum tree_code code = TREE_CODE (ref);
2623
2624 switch (code)
2625 {
2626 case VAR_DECL:
2627 case PARM_DECL:
2628 case RESULT_DECL:
2629 /* No action is needed in this case. */
2630 return ref;
2631
2632 case NOP_EXPR:
2633 case CONVERT_EXPR:
2634 case FLOAT_EXPR:
2635 case FIX_TRUNC_EXPR:
2636 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2637 break;
2638
2639 case INDIRECT_REF:
2640 result = build_nt (INDIRECT_REF,
2641 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2642 break;
2643
2644 case COMPONENT_REF:
2645 result = build_nt (COMPONENT_REF,
2646 stabilize_reference (TREE_OPERAND (ref, 0)),
2647 TREE_OPERAND (ref, 1), NULL_TREE);
2648 break;
2649
2650 case BIT_FIELD_REF:
2651 result = build_nt (BIT_FIELD_REF,
2652 stabilize_reference (TREE_OPERAND (ref, 0)),
2653 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2654 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2655 break;
2656
2657 case ARRAY_REF:
2658 result = build_nt (ARRAY_REF,
2659 stabilize_reference (TREE_OPERAND (ref, 0)),
2660 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2661 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2662 break;
2663
2664 case ARRAY_RANGE_REF:
2665 result = build_nt (ARRAY_RANGE_REF,
2666 stabilize_reference (TREE_OPERAND (ref, 0)),
2667 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2668 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2669 break;
2670
2671 case COMPOUND_EXPR:
2672 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2673 it wouldn't be ignored. This matters when dealing with
2674 volatiles. */
2675 return stabilize_reference_1 (ref);
2676
2677 /* If arg isn't a kind of lvalue we recognize, make no change.
2678 Caller should recognize the error for an invalid lvalue. */
2679 default:
2680 return ref;
2681
2682 case ERROR_MARK:
2683 return error_mark_node;
2684 }
2685
2686 TREE_TYPE (result) = TREE_TYPE (ref);
2687 TREE_READONLY (result) = TREE_READONLY (ref);
2688 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2689 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2690
2691 return result;
2692 }
2693
2694 /* Subroutine of stabilize_reference; this is called for subtrees of
2695 references. Any expression with side-effects must be put in a SAVE_EXPR
2696 to ensure that it is only evaluated once.
2697
2698 We don't put SAVE_EXPR nodes around everything, because assigning very
2699 simple expressions to temporaries causes us to miss good opportunities
2700 for optimizations. Among other things, the opportunity to fold in the
2701 addition of a constant into an addressing mode often gets lost, e.g.
2702 "y[i+1] += x;". In general, we take the approach that we should not make
2703 an assignment unless we are forced into it - i.e., that any non-side effect
2704 operator should be allowed, and that cse should take care of coalescing
2705 multiple utterances of the same expression should that prove fruitful. */
2706
2707 tree
2708 stabilize_reference_1 (tree e)
2709 {
2710 tree result;
2711 enum tree_code code = TREE_CODE (e);
2712
2713 /* We cannot ignore const expressions because it might be a reference
2714 to a const array but whose index contains side-effects. But we can
2715 ignore things that are actual constant or that already have been
2716 handled by this function. */
2717
2718 if (TREE_INVARIANT (e))
2719 return e;
2720
2721 switch (TREE_CODE_CLASS (code))
2722 {
2723 case tcc_exceptional:
2724 case tcc_type:
2725 case tcc_declaration:
2726 case tcc_comparison:
2727 case tcc_statement:
2728 case tcc_expression:
2729 case tcc_reference:
2730 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2731 so that it will only be evaluated once. */
2732 /* The reference (r) and comparison (<) classes could be handled as
2733 below, but it is generally faster to only evaluate them once. */
2734 if (TREE_SIDE_EFFECTS (e))
2735 return save_expr (e);
2736 return e;
2737
2738 case tcc_constant:
2739 /* Constants need no processing. In fact, we should never reach
2740 here. */
2741 return e;
2742
2743 case tcc_binary:
2744 /* Division is slow and tends to be compiled with jumps,
2745 especially the division by powers of 2 that is often
2746 found inside of an array reference. So do it just once. */
2747 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2748 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2749 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2750 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2751 return save_expr (e);
2752 /* Recursively stabilize each operand. */
2753 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2754 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2755 break;
2756
2757 case tcc_unary:
2758 /* Recursively stabilize each operand. */
2759 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2760 break;
2761
2762 default:
2763 gcc_unreachable ();
2764 }
2765
2766 TREE_TYPE (result) = TREE_TYPE (e);
2767 TREE_READONLY (result) = TREE_READONLY (e);
2768 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2769 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2770 TREE_INVARIANT (result) = 1;
2771
2772 return result;
2773 }
2774 \f
2775 /* Low-level constructors for expressions. */
2776
2777 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
2778 TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
2779
2780 void
2781 recompute_tree_invariant_for_addr_expr (tree t)
2782 {
2783 tree node;
2784 bool tc = true, ti = true, se = false;
2785
2786 /* We started out assuming this address is both invariant and constant, but
2787 does not have side effects. Now go down any handled components and see if
2788 any of them involve offsets that are either non-constant or non-invariant.
2789 Also check for side-effects.
2790
2791 ??? Note that this code makes no attempt to deal with the case where
2792 taking the address of something causes a copy due to misalignment. */
2793
2794 #define UPDATE_TITCSE(NODE) \
2795 do { tree _node = (NODE); \
2796 if (_node && !TREE_INVARIANT (_node)) ti = false; \
2797 if (_node && !TREE_CONSTANT (_node)) tc = false; \
2798 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
2799
2800 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
2801 node = TREE_OPERAND (node, 0))
2802 {
2803 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
2804 array reference (probably made temporarily by the G++ front end),
2805 so ignore all the operands. */
2806 if ((TREE_CODE (node) == ARRAY_REF
2807 || TREE_CODE (node) == ARRAY_RANGE_REF)
2808 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
2809 {
2810 UPDATE_TITCSE (TREE_OPERAND (node, 1));
2811 if (TREE_OPERAND (node, 2))
2812 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2813 if (TREE_OPERAND (node, 3))
2814 UPDATE_TITCSE (TREE_OPERAND (node, 3));
2815 }
2816 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
2817 FIELD_DECL, apparently. The G++ front end can put something else
2818 there, at least temporarily. */
2819 else if (TREE_CODE (node) == COMPONENT_REF
2820 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
2821 {
2822 if (TREE_OPERAND (node, 2))
2823 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2824 }
2825 else if (TREE_CODE (node) == BIT_FIELD_REF)
2826 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2827 }
2828
2829 node = lang_hooks.expr_to_decl (node, &tc, &ti, &se);
2830
2831 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
2832 the address, since &(*a)->b is a form of addition. If it's a decl, it's
2833 invariant and constant if the decl is static. It's also invariant if it's
2834 a decl in the current function. Taking the address of a volatile variable
2835 is not volatile. If it's a constant, the address is both invariant and
2836 constant. Otherwise it's neither. */
2837 if (TREE_CODE (node) == INDIRECT_REF)
2838 UPDATE_TITCSE (TREE_OPERAND (node, 0));
2839 else if (DECL_P (node))
2840 {
2841 if (staticp (node))
2842 ;
2843 else if (decl_function_context (node) == current_function_decl
2844 /* Addresses of thread-local variables are invariant. */
2845 || (TREE_CODE (node) == VAR_DECL
2846 && DECL_THREAD_LOCAL_P (node)))
2847 tc = false;
2848 else
2849 ti = tc = false;
2850 }
2851 else if (CONSTANT_CLASS_P (node))
2852 ;
2853 else
2854 {
2855 ti = tc = false;
2856 se |= TREE_SIDE_EFFECTS (node);
2857 }
2858
2859 TREE_CONSTANT (t) = tc;
2860 TREE_INVARIANT (t) = ti;
2861 TREE_SIDE_EFFECTS (t) = se;
2862 #undef UPDATE_TITCSE
2863 }
2864
2865 /* Build an expression of code CODE, data type TYPE, and operands as
2866 specified. Expressions and reference nodes can be created this way.
2867 Constants, decls, types and misc nodes cannot be.
2868
2869 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2870 enough for all extant tree codes. */
2871
2872 tree
2873 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2874 {
2875 tree t;
2876
2877 gcc_assert (TREE_CODE_LENGTH (code) == 0);
2878
2879 t = make_node_stat (code PASS_MEM_STAT);
2880 TREE_TYPE (t) = tt;
2881
2882 return t;
2883 }
2884
2885 tree
2886 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2887 {
2888 int length = sizeof (struct tree_exp);
2889 #ifdef GATHER_STATISTICS
2890 tree_node_kind kind;
2891 #endif
2892 tree t;
2893
2894 #ifdef GATHER_STATISTICS
2895 switch (TREE_CODE_CLASS (code))
2896 {
2897 case tcc_statement: /* an expression with side effects */
2898 kind = s_kind;
2899 break;
2900 case tcc_reference: /* a reference */
2901 kind = r_kind;
2902 break;
2903 default:
2904 kind = e_kind;
2905 break;
2906 }
2907
2908 tree_node_counts[(int) kind]++;
2909 tree_node_sizes[(int) kind] += length;
2910 #endif
2911
2912 gcc_assert (TREE_CODE_LENGTH (code) == 1);
2913
2914 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
2915
2916 memset (t, 0, sizeof (struct tree_common));
2917
2918 TREE_SET_CODE (t, code);
2919
2920 TREE_TYPE (t) = type;
2921 #ifdef USE_MAPPED_LOCATION
2922 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2923 #else
2924 SET_EXPR_LOCUS (t, NULL);
2925 #endif
2926 TREE_OPERAND (t, 0) = node;
2927 TREE_BLOCK (t) = NULL_TREE;
2928 if (node && !TYPE_P (node))
2929 {
2930 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2931 TREE_READONLY (t) = TREE_READONLY (node);
2932 }
2933
2934 if (TREE_CODE_CLASS (code) == tcc_statement)
2935 TREE_SIDE_EFFECTS (t) = 1;
2936 else switch (code)
2937 {
2938 case VA_ARG_EXPR:
2939 /* All of these have side-effects, no matter what their
2940 operands are. */
2941 TREE_SIDE_EFFECTS (t) = 1;
2942 TREE_READONLY (t) = 0;
2943 break;
2944
2945 case MISALIGNED_INDIRECT_REF:
2946 case ALIGN_INDIRECT_REF:
2947 case INDIRECT_REF:
2948 /* Whether a dereference is readonly has nothing to do with whether
2949 its operand is readonly. */
2950 TREE_READONLY (t) = 0;
2951 break;
2952
2953 case ADDR_EXPR:
2954 if (node)
2955 recompute_tree_invariant_for_addr_expr (t);
2956 break;
2957
2958 default:
2959 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
2960 && node && !TYPE_P (node)
2961 && TREE_CONSTANT (node))
2962 TREE_CONSTANT (t) = 1;
2963 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
2964 && node && TREE_INVARIANT (node))
2965 TREE_INVARIANT (t) = 1;
2966 if (TREE_CODE_CLASS (code) == tcc_reference
2967 && node && TREE_THIS_VOLATILE (node))
2968 TREE_THIS_VOLATILE (t) = 1;
2969 break;
2970 }
2971
2972 return t;
2973 }
2974
2975 #define PROCESS_ARG(N) \
2976 do { \
2977 TREE_OPERAND (t, N) = arg##N; \
2978 if (arg##N &&!TYPE_P (arg##N)) \
2979 { \
2980 if (TREE_SIDE_EFFECTS (arg##N)) \
2981 side_effects = 1; \
2982 if (!TREE_READONLY (arg##N)) \
2983 read_only = 0; \
2984 if (!TREE_CONSTANT (arg##N)) \
2985 constant = 0; \
2986 if (!TREE_INVARIANT (arg##N)) \
2987 invariant = 0; \
2988 } \
2989 } while (0)
2990
2991 tree
2992 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2993 {
2994 bool constant, read_only, side_effects, invariant;
2995 tree t;
2996
2997 gcc_assert (TREE_CODE_LENGTH (code) == 2);
2998
2999 if (code == MODIFY_EXPR && cfun && cfun->gimplified)
3000 {
3001 /* We should be talking GIMPLE_MODIFY_STMT by now. */
3002 gcc_unreachable ();
3003 }
3004
3005 /* FIXME tuples: For now let's be lazy; later we must rewrite all
3006 build2 calls to build2_gimple calls. */
3007 if (TREE_CODE_CLASS (code) == tcc_gimple_stmt)
3008 return build2_gimple (code, arg0, arg1);
3009
3010 t = make_node_stat (code PASS_MEM_STAT);
3011 TREE_TYPE (t) = tt;
3012
3013 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
3014 result based on those same flags for the arguments. But if the
3015 arguments aren't really even `tree' expressions, we shouldn't be trying
3016 to do this. */
3017
3018 /* Expressions without side effects may be constant if their
3019 arguments are as well. */
3020 constant = (TREE_CODE_CLASS (code) == tcc_comparison
3021 || TREE_CODE_CLASS (code) == tcc_binary);
3022 read_only = 1;
3023 side_effects = TREE_SIDE_EFFECTS (t);
3024 invariant = constant;
3025
3026 PROCESS_ARG(0);
3027 PROCESS_ARG(1);
3028
3029 TREE_READONLY (t) = read_only;
3030 TREE_CONSTANT (t) = constant;
3031 TREE_INVARIANT (t) = invariant;
3032 TREE_SIDE_EFFECTS (t) = side_effects;
3033 TREE_THIS_VOLATILE (t)
3034 = (TREE_CODE_CLASS (code) == tcc_reference
3035 && arg0 && TREE_THIS_VOLATILE (arg0));
3036
3037 return t;
3038 }
3039
3040
3041 /* Similar as build2_stat, but for GIMPLE tuples. For convenience's sake,
3042 arguments and return type are trees. */
3043
3044 tree
3045 build2_gimple_stat (enum tree_code code, tree arg0, tree arg1 MEM_STAT_DECL)
3046 {
3047 bool side_effects;
3048 tree t;
3049
3050 gcc_assert (TREE_CODE_LENGTH (code) == 2);
3051
3052 t = make_node_stat (code PASS_MEM_STAT);
3053
3054 side_effects = TREE_SIDE_EFFECTS (t);
3055
3056 /* ?? We don't care about setting flags for tuples... */
3057 GIMPLE_STMT_OPERAND (t, 0) = arg0;
3058 GIMPLE_STMT_OPERAND (t, 1) = arg1;
3059
3060 /* ...except perhaps side_effects and volatility. ?? */
3061 TREE_SIDE_EFFECTS (t) = side_effects;
3062 TREE_THIS_VOLATILE (t) = (TREE_CODE_CLASS (code) == tcc_reference
3063 && arg0 && TREE_THIS_VOLATILE (arg0));
3064
3065
3066 return t;
3067 }
3068
3069 tree
3070 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3071 tree arg2 MEM_STAT_DECL)
3072 {
3073 bool constant, read_only, side_effects, invariant;
3074 tree t;
3075
3076 gcc_assert (TREE_CODE_LENGTH (code) == 3);
3077
3078 t = make_node_stat (code PASS_MEM_STAT);
3079 TREE_TYPE (t) = tt;
3080
3081 side_effects = TREE_SIDE_EFFECTS (t);
3082
3083 PROCESS_ARG(0);
3084 PROCESS_ARG(1);
3085 PROCESS_ARG(2);
3086
3087 if (code == CALL_EXPR && !side_effects)
3088 {
3089 tree node;
3090 int i;
3091
3092 /* Calls have side-effects, except those to const or
3093 pure functions. */
3094 i = call_expr_flags (t);
3095 if (!(i & (ECF_CONST | ECF_PURE)))
3096 side_effects = 1;
3097
3098 /* And even those have side-effects if their arguments do. */
3099 else for (node = arg1; node; node = TREE_CHAIN (node))
3100 if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
3101 {
3102 side_effects = 1;
3103 break;
3104 }
3105 }
3106
3107 TREE_SIDE_EFFECTS (t) = side_effects;
3108 TREE_THIS_VOLATILE (t)
3109 = (TREE_CODE_CLASS (code) == tcc_reference
3110 && arg0 && TREE_THIS_VOLATILE (arg0));
3111
3112 return t;
3113 }
3114
3115 tree
3116 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3117 tree arg2, tree arg3 MEM_STAT_DECL)
3118 {
3119 bool constant, read_only, side_effects, invariant;
3120 tree t;
3121
3122 gcc_assert (TREE_CODE_LENGTH (code) == 4);
3123
3124 t = make_node_stat (code PASS_MEM_STAT);
3125 TREE_TYPE (t) = tt;
3126
3127 side_effects = TREE_SIDE_EFFECTS (t);
3128
3129 PROCESS_ARG(0);
3130 PROCESS_ARG(1);
3131 PROCESS_ARG(2);
3132 PROCESS_ARG(3);
3133
3134 TREE_SIDE_EFFECTS (t) = side_effects;
3135 TREE_THIS_VOLATILE (t)
3136 = (TREE_CODE_CLASS (code) == tcc_reference
3137 && arg0 && TREE_THIS_VOLATILE (arg0));
3138
3139 return t;
3140 }
3141
3142 tree
3143 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3144 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
3145 {
3146 bool constant, read_only, side_effects, invariant;
3147 tree t;
3148
3149 gcc_assert (TREE_CODE_LENGTH (code) == 5);
3150
3151 t = make_node_stat (code PASS_MEM_STAT);
3152 TREE_TYPE (t) = tt;
3153
3154 side_effects = TREE_SIDE_EFFECTS (t);
3155
3156 PROCESS_ARG(0);
3157 PROCESS_ARG(1);
3158 PROCESS_ARG(2);
3159 PROCESS_ARG(3);
3160 PROCESS_ARG(4);
3161
3162 TREE_SIDE_EFFECTS (t) = side_effects;
3163 TREE_THIS_VOLATILE (t)
3164 = (TREE_CODE_CLASS (code) == tcc_reference
3165 && arg0 && TREE_THIS_VOLATILE (arg0));
3166
3167 return t;
3168 }
3169
3170 tree
3171 build7_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3172 tree arg2, tree arg3, tree arg4, tree arg5,
3173 tree arg6 MEM_STAT_DECL)
3174 {
3175 bool constant, read_only, side_effects, invariant;
3176 tree t;
3177
3178 gcc_assert (code == TARGET_MEM_REF);
3179
3180 t = make_node_stat (code PASS_MEM_STAT);
3181 TREE_TYPE (t) = tt;
3182
3183 side_effects = TREE_SIDE_EFFECTS (t);
3184
3185 PROCESS_ARG(0);
3186 PROCESS_ARG(1);
3187 PROCESS_ARG(2);
3188 PROCESS_ARG(3);
3189 PROCESS_ARG(4);
3190 PROCESS_ARG(5);
3191 PROCESS_ARG(6);
3192
3193 TREE_SIDE_EFFECTS (t) = side_effects;
3194 TREE_THIS_VOLATILE (t) = 0;
3195
3196 return t;
3197 }
3198
3199 /* Similar except don't specify the TREE_TYPE
3200 and leave the TREE_SIDE_EFFECTS as 0.
3201 It is permissible for arguments to be null,
3202 or even garbage if their values do not matter. */
3203
3204 tree
3205 build_nt (enum tree_code code, ...)
3206 {
3207 tree t;
3208 int length;
3209 int i;
3210 va_list p;
3211
3212 va_start (p, code);
3213
3214 t = make_node (code);
3215 length = TREE_CODE_LENGTH (code);
3216
3217 for (i = 0; i < length; i++)
3218 TREE_OPERAND (t, i) = va_arg (p, tree);
3219
3220 va_end (p);
3221 return t;
3222 }
3223 \f
3224 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3225 We do NOT enter this node in any sort of symbol table.
3226
3227 layout_decl is used to set up the decl's storage layout.
3228 Other slots are initialized to 0 or null pointers. */
3229
3230 tree
3231 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
3232 {
3233 tree t;
3234
3235 t = make_node_stat (code PASS_MEM_STAT);
3236
3237 /* if (type == error_mark_node)
3238 type = integer_type_node; */
3239 /* That is not done, deliberately, so that having error_mark_node
3240 as the type can suppress useless errors in the use of this variable. */
3241
3242 DECL_NAME (t) = name;
3243 TREE_TYPE (t) = type;
3244
3245 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3246 layout_decl (t, 0);
3247 else if (code == FUNCTION_DECL)
3248 DECL_MODE (t) = FUNCTION_MODE;
3249
3250 return t;
3251 }
3252
3253 /* Builds and returns function declaration with NAME and TYPE. */
3254
3255 tree
3256 build_fn_decl (const char *name, tree type)
3257 {
3258 tree id = get_identifier (name);
3259 tree decl = build_decl (FUNCTION_DECL, id, type);
3260
3261 DECL_EXTERNAL (decl) = 1;
3262 TREE_PUBLIC (decl) = 1;
3263 DECL_ARTIFICIAL (decl) = 1;
3264 TREE_NOTHROW (decl) = 1;
3265
3266 return decl;
3267 }
3268
3269 \f
3270 /* BLOCK nodes are used to represent the structure of binding contours
3271 and declarations, once those contours have been exited and their contents
3272 compiled. This information is used for outputting debugging info. */
3273
3274 tree
3275 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
3276 {
3277 tree block = make_node (BLOCK);
3278
3279 BLOCK_VARS (block) = vars;
3280 BLOCK_SUBBLOCKS (block) = subblocks;
3281 BLOCK_SUPERCONTEXT (block) = supercontext;
3282 BLOCK_CHAIN (block) = chain;
3283 return block;
3284 }
3285
3286 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
3287 /* ??? gengtype doesn't handle conditionals */
3288 static GTY(()) source_locus last_annotated_node;
3289 #endif
3290
3291 #ifdef USE_MAPPED_LOCATION
3292
3293 expanded_location
3294 expand_location (source_location loc)
3295 {
3296 expanded_location xloc;
3297 if (loc == 0)
3298 {
3299 xloc.file = NULL;
3300 xloc.line = 0;
3301 xloc.column = 0;
3302 }
3303 else
3304 {
3305 const struct line_map *map = linemap_lookup (&line_table, loc);
3306 xloc.file = map->to_file;
3307 xloc.line = SOURCE_LINE (map, loc);
3308 xloc.column = SOURCE_COLUMN (map, loc);
3309 };
3310 return xloc;
3311 }
3312
3313 #else
3314
3315 /* Record the exact location where an expression or an identifier were
3316 encountered. */
3317
3318 void
3319 annotate_with_file_line (tree node, const char *file, int line)
3320 {
3321 /* Roughly one percent of the calls to this function are to annotate
3322 a node with the same information already attached to that node!
3323 Just return instead of wasting memory. */
3324 if (EXPR_LOCUS (node)
3325 && EXPR_LINENO (node) == line
3326 && (EXPR_FILENAME (node) == file
3327 || !strcmp (EXPR_FILENAME (node), file)))
3328 {
3329 last_annotated_node = EXPR_LOCUS (node);
3330 return;
3331 }
3332
3333 /* In heavily macroized code (such as GCC itself) this single
3334 entry cache can reduce the number of allocations by more
3335 than half. */
3336 if (last_annotated_node
3337 && last_annotated_node->line == line
3338 && (last_annotated_node->file == file
3339 || !strcmp (last_annotated_node->file, file)))
3340 {
3341 SET_EXPR_LOCUS (node, last_annotated_node);
3342 return;
3343 }
3344
3345 SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
3346 EXPR_LINENO (node) = line;
3347 EXPR_FILENAME (node) = file;
3348 last_annotated_node = EXPR_LOCUS (node);
3349 }
3350
3351 void
3352 annotate_with_locus (tree node, location_t locus)
3353 {
3354 annotate_with_file_line (node, locus.file, locus.line);
3355 }
3356 #endif
3357 \f
3358 /* Source location accessor functions. */
3359
3360
3361 /* The source location of this expression. Non-tree_exp nodes such as
3362 decls and constants can be shared among multiple locations, so
3363 return nothing. */
3364 location_t
3365 expr_location (tree node)
3366 {
3367 #ifdef USE_MAPPED_LOCATION
3368 if (GIMPLE_STMT_P (node))
3369 return GIMPLE_STMT_LOCUS (node);
3370 return EXPR_P (node) ? node->exp.locus : UNKNOWN_LOCATION;
3371 #else
3372 if (GIMPLE_STMT_P (node))
3373 return EXPR_HAS_LOCATION (node)
3374 ? *GIMPLE_STMT_LOCUS (node) : UNKNOWN_LOCATION;
3375 return EXPR_HAS_LOCATION (node) ? *node->exp.locus : UNKNOWN_LOCATION;
3376 #endif
3377 }
3378
3379 void
3380 set_expr_location (tree node, location_t locus)
3381 {
3382 #ifdef USE_MAPPED_LOCATION
3383 if (GIMPLE_STMT_P (node))
3384 GIMPLE_STMT_LOCUS (node) = locus;
3385 else
3386 EXPR_CHECK (node)->exp.locus = locus;
3387 #else
3388 annotate_with_locus (node, locus);
3389 #endif
3390 }
3391
3392 bool
3393 expr_has_location (tree node)
3394 {
3395 #ifdef USE_MAPPED_LOCATION
3396 return expr_location (node) != UNKNOWN_LOCATION;
3397 #else
3398 return expr_locus (node) != NULL;
3399 #endif
3400 }
3401
3402 #ifdef USE_MAPPED_LOCATION
3403 source_location *
3404 #else
3405 source_locus
3406 #endif
3407 expr_locus (tree node)
3408 {
3409 #ifdef USE_MAPPED_LOCATION
3410 if (GIMPLE_STMT_P (node))
3411 return &GIMPLE_STMT_LOCUS (node);
3412 return EXPR_P (node) ? &node->exp.locus : (location_t *) NULL;
3413 #else
3414 if (GIMPLE_STMT_P (node))
3415 return GIMPLE_STMT_LOCUS (node);
3416 /* ?? The cast below was originally "(location_t *)" in the macro,
3417 but that makes no sense. ?? */
3418 return EXPR_P (node) ? node->exp.locus : (source_locus) NULL;
3419 #endif
3420 }
3421
3422 void
3423 set_expr_locus (tree node,
3424 #ifdef USE_MAPPED_LOCATION
3425 source_location *loc
3426 #else
3427 source_locus loc
3428 #endif
3429 )
3430 {
3431 #ifdef USE_MAPPED_LOCATION
3432 if (loc == NULL)
3433 {
3434 if (GIMPLE_STMT_P (node))
3435 GIMPLE_STMT_LOCUS (node) = UNKNOWN_LOCATION;
3436 else
3437 EXPR_CHECK (node)->exp.locus = UNKNOWN_LOCATION;
3438 }
3439 else
3440 {
3441 if (GIMPLE_STMT_P (node))
3442 GIMPLE_STMT_LOCUS (node) = *loc;
3443 else
3444 EXPR_CHECK (node)->exp.locus = *loc;
3445 }
3446 #else
3447 if (GIMPLE_STMT_P (node))
3448 GIMPLE_STMT_LOCUS (node) = loc;
3449 else
3450 EXPR_CHECK (node)->exp.locus = loc;
3451 #endif
3452 }
3453
3454 const char **
3455 expr_filename (tree node)
3456 {
3457 #ifdef USE_MAPPED_LOCATION
3458 if (GIMPLE_STMT_P (node))
3459 return &LOCATION_FILE (GIMPLE_STMT_LOCUS (node));
3460 return &LOCATION_FILE (EXPR_CHECK (node)->exp.locus);
3461 #else
3462 if (GIMPLE_STMT_P (node))
3463 return &GIMPLE_STMT_LOCUS (node)->file;
3464 return &(EXPR_CHECK (node)->exp.locus->file);
3465 #endif
3466 }
3467
3468 int *
3469 expr_lineno (tree node)
3470 {
3471 #ifdef USE_MAPPED_LOCATION
3472 if (GIMPLE_STMT_P (node))
3473 return &LOCATION_LINE (GIMPLE_STMT_LOCUS (node));
3474 return &LOCATION_LINE (EXPR_CHECK (node)->exp.locus);
3475 #else
3476 if (GIMPLE_STMT_P (node))
3477 return &GIMPLE_STMT_LOCUS (node)->line;
3478 return &EXPR_CHECK (node)->exp.locus->line;
3479 #endif
3480 }
3481 \f
3482 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
3483 is ATTRIBUTE. */
3484
3485 tree
3486 build_decl_attribute_variant (tree ddecl, tree attribute)
3487 {
3488 DECL_ATTRIBUTES (ddecl) = attribute;
3489 return ddecl;
3490 }
3491
3492 /* Borrowed from hashtab.c iterative_hash implementation. */
3493 #define mix(a,b,c) \
3494 { \
3495 a -= b; a -= c; a ^= (c>>13); \
3496 b -= c; b -= a; b ^= (a<< 8); \
3497 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
3498 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
3499 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
3500 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
3501 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
3502 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
3503 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
3504 }
3505
3506
3507 /* Produce good hash value combining VAL and VAL2. */
3508 static inline hashval_t
3509 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
3510 {
3511 /* the golden ratio; an arbitrary value. */
3512 hashval_t a = 0x9e3779b9;
3513
3514 mix (a, val, val2);
3515 return val2;
3516 }
3517
3518 /* Produce good hash value combining PTR and VAL2. */
3519 static inline hashval_t
3520 iterative_hash_pointer (void *ptr, hashval_t val2)
3521 {
3522 if (sizeof (ptr) == sizeof (hashval_t))
3523 return iterative_hash_hashval_t ((size_t) ptr, val2);
3524 else
3525 {
3526 hashval_t a = (hashval_t) (size_t) ptr;
3527 /* Avoid warnings about shifting of more than the width of the type on
3528 hosts that won't execute this path. */
3529 int zero = 0;
3530 hashval_t b = (hashval_t) ((size_t) ptr >> (sizeof (hashval_t) * 8 + zero));
3531 mix (a, b, val2);
3532 return val2;
3533 }
3534 }
3535
3536 /* Produce good hash value combining VAL and VAL2. */
3537 static inline hashval_t
3538 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
3539 {
3540 if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
3541 return iterative_hash_hashval_t (val, val2);
3542 else
3543 {
3544 hashval_t a = (hashval_t) val;
3545 /* Avoid warnings about shifting of more than the width of the type on
3546 hosts that won't execute this path. */
3547 int zero = 0;
3548 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
3549 mix (a, b, val2);
3550 if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
3551 {
3552 hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
3553 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
3554 mix (a, b, val2);
3555 }
3556 return val2;
3557 }
3558 }
3559
3560 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3561 is ATTRIBUTE and its qualifiers are QUALS.
3562
3563 Record such modified types already made so we don't make duplicates. */
3564
3565 static tree
3566 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
3567 {
3568 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3569 {
3570 hashval_t hashcode = 0;
3571 tree ntype;
3572 enum tree_code code = TREE_CODE (ttype);
3573
3574 ntype = copy_node (ttype);
3575
3576 TYPE_POINTER_TO (ntype) = 0;
3577 TYPE_REFERENCE_TO (ntype) = 0;
3578 TYPE_ATTRIBUTES (ntype) = attribute;
3579
3580 if (TYPE_STRUCTURAL_EQUALITY_P (ttype))
3581 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
3582 else
3583 TYPE_CANONICAL (ntype)
3584 = build_qualified_type (TYPE_CANONICAL (ttype), quals);
3585
3586 /* Create a new main variant of TYPE. */
3587 TYPE_MAIN_VARIANT (ntype) = ntype;
3588 TYPE_NEXT_VARIANT (ntype) = 0;
3589 set_type_quals (ntype, TYPE_UNQUALIFIED);
3590
3591 hashcode = iterative_hash_object (code, hashcode);
3592 if (TREE_TYPE (ntype))
3593 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
3594 hashcode);
3595 hashcode = attribute_hash_list (attribute, hashcode);
3596
3597 switch (TREE_CODE (ntype))
3598 {
3599 case FUNCTION_TYPE:
3600 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
3601 break;
3602 case ARRAY_TYPE:
3603 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
3604 hashcode);
3605 break;
3606 case INTEGER_TYPE:
3607 hashcode = iterative_hash_object
3608 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
3609 hashcode = iterative_hash_object
3610 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
3611 break;
3612 case REAL_TYPE:
3613 {
3614 unsigned int precision = TYPE_PRECISION (ntype);
3615 hashcode = iterative_hash_object (precision, hashcode);
3616 }
3617 break;
3618 default:
3619 break;
3620 }
3621
3622 ntype = type_hash_canon (hashcode, ntype);
3623
3624 /* If the target-dependent attributes make NTYPE different from
3625 its canonical type, we will need to use structural equality
3626 checks for this qualified type. */
3627 if (!targetm.comp_type_attributes (ntype, ttype))
3628 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
3629
3630 ttype = build_qualified_type (ntype, quals);
3631 }
3632
3633 return ttype;
3634 }
3635
3636
3637 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3638 is ATTRIBUTE.
3639
3640 Record such modified types already made so we don't make duplicates. */
3641
3642 tree
3643 build_type_attribute_variant (tree ttype, tree attribute)
3644 {
3645 return build_type_attribute_qual_variant (ttype, attribute,
3646 TYPE_QUALS (ttype));
3647 }
3648
3649 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3650 or zero if not.
3651
3652 We try both `text' and `__text__', ATTR may be either one. */
3653 /* ??? It might be a reasonable simplification to require ATTR to be only
3654 `text'. One might then also require attribute lists to be stored in
3655 their canonicalized form. */
3656
3657 static int
3658 is_attribute_with_length_p (const char *attr, int attr_len, tree ident)
3659 {
3660 int ident_len;
3661 const char *p;
3662
3663 if (TREE_CODE (ident) != IDENTIFIER_NODE)
3664 return 0;
3665
3666 p = IDENTIFIER_POINTER (ident);
3667 ident_len = IDENTIFIER_LENGTH (ident);
3668
3669 if (ident_len == attr_len
3670 && strcmp (attr, p) == 0)
3671 return 1;
3672
3673 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
3674 if (attr[0] == '_')
3675 {
3676 gcc_assert (attr[1] == '_');
3677 gcc_assert (attr[attr_len - 2] == '_');
3678 gcc_assert (attr[attr_len - 1] == '_');
3679 if (ident_len == attr_len - 4
3680 && strncmp (attr + 2, p, attr_len - 4) == 0)
3681 return 1;
3682 }
3683 else
3684 {
3685 if (ident_len == attr_len + 4
3686 && p[0] == '_' && p[1] == '_'
3687 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3688 && strncmp (attr, p + 2, attr_len) == 0)
3689 return 1;
3690 }
3691
3692 return 0;
3693 }
3694
3695 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3696 or zero if not.
3697
3698 We try both `text' and `__text__', ATTR may be either one. */
3699
3700 int
3701 is_attribute_p (const char *attr, tree ident)
3702 {
3703 return is_attribute_with_length_p (attr, strlen (attr), ident);
3704 }
3705
3706 /* Given an attribute name and a list of attributes, return a pointer to the
3707 attribute's list element if the attribute is part of the list, or NULL_TREE
3708 if not found. If the attribute appears more than once, this only
3709 returns the first occurrence; the TREE_CHAIN of the return value should
3710 be passed back in if further occurrences are wanted. */
3711
3712 tree
3713 lookup_attribute (const char *attr_name, tree list)
3714 {
3715 tree l;
3716 size_t attr_len = strlen (attr_name);
3717
3718 for (l = list; l; l = TREE_CHAIN (l))
3719 {
3720 gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3721 if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3722 return l;
3723 }
3724
3725 return NULL_TREE;
3726 }
3727
3728 /* Remove any instances of attribute ATTR_NAME in LIST and return the
3729 modified list. */
3730
3731 tree
3732 remove_attribute (const char *attr_name, tree list)
3733 {
3734 tree *p;
3735 size_t attr_len = strlen (attr_name);
3736
3737 for (p = &list; *p; )
3738 {
3739 tree l = *p;
3740 gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3741 if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3742 *p = TREE_CHAIN (l);
3743 else
3744 p = &TREE_CHAIN (l);
3745 }
3746
3747 return list;
3748 }
3749
3750 /* Return an attribute list that is the union of a1 and a2. */
3751
3752 tree
3753 merge_attributes (tree a1, tree a2)
3754 {
3755 tree attributes;
3756
3757 /* Either one unset? Take the set one. */
3758
3759 if ((attributes = a1) == 0)
3760 attributes = a2;
3761
3762 /* One that completely contains the other? Take it. */
3763
3764 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3765 {
3766 if (attribute_list_contained (a2, a1))
3767 attributes = a2;
3768 else
3769 {
3770 /* Pick the longest list, and hang on the other list. */
3771
3772 if (list_length (a1) < list_length (a2))
3773 attributes = a2, a2 = a1;
3774
3775 for (; a2 != 0; a2 = TREE_CHAIN (a2))
3776 {
3777 tree a;
3778 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3779 attributes);
3780 a != NULL_TREE;
3781 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3782 TREE_CHAIN (a)))
3783 {
3784 if (TREE_VALUE (a) != NULL
3785 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
3786 && TREE_VALUE (a2) != NULL
3787 && TREE_CODE (TREE_VALUE (a2)) == TREE_LIST)
3788 {
3789 if (simple_cst_list_equal (TREE_VALUE (a),
3790 TREE_VALUE (a2)) == 1)
3791 break;
3792 }
3793 else if (simple_cst_equal (TREE_VALUE (a),
3794 TREE_VALUE (a2)) == 1)
3795 break;
3796 }
3797 if (a == NULL_TREE)
3798 {
3799 a1 = copy_node (a2);
3800 TREE_CHAIN (a1) = attributes;
3801 attributes = a1;
3802 }
3803 }
3804 }
3805 }
3806 return attributes;
3807 }
3808
3809 /* Given types T1 and T2, merge their attributes and return
3810 the result. */
3811
3812 tree
3813 merge_type_attributes (tree t1, tree t2)
3814 {
3815 return merge_attributes (TYPE_ATTRIBUTES (t1),
3816 TYPE_ATTRIBUTES (t2));
3817 }
3818
3819 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3820 the result. */
3821
3822 tree
3823 merge_decl_attributes (tree olddecl, tree newdecl)
3824 {
3825 return merge_attributes (DECL_ATTRIBUTES (olddecl),
3826 DECL_ATTRIBUTES (newdecl));
3827 }
3828
3829 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3830
3831 /* Specialization of merge_decl_attributes for various Windows targets.
3832
3833 This handles the following situation:
3834
3835 __declspec (dllimport) int foo;
3836 int foo;
3837
3838 The second instance of `foo' nullifies the dllimport. */
3839
3840 tree
3841 merge_dllimport_decl_attributes (tree old, tree new)
3842 {
3843 tree a;
3844 int delete_dllimport_p = 1;
3845
3846 /* What we need to do here is remove from `old' dllimport if it doesn't
3847 appear in `new'. dllimport behaves like extern: if a declaration is
3848 marked dllimport and a definition appears later, then the object
3849 is not dllimport'd. We also remove a `new' dllimport if the old list
3850 contains dllexport: dllexport always overrides dllimport, regardless
3851 of the order of declaration. */
3852 if (!VAR_OR_FUNCTION_DECL_P (new))
3853 delete_dllimport_p = 0;
3854 else if (DECL_DLLIMPORT_P (new)
3855 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
3856 {
3857 DECL_DLLIMPORT_P (new) = 0;
3858 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
3859 "dllimport ignored", new);
3860 }
3861 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new))
3862 {
3863 /* Warn about overriding a symbol that has already been used. eg:
3864 extern int __attribute__ ((dllimport)) foo;
3865 int* bar () {return &foo;}
3866 int foo;
3867 */
3868 if (TREE_USED (old))
3869 {
3870 warning (0, "%q+D redeclared without dllimport attribute "
3871 "after being referenced with dll linkage", new);
3872 /* If we have used a variable's address with dllimport linkage,
3873 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
3874 decl may already have had TREE_INVARIANT and TREE_CONSTANT
3875 computed.
3876 We still remove the attribute so that assembler code refers
3877 to '&foo rather than '_imp__foo'. */
3878 if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
3879 DECL_DLLIMPORT_P (new) = 1;
3880 }
3881
3882 /* Let an inline definition silently override the external reference,
3883 but otherwise warn about attribute inconsistency. */
3884 else if (TREE_CODE (new) == VAR_DECL
3885 || !DECL_DECLARED_INLINE_P (new))
3886 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
3887 "previous dllimport ignored", new);
3888 }
3889 else
3890 delete_dllimport_p = 0;
3891
3892 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new));
3893
3894 if (delete_dllimport_p)
3895 {
3896 tree prev, t;
3897 const size_t attr_len = strlen ("dllimport");
3898
3899 /* Scan the list for dllimport and delete it. */
3900 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3901 {
3902 if (is_attribute_with_length_p ("dllimport", attr_len,
3903 TREE_PURPOSE (t)))
3904 {
3905 if (prev == NULL_TREE)
3906 a = TREE_CHAIN (a);
3907 else
3908 TREE_CHAIN (prev) = TREE_CHAIN (t);
3909 break;
3910 }
3911 }
3912 }
3913
3914 return a;
3915 }
3916
3917 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
3918 struct attribute_spec.handler. */
3919
3920 tree
3921 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
3922 bool *no_add_attrs)
3923 {
3924 tree node = *pnode;
3925
3926 /* These attributes may apply to structure and union types being created,
3927 but otherwise should pass to the declaration involved. */
3928 if (!DECL_P (node))
3929 {
3930 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
3931 | (int) ATTR_FLAG_ARRAY_NEXT))
3932 {
3933 *no_add_attrs = true;
3934 return tree_cons (name, args, NULL_TREE);
3935 }
3936 if (TREE_CODE (node) != RECORD_TYPE && TREE_CODE (node) != UNION_TYPE)
3937 {
3938 warning (OPT_Wattributes, "%qs attribute ignored",
3939 IDENTIFIER_POINTER (name));
3940 *no_add_attrs = true;
3941 }
3942
3943 return NULL_TREE;
3944 }
3945
3946 if (TREE_CODE (node) != FUNCTION_DECL
3947 && TREE_CODE (node) != VAR_DECL)
3948 {
3949 *no_add_attrs = true;
3950 warning (OPT_Wattributes, "%qs attribute ignored",
3951 IDENTIFIER_POINTER (name));
3952 return NULL_TREE;
3953 }
3954
3955 /* Report error on dllimport ambiguities seen now before they cause
3956 any damage. */
3957 else if (is_attribute_p ("dllimport", name))
3958 {
3959 /* Honor any target-specific overrides. */
3960 if (!targetm.valid_dllimport_attribute_p (node))
3961 *no_add_attrs = true;
3962
3963 else if (TREE_CODE (node) == FUNCTION_DECL
3964 && DECL_DECLARED_INLINE_P (node))
3965 {
3966 warning (OPT_Wattributes, "inline function %q+D declared as "
3967 " dllimport: attribute ignored", node);
3968 *no_add_attrs = true;
3969 }
3970 /* Like MS, treat definition of dllimported variables and
3971 non-inlined functions on declaration as syntax errors. */
3972 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
3973 {
3974 error ("function %q+D definition is marked dllimport", node);
3975 *no_add_attrs = true;
3976 }
3977
3978 else if (TREE_CODE (node) == VAR_DECL)
3979 {
3980 if (DECL_INITIAL (node))
3981 {
3982 error ("variable %q+D definition is marked dllimport",
3983 node);
3984 *no_add_attrs = true;
3985 }
3986
3987 /* `extern' needn't be specified with dllimport.
3988 Specify `extern' now and hope for the best. Sigh. */
3989 DECL_EXTERNAL (node) = 1;
3990 /* Also, implicitly give dllimport'd variables declared within
3991 a function global scope, unless declared static. */
3992 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
3993 TREE_PUBLIC (node) = 1;
3994 }
3995
3996 if (*no_add_attrs == false)
3997 DECL_DLLIMPORT_P (node) = 1;
3998 }
3999
4000 /* Report error if symbol is not accessible at global scope. */
4001 if (!TREE_PUBLIC (node)
4002 && (TREE_CODE (node) == VAR_DECL
4003 || TREE_CODE (node) == FUNCTION_DECL))
4004 {
4005 error ("external linkage required for symbol %q+D because of "
4006 "%qs attribute", node, IDENTIFIER_POINTER (name));
4007 *no_add_attrs = true;
4008 }
4009
4010 return NULL_TREE;
4011 }
4012
4013 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
4014 \f
4015 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
4016 of the various TYPE_QUAL values. */
4017
4018 static void
4019 set_type_quals (tree type, int type_quals)
4020 {
4021 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
4022 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
4023 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
4024 }
4025
4026 /* Returns true iff cand is equivalent to base with type_quals. */
4027
4028 bool
4029 check_qualified_type (tree cand, tree base, int type_quals)
4030 {
4031 return (TYPE_QUALS (cand) == type_quals
4032 && TYPE_NAME (cand) == TYPE_NAME (base)
4033 /* Apparently this is needed for Objective-C. */
4034 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
4035 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
4036 TYPE_ATTRIBUTES (base)));
4037 }
4038
4039 /* Return a version of the TYPE, qualified as indicated by the
4040 TYPE_QUALS, if one exists. If no qualified version exists yet,
4041 return NULL_TREE. */
4042
4043 tree
4044 get_qualified_type (tree type, int type_quals)
4045 {
4046 tree t;
4047
4048 if (TYPE_QUALS (type) == type_quals)
4049 return type;
4050
4051 /* Search the chain of variants to see if there is already one there just
4052 like the one we need to have. If so, use that existing one. We must
4053 preserve the TYPE_NAME, since there is code that depends on this. */
4054 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
4055 if (check_qualified_type (t, type, type_quals))
4056 return t;
4057
4058 return NULL_TREE;
4059 }
4060
4061 /* Like get_qualified_type, but creates the type if it does not
4062 exist. This function never returns NULL_TREE. */
4063
4064 tree
4065 build_qualified_type (tree type, int type_quals)
4066 {
4067 tree t;
4068
4069 /* See if we already have the appropriate qualified variant. */
4070 t = get_qualified_type (type, type_quals);
4071
4072 /* If not, build it. */
4073 if (!t)
4074 {
4075 t = build_variant_type_copy (type);
4076 set_type_quals (t, type_quals);
4077
4078 if (TYPE_STRUCTURAL_EQUALITY_P (type))
4079 /* Propagate structural equality. */
4080 SET_TYPE_STRUCTURAL_EQUALITY (t);
4081 else if (TYPE_CANONICAL (type) != type)
4082 /* Build the underlying canonical type, since it is different
4083 from TYPE. */
4084 TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type),
4085 type_quals);
4086 else
4087 /* T is its own canonical type. */
4088 TYPE_CANONICAL (t) = t;
4089
4090 }
4091
4092 return t;
4093 }
4094
4095 /* Create a new distinct copy of TYPE. The new type is made its own
4096 MAIN_VARIANT. If TYPE requires structural equality checks, the
4097 resulting type requires structural equality checks; otherwise, its
4098 TYPE_CANONICAL points to itself. */
4099
4100 tree
4101 build_distinct_type_copy (tree type)
4102 {
4103 tree t = copy_node (type);
4104
4105 TYPE_POINTER_TO (t) = 0;
4106 TYPE_REFERENCE_TO (t) = 0;
4107
4108 /* Set the canonical type either to a new equivalence class, or
4109 propagate the need for structural equality checks. */
4110 if (TYPE_STRUCTURAL_EQUALITY_P (type))
4111 SET_TYPE_STRUCTURAL_EQUALITY (t);
4112 else
4113 TYPE_CANONICAL (t) = t;
4114
4115 /* Make it its own variant. */
4116 TYPE_MAIN_VARIANT (t) = t;
4117 TYPE_NEXT_VARIANT (t) = 0;
4118
4119 return t;
4120 }
4121
4122 /* Create a new variant of TYPE, equivalent but distinct. This is so
4123 the caller can modify it. TYPE_CANONICAL for the return type will
4124 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
4125 are considered equal by the language itself (or that both types
4126 require structural equality checks). */
4127
4128 tree
4129 build_variant_type_copy (tree type)
4130 {
4131 tree t, m = TYPE_MAIN_VARIANT (type);
4132
4133 t = build_distinct_type_copy (type);
4134
4135 /* Since we're building a variant, assume that it is a non-semantic
4136 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
4137 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
4138
4139 /* Add the new type to the chain of variants of TYPE. */
4140 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
4141 TYPE_NEXT_VARIANT (m) = t;
4142 TYPE_MAIN_VARIANT (t) = m;
4143
4144 return t;
4145 }
4146 \f
4147 /* Return true if the from tree in both tree maps are equal. */
4148
4149 int
4150 tree_map_eq (const void *va, const void *vb)
4151 {
4152 const struct tree_map *a = va, *b = vb;
4153 return (a->from == b->from);
4154 }
4155
4156 /* Hash a from tree in a tree_map. */
4157
4158 unsigned int
4159 tree_map_hash (const void *item)
4160 {
4161 return (((const struct tree_map *) item)->hash);
4162 }
4163
4164 /* Return true if this tree map structure is marked for garbage collection
4165 purposes. We simply return true if the from tree is marked, so that this
4166 structure goes away when the from tree goes away. */
4167
4168 int
4169 tree_map_marked_p (const void *p)
4170 {
4171 tree from = ((struct tree_map *) p)->from;
4172
4173 return ggc_marked_p (from);
4174 }
4175
4176 /* Return true if the trees in the tree_int_map *'s VA and VB are equal. */
4177
4178 int
4179 tree_int_map_eq (const void *va, const void *vb)
4180 {
4181 const struct tree_int_map *a = va, *b = vb;
4182 return (a->from == b->from);
4183 }
4184
4185 /* Hash a from tree in the tree_int_map * ITEM. */
4186
4187 unsigned int
4188 tree_int_map_hash (const void *item)
4189 {
4190 return htab_hash_pointer (((const struct tree_int_map *)item)->from);
4191 }
4192
4193 /* Return true if this tree int map structure is marked for garbage collection
4194 purposes. We simply return true if the from tree_int_map *P's from tree is marked, so that this
4195 structure goes away when the from tree goes away. */
4196
4197 int
4198 tree_int_map_marked_p (const void *p)
4199 {
4200 tree from = ((struct tree_int_map *) p)->from;
4201
4202 return ggc_marked_p (from);
4203 }
4204 /* Lookup an init priority for FROM, and return it if we find one. */
4205
4206 unsigned short
4207 decl_init_priority_lookup (tree from)
4208 {
4209 struct tree_int_map *h, in;
4210 in.from = from;
4211
4212 h = htab_find_with_hash (init_priority_for_decl,
4213 &in, htab_hash_pointer (from));
4214 if (h)
4215 return h->to;
4216 return 0;
4217 }
4218
4219 /* Insert a mapping FROM->TO in the init priority hashtable. */
4220
4221 void
4222 decl_init_priority_insert (tree from, unsigned short to)
4223 {
4224 struct tree_int_map *h;
4225 void **loc;
4226
4227 h = ggc_alloc (sizeof (struct tree_int_map));
4228 h->from = from;
4229 h->to = to;
4230 loc = htab_find_slot_with_hash (init_priority_for_decl, h,
4231 htab_hash_pointer (from), INSERT);
4232 *(struct tree_int_map **) loc = h;
4233 }
4234
4235 /* Look up a restrict qualified base decl for FROM. */
4236
4237 tree
4238 decl_restrict_base_lookup (tree from)
4239 {
4240 struct tree_map *h;
4241 struct tree_map in;
4242
4243 in.from = from;
4244 h = htab_find_with_hash (restrict_base_for_decl, &in,
4245 htab_hash_pointer (from));
4246 return h ? h->to : NULL_TREE;
4247 }
4248
4249 /* Record the restrict qualified base TO for FROM. */
4250
4251 void
4252 decl_restrict_base_insert (tree from, tree to)
4253 {
4254 struct tree_map *h;
4255 void **loc;
4256
4257 h = ggc_alloc (sizeof (struct tree_map));
4258 h->hash = htab_hash_pointer (from);
4259 h->from = from;
4260 h->to = to;
4261 loc = htab_find_slot_with_hash (restrict_base_for_decl, h, h->hash, INSERT);
4262 *(struct tree_map **) loc = h;
4263 }
4264
4265 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
4266
4267 static void
4268 print_debug_expr_statistics (void)
4269 {
4270 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
4271 (long) htab_size (debug_expr_for_decl),
4272 (long) htab_elements (debug_expr_for_decl),
4273 htab_collisions (debug_expr_for_decl));
4274 }
4275
4276 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
4277
4278 static void
4279 print_value_expr_statistics (void)
4280 {
4281 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
4282 (long) htab_size (value_expr_for_decl),
4283 (long) htab_elements (value_expr_for_decl),
4284 htab_collisions (value_expr_for_decl));
4285 }
4286
4287 /* Print out statistics for the RESTRICT_BASE_FOR_DECL hash table, but
4288 don't print anything if the table is empty. */
4289
4290 static void
4291 print_restrict_base_statistics (void)
4292 {
4293 if (htab_elements (restrict_base_for_decl) != 0)
4294 fprintf (stderr,
4295 "RESTRICT_BASE hash: size %ld, %ld elements, %f collisions\n",
4296 (long) htab_size (restrict_base_for_decl),
4297 (long) htab_elements (restrict_base_for_decl),
4298 htab_collisions (restrict_base_for_decl));
4299 }
4300
4301 /* Lookup a debug expression for FROM, and return it if we find one. */
4302
4303 tree
4304 decl_debug_expr_lookup (tree from)
4305 {
4306 struct tree_map *h, in;
4307 in.from = from;
4308
4309 h = htab_find_with_hash (debug_expr_for_decl, &in, htab_hash_pointer (from));
4310 if (h)
4311 return h->to;
4312 return NULL_TREE;
4313 }
4314
4315 /* Insert a mapping FROM->TO in the debug expression hashtable. */
4316
4317 void
4318 decl_debug_expr_insert (tree from, tree to)
4319 {
4320 struct tree_map *h;
4321 void **loc;
4322
4323 h = ggc_alloc (sizeof (struct tree_map));
4324 h->hash = htab_hash_pointer (from);
4325 h->from = from;
4326 h->to = to;
4327 loc = htab_find_slot_with_hash (debug_expr_for_decl, h, h->hash, INSERT);
4328 *(struct tree_map **) loc = h;
4329 }
4330
4331 /* Lookup a value expression for FROM, and return it if we find one. */
4332
4333 tree
4334 decl_value_expr_lookup (tree from)
4335 {
4336 struct tree_map *h, in;
4337 in.from = from;
4338
4339 h = htab_find_with_hash (value_expr_for_decl, &in, htab_hash_pointer (from));
4340 if (h)
4341 return h->to;
4342 return NULL_TREE;
4343 }
4344
4345 /* Insert a mapping FROM->TO in the value expression hashtable. */
4346
4347 void
4348 decl_value_expr_insert (tree from, tree to)
4349 {
4350 struct tree_map *h;
4351 void **loc;
4352
4353 h = ggc_alloc (sizeof (struct tree_map));
4354 h->hash = htab_hash_pointer (from);
4355 h->from = from;
4356 h->to = to;
4357 loc = htab_find_slot_with_hash (value_expr_for_decl, h, h->hash, INSERT);
4358 *(struct tree_map **) loc = h;
4359 }
4360
4361 /* Hashing of types so that we don't make duplicates.
4362 The entry point is `type_hash_canon'. */
4363
4364 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
4365 with types in the TREE_VALUE slots), by adding the hash codes
4366 of the individual types. */
4367
4368 unsigned int
4369 type_hash_list (tree list, hashval_t hashcode)
4370 {
4371 tree tail;
4372
4373 for (tail = list; tail; tail = TREE_CHAIN (tail))
4374 if (TREE_VALUE (tail) != error_mark_node)
4375 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
4376 hashcode);
4377
4378 return hashcode;
4379 }
4380
4381 /* These are the Hashtable callback functions. */
4382
4383 /* Returns true iff the types are equivalent. */
4384
4385 static int
4386 type_hash_eq (const void *va, const void *vb)
4387 {
4388 const struct type_hash *a = va, *b = vb;
4389
4390 /* First test the things that are the same for all types. */
4391 if (a->hash != b->hash
4392 || TREE_CODE (a->type) != TREE_CODE (b->type)
4393 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
4394 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
4395 TYPE_ATTRIBUTES (b->type))
4396 || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
4397 || TYPE_MODE (a->type) != TYPE_MODE (b->type))
4398 return 0;
4399
4400 switch (TREE_CODE (a->type))
4401 {
4402 case VOID_TYPE:
4403 case COMPLEX_TYPE:
4404 case POINTER_TYPE:
4405 case REFERENCE_TYPE:
4406 return 1;
4407
4408 case VECTOR_TYPE:
4409 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
4410
4411 case ENUMERAL_TYPE:
4412 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
4413 && !(TYPE_VALUES (a->type)
4414 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
4415 && TYPE_VALUES (b->type)
4416 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
4417 && type_list_equal (TYPE_VALUES (a->type),
4418 TYPE_VALUES (b->type))))
4419 return 0;
4420
4421 /* ... fall through ... */
4422
4423 case INTEGER_TYPE:
4424 case REAL_TYPE:
4425 case BOOLEAN_TYPE:
4426 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
4427 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
4428 TYPE_MAX_VALUE (b->type)))
4429 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
4430 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
4431 TYPE_MIN_VALUE (b->type))));
4432
4433 case OFFSET_TYPE:
4434 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
4435
4436 case METHOD_TYPE:
4437 return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
4438 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
4439 || (TYPE_ARG_TYPES (a->type)
4440 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
4441 && TYPE_ARG_TYPES (b->type)
4442 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
4443 && type_list_equal (TYPE_ARG_TYPES (a->type),
4444 TYPE_ARG_TYPES (b->type)))));
4445
4446 case ARRAY_TYPE:
4447 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
4448
4449 case RECORD_TYPE:
4450 case UNION_TYPE:
4451 case QUAL_UNION_TYPE:
4452 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
4453 || (TYPE_FIELDS (a->type)
4454 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
4455 && TYPE_FIELDS (b->type)
4456 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
4457 && type_list_equal (TYPE_FIELDS (a->type),
4458 TYPE_FIELDS (b->type))));
4459
4460 case FUNCTION_TYPE:
4461 return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
4462 || (TYPE_ARG_TYPES (a->type)
4463 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
4464 && TYPE_ARG_TYPES (b->type)
4465 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
4466 && type_list_equal (TYPE_ARG_TYPES (a->type),
4467 TYPE_ARG_TYPES (b->type))));
4468
4469 default:
4470 return 0;
4471 }
4472 }
4473
4474 /* Return the cached hash value. */
4475
4476 static hashval_t
4477 type_hash_hash (const void *item)
4478 {
4479 return ((const struct type_hash *) item)->hash;
4480 }
4481
4482 /* Look in the type hash table for a type isomorphic to TYPE.
4483 If one is found, return it. Otherwise return 0. */
4484
4485 tree
4486 type_hash_lookup (hashval_t hashcode, tree type)
4487 {
4488 struct type_hash *h, in;
4489
4490 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4491 must call that routine before comparing TYPE_ALIGNs. */
4492 layout_type (type);
4493
4494 in.hash = hashcode;
4495 in.type = type;
4496
4497 h = htab_find_with_hash (type_hash_table, &in, hashcode);
4498 if (h)
4499 return h->type;
4500 return NULL_TREE;
4501 }
4502
4503 /* Add an entry to the type-hash-table
4504 for a type TYPE whose hash code is HASHCODE. */
4505
4506 void
4507 type_hash_add (hashval_t hashcode, tree type)
4508 {
4509 struct type_hash *h;
4510 void **loc;
4511
4512 h = ggc_alloc (sizeof (struct type_hash));
4513 h->hash = hashcode;
4514 h->type = type;
4515 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
4516 *(struct type_hash **) loc = h;
4517 }
4518
4519 /* Given TYPE, and HASHCODE its hash code, return the canonical
4520 object for an identical type if one already exists.
4521 Otherwise, return TYPE, and record it as the canonical object.
4522
4523 To use this function, first create a type of the sort you want.
4524 Then compute its hash code from the fields of the type that
4525 make it different from other similar types.
4526 Then call this function and use the value. */
4527
4528 tree
4529 type_hash_canon (unsigned int hashcode, tree type)
4530 {
4531 tree t1;
4532
4533 /* The hash table only contains main variants, so ensure that's what we're
4534 being passed. */
4535 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
4536
4537 if (!lang_hooks.types.hash_types)
4538 return type;
4539
4540 /* See if the type is in the hash table already. If so, return it.
4541 Otherwise, add the type. */
4542 t1 = type_hash_lookup (hashcode, type);
4543 if (t1 != 0)
4544 {
4545 #ifdef GATHER_STATISTICS
4546 tree_node_counts[(int) t_kind]--;
4547 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
4548 #endif
4549 return t1;
4550 }
4551 else
4552 {
4553 type_hash_add (hashcode, type);
4554 return type;
4555 }
4556 }
4557
4558 /* See if the data pointed to by the type hash table is marked. We consider
4559 it marked if the type is marked or if a debug type number or symbol
4560 table entry has been made for the type. This reduces the amount of
4561 debugging output and eliminates that dependency of the debug output on
4562 the number of garbage collections. */
4563
4564 static int
4565 type_hash_marked_p (const void *p)
4566 {
4567 tree type = ((struct type_hash *) p)->type;
4568
4569 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
4570 }
4571
4572 static void
4573 print_type_hash_statistics (void)
4574 {
4575 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
4576 (long) htab_size (type_hash_table),
4577 (long) htab_elements (type_hash_table),
4578 htab_collisions (type_hash_table));
4579 }
4580
4581 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
4582 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
4583 by adding the hash codes of the individual attributes. */
4584
4585 unsigned int
4586 attribute_hash_list (tree list, hashval_t hashcode)
4587 {
4588 tree tail;
4589
4590 for (tail = list; tail; tail = TREE_CHAIN (tail))
4591 /* ??? Do we want to add in TREE_VALUE too? */
4592 hashcode = iterative_hash_object
4593 (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
4594 return hashcode;
4595 }
4596
4597 /* Given two lists of attributes, return true if list l2 is
4598 equivalent to l1. */
4599
4600 int
4601 attribute_list_equal (tree l1, tree l2)
4602 {
4603 return attribute_list_contained (l1, l2)
4604 && attribute_list_contained (l2, l1);
4605 }
4606
4607 /* Given two lists of attributes, return true if list L2 is
4608 completely contained within L1. */
4609 /* ??? This would be faster if attribute names were stored in a canonicalized
4610 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
4611 must be used to show these elements are equivalent (which they are). */
4612 /* ??? It's not clear that attributes with arguments will always be handled
4613 correctly. */
4614
4615 int
4616 attribute_list_contained (tree l1, tree l2)
4617 {
4618 tree t1, t2;
4619
4620 /* First check the obvious, maybe the lists are identical. */
4621 if (l1 == l2)
4622 return 1;
4623
4624 /* Maybe the lists are similar. */
4625 for (t1 = l1, t2 = l2;
4626 t1 != 0 && t2 != 0
4627 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
4628 && TREE_VALUE (t1) == TREE_VALUE (t2);
4629 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
4630
4631 /* Maybe the lists are equal. */
4632 if (t1 == 0 && t2 == 0)
4633 return 1;
4634
4635 for (; t2 != 0; t2 = TREE_CHAIN (t2))
4636 {
4637 tree attr;
4638 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
4639 attr != NULL_TREE;
4640 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
4641 TREE_CHAIN (attr)))
4642 {
4643 if (TREE_VALUE (t2) != NULL
4644 && TREE_CODE (TREE_VALUE (t2)) == TREE_LIST
4645 && TREE_VALUE (attr) != NULL
4646 && TREE_CODE (TREE_VALUE (attr)) == TREE_LIST)
4647 {
4648 if (simple_cst_list_equal (TREE_VALUE (t2),
4649 TREE_VALUE (attr)) == 1)
4650 break;
4651 }
4652 else if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
4653 break;
4654 }
4655
4656 if (attr == 0)
4657 return 0;
4658 }
4659
4660 return 1;
4661 }
4662
4663 /* Given two lists of types
4664 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
4665 return 1 if the lists contain the same types in the same order.
4666 Also, the TREE_PURPOSEs must match. */
4667
4668 int
4669 type_list_equal (tree l1, tree l2)
4670 {
4671 tree t1, t2;
4672
4673 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
4674 if (TREE_VALUE (t1) != TREE_VALUE (t2)
4675 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
4676 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
4677 && (TREE_TYPE (TREE_PURPOSE (t1))
4678 == TREE_TYPE (TREE_PURPOSE (t2))))))
4679 return 0;
4680
4681 return t1 == t2;
4682 }
4683
4684 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
4685 given by TYPE. If the argument list accepts variable arguments,
4686 then this function counts only the ordinary arguments. */
4687
4688 int
4689 type_num_arguments (tree type)
4690 {
4691 int i = 0;
4692 tree t;
4693
4694 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
4695 /* If the function does not take a variable number of arguments,
4696 the last element in the list will have type `void'. */
4697 if (VOID_TYPE_P (TREE_VALUE (t)))
4698 break;
4699 else
4700 ++i;
4701
4702 return i;
4703 }
4704
4705 /* Nonzero if integer constants T1 and T2
4706 represent the same constant value. */
4707
4708 int
4709 tree_int_cst_equal (tree t1, tree t2)
4710 {
4711 if (t1 == t2)
4712 return 1;
4713
4714 if (t1 == 0 || t2 == 0)
4715 return 0;
4716
4717 if (TREE_CODE (t1) == INTEGER_CST
4718 && TREE_CODE (t2) == INTEGER_CST
4719 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4720 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
4721 return 1;
4722
4723 return 0;
4724 }
4725
4726 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4727 The precise way of comparison depends on their data type. */
4728
4729 int
4730 tree_int_cst_lt (tree t1, tree t2)
4731 {
4732 if (t1 == t2)
4733 return 0;
4734
4735 if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
4736 {
4737 int t1_sgn = tree_int_cst_sgn (t1);
4738 int t2_sgn = tree_int_cst_sgn (t2);
4739
4740 if (t1_sgn < t2_sgn)
4741 return 1;
4742 else if (t1_sgn > t2_sgn)
4743 return 0;
4744 /* Otherwise, both are non-negative, so we compare them as
4745 unsigned just in case one of them would overflow a signed
4746 type. */
4747 }
4748 else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
4749 return INT_CST_LT (t1, t2);
4750
4751 return INT_CST_LT_UNSIGNED (t1, t2);
4752 }
4753
4754 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
4755
4756 int
4757 tree_int_cst_compare (tree t1, tree t2)
4758 {
4759 if (tree_int_cst_lt (t1, t2))
4760 return -1;
4761 else if (tree_int_cst_lt (t2, t1))
4762 return 1;
4763 else
4764 return 0;
4765 }
4766
4767 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
4768 the host. If POS is zero, the value can be represented in a single
4769 HOST_WIDE_INT. If POS is nonzero, the value must be non-negative and can
4770 be represented in a single unsigned HOST_WIDE_INT. */
4771
4772 int
4773 host_integerp (tree t, int pos)
4774 {
4775 return (TREE_CODE (t) == INTEGER_CST
4776 && ((TREE_INT_CST_HIGH (t) == 0
4777 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
4778 || (! pos && TREE_INT_CST_HIGH (t) == -1
4779 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
4780 && !TYPE_UNSIGNED (TREE_TYPE (t)))
4781 || (pos && TREE_INT_CST_HIGH (t) == 0)));
4782 }
4783
4784 /* Return the HOST_WIDE_INT least significant bits of T if it is an
4785 INTEGER_CST and there is no overflow. POS is nonzero if the result must
4786 be non-negative. We must be able to satisfy the above conditions. */
4787
4788 HOST_WIDE_INT
4789 tree_low_cst (tree t, int pos)
4790 {
4791 gcc_assert (host_integerp (t, pos));
4792 return TREE_INT_CST_LOW (t);
4793 }
4794
4795 /* Return the most significant bit of the integer constant T. */
4796
4797 int
4798 tree_int_cst_msb (tree t)
4799 {
4800 int prec;
4801 HOST_WIDE_INT h;
4802 unsigned HOST_WIDE_INT l;
4803
4804 /* Note that using TYPE_PRECISION here is wrong. We care about the
4805 actual bits, not the (arbitrary) range of the type. */
4806 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
4807 rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
4808 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
4809 return (l & 1) == 1;
4810 }
4811
4812 /* Return an indication of the sign of the integer constant T.
4813 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4814 Note that -1 will never be returned if T's type is unsigned. */
4815
4816 int
4817 tree_int_cst_sgn (tree t)
4818 {
4819 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4820 return 0;
4821 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
4822 return 1;
4823 else if (TREE_INT_CST_HIGH (t) < 0)
4824 return -1;
4825 else
4826 return 1;
4827 }
4828
4829 /* Compare two constructor-element-type constants. Return 1 if the lists
4830 are known to be equal; otherwise return 0. */
4831
4832 int
4833 simple_cst_list_equal (tree l1, tree l2)
4834 {
4835 while (l1 != NULL_TREE && l2 != NULL_TREE)
4836 {
4837 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4838 return 0;
4839
4840 l1 = TREE_CHAIN (l1);
4841 l2 = TREE_CHAIN (l2);
4842 }
4843
4844 return l1 == l2;
4845 }
4846
4847 /* Return truthvalue of whether T1 is the same tree structure as T2.
4848 Return 1 if they are the same.
4849 Return 0 if they are understandably different.
4850 Return -1 if either contains tree structure not understood by
4851 this function. */
4852
4853 int
4854 simple_cst_equal (tree t1, tree t2)
4855 {
4856 enum tree_code code1, code2;
4857 int cmp;
4858 int i;
4859
4860 if (t1 == t2)
4861 return 1;
4862 if (t1 == 0 || t2 == 0)
4863 return 0;
4864
4865 code1 = TREE_CODE (t1);
4866 code2 = TREE_CODE (t2);
4867
4868 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4869 {
4870 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4871 || code2 == NON_LVALUE_EXPR)
4872 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4873 else
4874 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4875 }
4876
4877 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4878 || code2 == NON_LVALUE_EXPR)
4879 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4880
4881 if (code1 != code2)
4882 return 0;
4883
4884 switch (code1)
4885 {
4886 case INTEGER_CST:
4887 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4888 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4889
4890 case REAL_CST:
4891 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4892
4893 case STRING_CST:
4894 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4895 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4896 TREE_STRING_LENGTH (t1)));
4897
4898 case CONSTRUCTOR:
4899 {
4900 unsigned HOST_WIDE_INT idx;
4901 VEC(constructor_elt, gc) *v1 = CONSTRUCTOR_ELTS (t1);
4902 VEC(constructor_elt, gc) *v2 = CONSTRUCTOR_ELTS (t2);
4903
4904 if (VEC_length (constructor_elt, v1) != VEC_length (constructor_elt, v2))
4905 return false;
4906
4907 for (idx = 0; idx < VEC_length (constructor_elt, v1); ++idx)
4908 /* ??? Should we handle also fields here? */
4909 if (!simple_cst_equal (VEC_index (constructor_elt, v1, idx)->value,
4910 VEC_index (constructor_elt, v2, idx)->value))
4911 return false;
4912 return true;
4913 }
4914
4915 case SAVE_EXPR:
4916 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4917
4918 case CALL_EXPR:
4919 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4920 if (cmp <= 0)
4921 return cmp;
4922 return
4923 simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4924
4925 case TARGET_EXPR:
4926 /* Special case: if either target is an unallocated VAR_DECL,
4927 it means that it's going to be unified with whatever the
4928 TARGET_EXPR is really supposed to initialize, so treat it
4929 as being equivalent to anything. */
4930 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4931 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4932 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
4933 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4934 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4935 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
4936 cmp = 1;
4937 else
4938 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4939
4940 if (cmp <= 0)
4941 return cmp;
4942
4943 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4944
4945 case WITH_CLEANUP_EXPR:
4946 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4947 if (cmp <= 0)
4948 return cmp;
4949
4950 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
4951
4952 case COMPONENT_REF:
4953 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4954 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4955
4956 return 0;
4957
4958 case VAR_DECL:
4959 case PARM_DECL:
4960 case CONST_DECL:
4961 case FUNCTION_DECL:
4962 return 0;
4963
4964 default:
4965 break;
4966 }
4967
4968 /* This general rule works for most tree codes. All exceptions should be
4969 handled above. If this is a language-specific tree code, we can't
4970 trust what might be in the operand, so say we don't know
4971 the situation. */
4972 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4973 return -1;
4974
4975 switch (TREE_CODE_CLASS (code1))
4976 {
4977 case tcc_unary:
4978 case tcc_binary:
4979 case tcc_comparison:
4980 case tcc_expression:
4981 case tcc_reference:
4982 case tcc_statement:
4983 cmp = 1;
4984 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
4985 {
4986 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4987 if (cmp <= 0)
4988 return cmp;
4989 }
4990
4991 return cmp;
4992
4993 default:
4994 return -1;
4995 }
4996 }
4997
4998 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
4999 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
5000 than U, respectively. */
5001
5002 int
5003 compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
5004 {
5005 if (tree_int_cst_sgn (t) < 0)
5006 return -1;
5007 else if (TREE_INT_CST_HIGH (t) != 0)
5008 return 1;
5009 else if (TREE_INT_CST_LOW (t) == u)
5010 return 0;
5011 else if (TREE_INT_CST_LOW (t) < u)
5012 return -1;
5013 else
5014 return 1;
5015 }
5016
5017 /* Return true if CODE represents an associative tree code. Otherwise
5018 return false. */
5019 bool
5020 associative_tree_code (enum tree_code code)
5021 {
5022 switch (code)
5023 {
5024 case BIT_IOR_EXPR:
5025 case BIT_AND_EXPR:
5026 case BIT_XOR_EXPR:
5027 case PLUS_EXPR:
5028 case MULT_EXPR:
5029 case MIN_EXPR:
5030 case MAX_EXPR:
5031 return true;
5032
5033 default:
5034 break;
5035 }
5036 return false;
5037 }
5038
5039 /* Return true if CODE represents a commutative tree code. Otherwise
5040 return false. */
5041 bool
5042 commutative_tree_code (enum tree_code code)
5043 {
5044 switch (code)
5045 {
5046 case PLUS_EXPR:
5047 case MULT_EXPR:
5048 case MIN_EXPR:
5049 case MAX_EXPR:
5050 case BIT_IOR_EXPR:
5051 case BIT_XOR_EXPR:
5052 case BIT_AND_EXPR:
5053 case NE_EXPR:
5054 case EQ_EXPR:
5055 case UNORDERED_EXPR:
5056 case ORDERED_EXPR:
5057 case UNEQ_EXPR:
5058 case LTGT_EXPR:
5059 case TRUTH_AND_EXPR:
5060 case TRUTH_XOR_EXPR:
5061 case TRUTH_OR_EXPR:
5062 return true;
5063
5064 default:
5065 break;
5066 }
5067 return false;
5068 }
5069
5070 /* Generate a hash value for an expression. This can be used iteratively
5071 by passing a previous result as the "val" argument.
5072
5073 This function is intended to produce the same hash for expressions which
5074 would compare equal using operand_equal_p. */
5075
5076 hashval_t
5077 iterative_hash_expr (tree t, hashval_t val)
5078 {
5079 int i;
5080 enum tree_code code;
5081 char class;
5082
5083 if (t == NULL_TREE)
5084 return iterative_hash_pointer (t, val);
5085
5086 code = TREE_CODE (t);
5087
5088 switch (code)
5089 {
5090 /* Alas, constants aren't shared, so we can't rely on pointer
5091 identity. */
5092 case INTEGER_CST:
5093 val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
5094 return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
5095 case REAL_CST:
5096 {
5097 unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
5098
5099 return iterative_hash_hashval_t (val2, val);
5100 }
5101 case STRING_CST:
5102 return iterative_hash (TREE_STRING_POINTER (t),
5103 TREE_STRING_LENGTH (t), val);
5104 case COMPLEX_CST:
5105 val = iterative_hash_expr (TREE_REALPART (t), val);
5106 return iterative_hash_expr (TREE_IMAGPART (t), val);
5107 case VECTOR_CST:
5108 return iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
5109
5110 case SSA_NAME:
5111 case VALUE_HANDLE:
5112 /* we can just compare by pointer. */
5113 return iterative_hash_pointer (t, val);
5114
5115 case TREE_LIST:
5116 /* A list of expressions, for a CALL_EXPR or as the elements of a
5117 VECTOR_CST. */
5118 for (; t; t = TREE_CHAIN (t))
5119 val = iterative_hash_expr (TREE_VALUE (t), val);
5120 return val;
5121 case CONSTRUCTOR:
5122 {
5123 unsigned HOST_WIDE_INT idx;
5124 tree field, value;
5125 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
5126 {
5127 val = iterative_hash_expr (field, val);
5128 val = iterative_hash_expr (value, val);
5129 }
5130 return val;
5131 }
5132 case FUNCTION_DECL:
5133 /* When referring to a built-in FUNCTION_DECL, use the
5134 __builtin__ form. Otherwise nodes that compare equal
5135 according to operand_equal_p might get different
5136 hash codes. */
5137 if (DECL_BUILT_IN (t))
5138 {
5139 val = iterative_hash_pointer (built_in_decls[DECL_FUNCTION_CODE (t)],
5140 val);
5141 return val;
5142 }
5143 /* else FALL THROUGH */
5144 default:
5145 class = TREE_CODE_CLASS (code);
5146
5147 if (class == tcc_declaration)
5148 {
5149 /* DECL's have a unique ID */
5150 val = iterative_hash_host_wide_int (DECL_UID (t), val);
5151 }
5152 else
5153 {
5154 gcc_assert (IS_EXPR_CODE_CLASS (class));
5155
5156 val = iterative_hash_object (code, val);
5157
5158 /* Don't hash the type, that can lead to having nodes which
5159 compare equal according to operand_equal_p, but which
5160 have different hash codes. */
5161 if (code == NOP_EXPR
5162 || code == CONVERT_EXPR
5163 || code == NON_LVALUE_EXPR)
5164 {
5165 /* Make sure to include signness in the hash computation. */
5166 val += TYPE_UNSIGNED (TREE_TYPE (t));
5167 val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
5168 }
5169
5170 else if (commutative_tree_code (code))
5171 {
5172 /* It's a commutative expression. We want to hash it the same
5173 however it appears. We do this by first hashing both operands
5174 and then rehashing based on the order of their independent
5175 hashes. */
5176 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
5177 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
5178 hashval_t t;
5179
5180 if (one > two)
5181 t = one, one = two, two = t;
5182
5183 val = iterative_hash_hashval_t (one, val);
5184 val = iterative_hash_hashval_t (two, val);
5185 }
5186 else
5187 for (i = TREE_CODE_LENGTH (code) - 1; i >= 0; --i)
5188 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
5189 }
5190 return val;
5191 break;
5192 }
5193 }
5194 \f
5195 /* Constructors for pointer, array and function types.
5196 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
5197 constructed by language-dependent code, not here.) */
5198
5199 /* Construct, lay out and return the type of pointers to TO_TYPE with
5200 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
5201 reference all of memory. If such a type has already been
5202 constructed, reuse it. */
5203
5204 tree
5205 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
5206 bool can_alias_all)
5207 {
5208 tree t;
5209
5210 if (to_type == error_mark_node)
5211 return error_mark_node;
5212
5213 /* In some cases, languages will have things that aren't a POINTER_TYPE
5214 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
5215 In that case, return that type without regard to the rest of our
5216 operands.
5217
5218 ??? This is a kludge, but consistent with the way this function has
5219 always operated and there doesn't seem to be a good way to avoid this
5220 at the moment. */
5221 if (TYPE_POINTER_TO (to_type) != 0
5222 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
5223 return TYPE_POINTER_TO (to_type);
5224
5225 /* First, if we already have a type for pointers to TO_TYPE and it's
5226 the proper mode, use it. */
5227 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
5228 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
5229 return t;
5230
5231 t = make_node (POINTER_TYPE);
5232
5233 TREE_TYPE (t) = to_type;
5234 TYPE_MODE (t) = mode;
5235 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
5236 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
5237 TYPE_POINTER_TO (to_type) = t;
5238
5239 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
5240 SET_TYPE_STRUCTURAL_EQUALITY (t);
5241 else if (TYPE_CANONICAL (to_type) != to_type)
5242 TYPE_CANONICAL (t)
5243 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
5244 mode, can_alias_all);
5245
5246 /* Lay out the type. This function has many callers that are concerned
5247 with expression-construction, and this simplifies them all. */
5248 layout_type (t);
5249
5250 return t;
5251 }
5252
5253 /* By default build pointers in ptr_mode. */
5254
5255 tree
5256 build_pointer_type (tree to_type)
5257 {
5258 return build_pointer_type_for_mode (to_type, ptr_mode, false);
5259 }
5260
5261 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
5262
5263 tree
5264 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
5265 bool can_alias_all)
5266 {
5267 tree t;
5268
5269 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
5270 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
5271 In that case, return that type without regard to the rest of our
5272 operands.
5273
5274 ??? This is a kludge, but consistent with the way this function has
5275 always operated and there doesn't seem to be a good way to avoid this
5276 at the moment. */
5277 if (TYPE_REFERENCE_TO (to_type) != 0
5278 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
5279 return TYPE_REFERENCE_TO (to_type);
5280
5281 /* First, if we already have a type for pointers to TO_TYPE and it's
5282 the proper mode, use it. */
5283 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
5284 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
5285 return t;
5286
5287 t = make_node (REFERENCE_TYPE);
5288
5289 TREE_TYPE (t) = to_type;
5290 TYPE_MODE (t) = mode;
5291 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
5292 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
5293 TYPE_REFERENCE_TO (to_type) = t;
5294
5295 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
5296 SET_TYPE_STRUCTURAL_EQUALITY (t);
5297 else if (TYPE_CANONICAL (to_type) != to_type)
5298 TYPE_CANONICAL (t)
5299 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
5300 mode, can_alias_all);
5301
5302 layout_type (t);
5303
5304 return t;
5305 }
5306
5307
5308 /* Build the node for the type of references-to-TO_TYPE by default
5309 in ptr_mode. */
5310
5311 tree
5312 build_reference_type (tree to_type)
5313 {
5314 return build_reference_type_for_mode (to_type, ptr_mode, false);
5315 }
5316
5317 /* Build a type that is compatible with t but has no cv quals anywhere
5318 in its type, thus
5319
5320 const char *const *const * -> char ***. */
5321
5322 tree
5323 build_type_no_quals (tree t)
5324 {
5325 switch (TREE_CODE (t))
5326 {
5327 case POINTER_TYPE:
5328 return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
5329 TYPE_MODE (t),
5330 TYPE_REF_CAN_ALIAS_ALL (t));
5331 case REFERENCE_TYPE:
5332 return
5333 build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
5334 TYPE_MODE (t),
5335 TYPE_REF_CAN_ALIAS_ALL (t));
5336 default:
5337 return TYPE_MAIN_VARIANT (t);
5338 }
5339 }
5340
5341 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
5342 MAXVAL should be the maximum value in the domain
5343 (one less than the length of the array).
5344
5345 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
5346 We don't enforce this limit, that is up to caller (e.g. language front end).
5347 The limit exists because the result is a signed type and we don't handle
5348 sizes that use more than one HOST_WIDE_INT. */
5349
5350 tree
5351 build_index_type (tree maxval)
5352 {
5353 tree itype = make_node (INTEGER_TYPE);
5354
5355 TREE_TYPE (itype) = sizetype;
5356 TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
5357 TYPE_MIN_VALUE (itype) = size_zero_node;
5358 TYPE_MAX_VALUE (itype) = fold_convert (sizetype, maxval);
5359 TYPE_MODE (itype) = TYPE_MODE (sizetype);
5360 TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
5361 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
5362 TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
5363 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
5364
5365 if (host_integerp (maxval, 1))
5366 return type_hash_canon (tree_low_cst (maxval, 1), itype);
5367 else
5368 {
5369 /* Since we cannot hash this type, we need to compare it using
5370 structural equality checks. */
5371 SET_TYPE_STRUCTURAL_EQUALITY (itype);
5372 return itype;
5373 }
5374 }
5375
5376 /* Builds a signed or unsigned integer type of precision PRECISION.
5377 Used for C bitfields whose precision does not match that of
5378 built-in target types. */
5379 tree
5380 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
5381 int unsignedp)
5382 {
5383 tree itype = make_node (INTEGER_TYPE);
5384
5385 TYPE_PRECISION (itype) = precision;
5386
5387 if (unsignedp)
5388 fixup_unsigned_type (itype);
5389 else
5390 fixup_signed_type (itype);
5391
5392 if (host_integerp (TYPE_MAX_VALUE (itype), 1))
5393 return type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype), 1), itype);
5394
5395 return itype;
5396 }
5397
5398 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
5399 ENUMERAL_TYPE or BOOLEAN_TYPE), with low bound LOWVAL and
5400 high bound HIGHVAL. If TYPE is NULL, sizetype is used. */
5401
5402 tree
5403 build_range_type (tree type, tree lowval, tree highval)
5404 {
5405 tree itype = make_node (INTEGER_TYPE);
5406
5407 TREE_TYPE (itype) = type;
5408 if (type == NULL_TREE)
5409 type = sizetype;
5410
5411 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
5412 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
5413
5414 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
5415 TYPE_MODE (itype) = TYPE_MODE (type);
5416 TYPE_SIZE (itype) = TYPE_SIZE (type);
5417 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
5418 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
5419 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
5420
5421 if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
5422 return type_hash_canon (tree_low_cst (highval, 0)
5423 - tree_low_cst (lowval, 0),
5424 itype);
5425 else
5426 return itype;
5427 }
5428
5429 /* Just like build_index_type, but takes lowval and highval instead
5430 of just highval (maxval). */
5431
5432 tree
5433 build_index_2_type (tree lowval, tree highval)
5434 {
5435 return build_range_type (sizetype, lowval, highval);
5436 }
5437
5438 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
5439 and number of elements specified by the range of values of INDEX_TYPE.
5440 If such a type has already been constructed, reuse it. */
5441
5442 tree
5443 build_array_type (tree elt_type, tree index_type)
5444 {
5445 tree t;
5446 hashval_t hashcode = 0;
5447
5448 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
5449 {
5450 error ("arrays of functions are not meaningful");
5451 elt_type = integer_type_node;
5452 }
5453
5454 t = make_node (ARRAY_TYPE);
5455 TREE_TYPE (t) = elt_type;
5456 TYPE_DOMAIN (t) = index_type;
5457
5458 if (index_type == 0)
5459 {
5460 tree save = t;
5461 hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
5462 t = type_hash_canon (hashcode, t);
5463 if (save == t)
5464 layout_type (t);
5465
5466 if (TYPE_CANONICAL (t) == t)
5467 {
5468 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type))
5469 SET_TYPE_STRUCTURAL_EQUALITY (t);
5470 else if (TYPE_CANONICAL (elt_type) != elt_type)
5471 TYPE_CANONICAL (t)
5472 = build_array_type (TYPE_CANONICAL (elt_type), index_type);
5473 }
5474
5475 return t;
5476 }
5477
5478 hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
5479 hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
5480 t = type_hash_canon (hashcode, t);
5481
5482 if (!COMPLETE_TYPE_P (t))
5483 layout_type (t);
5484
5485 if (TYPE_CANONICAL (t) == t)
5486 {
5487 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
5488 || TYPE_STRUCTURAL_EQUALITY_P (index_type))
5489 SET_TYPE_STRUCTURAL_EQUALITY (t);
5490 else if (TYPE_CANONICAL (elt_type) != elt_type
5491 || TYPE_CANONICAL (index_type) != index_type)
5492 TYPE_CANONICAL (t)
5493 = build_array_type (TYPE_CANONICAL (elt_type),
5494 TYPE_CANONICAL (index_type));
5495 }
5496
5497 return t;
5498 }
5499
5500 /* Return the TYPE of the elements comprising
5501 the innermost dimension of ARRAY. */
5502
5503 tree
5504 get_inner_array_type (tree array)
5505 {
5506 tree type = TREE_TYPE (array);
5507
5508 while (TREE_CODE (type) == ARRAY_TYPE)
5509 type = TREE_TYPE (type);
5510
5511 return type;
5512 }
5513
5514 /* Construct, lay out and return
5515 the type of functions returning type VALUE_TYPE
5516 given arguments of types ARG_TYPES.
5517 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
5518 are data type nodes for the arguments of the function.
5519 If such a type has already been constructed, reuse it. */
5520
5521 tree
5522 build_function_type (tree value_type, tree arg_types)
5523 {
5524 tree t;
5525 hashval_t hashcode = 0;
5526
5527 if (TREE_CODE (value_type) == FUNCTION_TYPE)
5528 {
5529 error ("function return type cannot be function");
5530 value_type = integer_type_node;
5531 }
5532
5533 /* Make a node of the sort we want. */
5534 t = make_node (FUNCTION_TYPE);
5535 TREE_TYPE (t) = value_type;
5536 TYPE_ARG_TYPES (t) = arg_types;
5537
5538 /* We don't have canonicalization of function types, yet. */
5539 SET_TYPE_STRUCTURAL_EQUALITY (t);
5540
5541 /* If we already have such a type, use the old one. */
5542 hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
5543 hashcode = type_hash_list (arg_types, hashcode);
5544 t = type_hash_canon (hashcode, t);
5545
5546 if (!COMPLETE_TYPE_P (t))
5547 layout_type (t);
5548 return t;
5549 }
5550
5551 /* Build a function type. The RETURN_TYPE is the type returned by the
5552 function. If additional arguments are provided, they are
5553 additional argument types. The list of argument types must always
5554 be terminated by NULL_TREE. */
5555
5556 tree
5557 build_function_type_list (tree return_type, ...)
5558 {
5559 tree t, args, last;
5560 va_list p;
5561
5562 va_start (p, return_type);
5563
5564 t = va_arg (p, tree);
5565 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
5566 args = tree_cons (NULL_TREE, t, args);
5567
5568 if (args == NULL_TREE)
5569 args = void_list_node;
5570 else
5571 {
5572 last = args;
5573 args = nreverse (args);
5574 TREE_CHAIN (last) = void_list_node;
5575 }
5576 args = build_function_type (return_type, args);
5577
5578 va_end (p);
5579 return args;
5580 }
5581
5582 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
5583 and ARGTYPES (a TREE_LIST) are the return type and arguments types
5584 for the method. An implicit additional parameter (of type
5585 pointer-to-BASETYPE) is added to the ARGTYPES. */
5586
5587 tree
5588 build_method_type_directly (tree basetype,
5589 tree rettype,
5590 tree argtypes)
5591 {
5592 tree t;
5593 tree ptype;
5594 int hashcode = 0;
5595
5596 /* Make a node of the sort we want. */
5597 t = make_node (METHOD_TYPE);
5598
5599 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
5600 TREE_TYPE (t) = rettype;
5601 ptype = build_pointer_type (basetype);
5602
5603 /* The actual arglist for this function includes a "hidden" argument
5604 which is "this". Put it into the list of argument types. */
5605 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
5606 TYPE_ARG_TYPES (t) = argtypes;
5607
5608 /* We don't have canonicalization of method types yet. */
5609 SET_TYPE_STRUCTURAL_EQUALITY (t);
5610
5611 /* If we already have such a type, use the old one. */
5612 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
5613 hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
5614 hashcode = type_hash_list (argtypes, hashcode);
5615 t = type_hash_canon (hashcode, t);
5616
5617 if (!COMPLETE_TYPE_P (t))
5618 layout_type (t);
5619
5620 return t;
5621 }
5622
5623 /* Construct, lay out and return the type of methods belonging to class
5624 BASETYPE and whose arguments and values are described by TYPE.
5625 If that type exists already, reuse it.
5626 TYPE must be a FUNCTION_TYPE node. */
5627
5628 tree
5629 build_method_type (tree basetype, tree type)
5630 {
5631 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
5632
5633 return build_method_type_directly (basetype,
5634 TREE_TYPE (type),
5635 TYPE_ARG_TYPES (type));
5636 }
5637
5638 /* Construct, lay out and return the type of offsets to a value
5639 of type TYPE, within an object of type BASETYPE.
5640 If a suitable offset type exists already, reuse it. */
5641
5642 tree
5643 build_offset_type (tree basetype, tree type)
5644 {
5645 tree t;
5646 hashval_t hashcode = 0;
5647
5648 /* Make a node of the sort we want. */
5649 t = make_node (OFFSET_TYPE);
5650
5651 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
5652 TREE_TYPE (t) = type;
5653
5654 /* If we already have such a type, use the old one. */
5655 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
5656 hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
5657 t = type_hash_canon (hashcode, t);
5658
5659 if (!COMPLETE_TYPE_P (t))
5660 layout_type (t);
5661
5662 if (TYPE_CANONICAL (t) == t)
5663 {
5664 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
5665 || TYPE_STRUCTURAL_EQUALITY_P (type))
5666 SET_TYPE_STRUCTURAL_EQUALITY (t);
5667 else if (TYPE_CANONICAL (basetype) != basetype
5668 || TYPE_CANONICAL (type) != type)
5669 TYPE_CANONICAL (t)
5670 = build_offset_type (TYPE_CANONICAL (basetype),
5671 TYPE_CANONICAL (type));
5672 }
5673
5674 return t;
5675 }
5676
5677 /* Create a complex type whose components are COMPONENT_TYPE. */
5678
5679 tree
5680 build_complex_type (tree component_type)
5681 {
5682 tree t;
5683 hashval_t hashcode;
5684
5685 /* Make a node of the sort we want. */
5686 t = make_node (COMPLEX_TYPE);
5687
5688 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
5689
5690 /* If we already have such a type, use the old one. */
5691 hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
5692 t = type_hash_canon (hashcode, t);
5693
5694 if (!COMPLETE_TYPE_P (t))
5695 layout_type (t);
5696
5697 if (TYPE_CANONICAL (t) == t)
5698 {
5699 if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
5700 SET_TYPE_STRUCTURAL_EQUALITY (t);
5701 else if (TYPE_CANONICAL (component_type) != component_type)
5702 TYPE_CANONICAL (t)
5703 = build_complex_type (TYPE_CANONICAL (component_type));
5704 }
5705
5706 /* If we are writing Dwarf2 output we need to create a name,
5707 since complex is a fundamental type. */
5708 if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
5709 && ! TYPE_NAME (t))
5710 {
5711 const char *name;
5712 if (component_type == char_type_node)
5713 name = "complex char";
5714 else if (component_type == signed_char_type_node)
5715 name = "complex signed char";
5716 else if (component_type == unsigned_char_type_node)
5717 name = "complex unsigned char";
5718 else if (component_type == short_integer_type_node)
5719 name = "complex short int";
5720 else if (component_type == short_unsigned_type_node)
5721 name = "complex short unsigned int";
5722 else if (component_type == integer_type_node)
5723 name = "complex int";
5724 else if (component_type == unsigned_type_node)
5725 name = "complex unsigned int";
5726 else if (component_type == long_integer_type_node)
5727 name = "complex long int";
5728 else if (component_type == long_unsigned_type_node)
5729 name = "complex long unsigned int";
5730 else if (component_type == long_long_integer_type_node)
5731 name = "complex long long int";
5732 else if (component_type == long_long_unsigned_type_node)
5733 name = "complex long long unsigned int";
5734 else
5735 name = 0;
5736
5737 if (name != 0)
5738 TYPE_NAME (t) = get_identifier (name);
5739 }
5740
5741 return build_qualified_type (t, TYPE_QUALS (component_type));
5742 }
5743 \f
5744 /* Return OP, stripped of any conversions to wider types as much as is safe.
5745 Converting the value back to OP's type makes a value equivalent to OP.
5746
5747 If FOR_TYPE is nonzero, we return a value which, if converted to
5748 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
5749
5750 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
5751 narrowest type that can hold the value, even if they don't exactly fit.
5752 Otherwise, bit-field references are changed to a narrower type
5753 only if they can be fetched directly from memory in that type.
5754
5755 OP must have integer, real or enumeral type. Pointers are not allowed!
5756
5757 There are some cases where the obvious value we could return
5758 would regenerate to OP if converted to OP's type,
5759 but would not extend like OP to wider types.
5760 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
5761 For example, if OP is (unsigned short)(signed char)-1,
5762 we avoid returning (signed char)-1 if FOR_TYPE is int,
5763 even though extending that to an unsigned short would regenerate OP,
5764 since the result of extending (signed char)-1 to (int)
5765 is different from (int) OP. */
5766
5767 tree
5768 get_unwidened (tree op, tree for_type)
5769 {
5770 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
5771 tree type = TREE_TYPE (op);
5772 unsigned final_prec
5773 = TYPE_PRECISION (for_type != 0 ? for_type : type);
5774 int uns
5775 = (for_type != 0 && for_type != type
5776 && final_prec > TYPE_PRECISION (type)
5777 && TYPE_UNSIGNED (type));
5778 tree win = op;
5779
5780 while (TREE_CODE (op) == NOP_EXPR
5781 || TREE_CODE (op) == CONVERT_EXPR)
5782 {
5783 int bitschange;
5784
5785 /* TYPE_PRECISION on vector types has different meaning
5786 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
5787 so avoid them here. */
5788 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
5789 break;
5790
5791 bitschange = TYPE_PRECISION (TREE_TYPE (op))
5792 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
5793
5794 /* Truncations are many-one so cannot be removed.
5795 Unless we are later going to truncate down even farther. */
5796 if (bitschange < 0
5797 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
5798 break;
5799
5800 /* See what's inside this conversion. If we decide to strip it,
5801 we will set WIN. */
5802 op = TREE_OPERAND (op, 0);
5803
5804 /* If we have not stripped any zero-extensions (uns is 0),
5805 we can strip any kind of extension.
5806 If we have previously stripped a zero-extension,
5807 only zero-extensions can safely be stripped.
5808 Any extension can be stripped if the bits it would produce
5809 are all going to be discarded later by truncating to FOR_TYPE. */
5810
5811 if (bitschange > 0)
5812 {
5813 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
5814 win = op;
5815 /* TYPE_UNSIGNED says whether this is a zero-extension.
5816 Let's avoid computing it if it does not affect WIN
5817 and if UNS will not be needed again. */
5818 if ((uns
5819 || TREE_CODE (op) == NOP_EXPR
5820 || TREE_CODE (op) == CONVERT_EXPR)
5821 && TYPE_UNSIGNED (TREE_TYPE (op)))
5822 {
5823 uns = 1;
5824 win = op;
5825 }
5826 }
5827 }
5828
5829 if (TREE_CODE (op) == COMPONENT_REF
5830 /* Since type_for_size always gives an integer type. */
5831 && TREE_CODE (type) != REAL_TYPE
5832 /* Don't crash if field not laid out yet. */
5833 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5834 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5835 {
5836 unsigned int innerprec
5837 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5838 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5839 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5840 type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5841
5842 /* We can get this structure field in the narrowest type it fits in.
5843 If FOR_TYPE is 0, do this only for a field that matches the
5844 narrower type exactly and is aligned for it
5845 The resulting extension to its nominal type (a fullword type)
5846 must fit the same conditions as for other extensions. */
5847
5848 if (type != 0
5849 && INT_CST_LT_UNSIGNED (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (op)))
5850 && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
5851 && (! uns || final_prec <= innerprec || unsignedp))
5852 {
5853 win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5854 TREE_OPERAND (op, 1), NULL_TREE);
5855 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5856 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5857 }
5858 }
5859
5860 return win;
5861 }
5862 \f
5863 /* Return OP or a simpler expression for a narrower value
5864 which can be sign-extended or zero-extended to give back OP.
5865 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5866 or 0 if the value should be sign-extended. */
5867
5868 tree
5869 get_narrower (tree op, int *unsignedp_ptr)
5870 {
5871 int uns = 0;
5872 int first = 1;
5873 tree win = op;
5874 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
5875
5876 while (TREE_CODE (op) == NOP_EXPR)
5877 {
5878 int bitschange
5879 = (TYPE_PRECISION (TREE_TYPE (op))
5880 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
5881
5882 /* Truncations are many-one so cannot be removed. */
5883 if (bitschange < 0)
5884 break;
5885
5886 /* See what's inside this conversion. If we decide to strip it,
5887 we will set WIN. */
5888
5889 if (bitschange > 0)
5890 {
5891 op = TREE_OPERAND (op, 0);
5892 /* An extension: the outermost one can be stripped,
5893 but remember whether it is zero or sign extension. */
5894 if (first)
5895 uns = TYPE_UNSIGNED (TREE_TYPE (op));
5896 /* Otherwise, if a sign extension has been stripped,
5897 only sign extensions can now be stripped;
5898 if a zero extension has been stripped, only zero-extensions. */
5899 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
5900 break;
5901 first = 0;
5902 }
5903 else /* bitschange == 0 */
5904 {
5905 /* A change in nominal type can always be stripped, but we must
5906 preserve the unsignedness. */
5907 if (first)
5908 uns = TYPE_UNSIGNED (TREE_TYPE (op));
5909 first = 0;
5910 op = TREE_OPERAND (op, 0);
5911 /* Keep trying to narrow, but don't assign op to win if it
5912 would turn an integral type into something else. */
5913 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
5914 continue;
5915 }
5916
5917 win = op;
5918 }
5919
5920 if (TREE_CODE (op) == COMPONENT_REF
5921 /* Since type_for_size always gives an integer type. */
5922 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
5923 /* Ensure field is laid out already. */
5924 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5925 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5926 {
5927 unsigned HOST_WIDE_INT innerprec
5928 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5929 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5930 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5931 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5932
5933 /* We can get this structure field in a narrower type that fits it,
5934 but the resulting extension to its nominal type (a fullword type)
5935 must satisfy the same conditions as for other extensions.
5936
5937 Do this only for fields that are aligned (not bit-fields),
5938 because when bit-field insns will be used there is no
5939 advantage in doing this. */
5940
5941 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5942 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
5943 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
5944 && type != 0)
5945 {
5946 if (first)
5947 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
5948 win = fold_convert (type, op);
5949 }
5950 }
5951
5952 *unsignedp_ptr = uns;
5953 return win;
5954 }
5955 \f
5956 /* Nonzero if integer constant C has a value that is permissible
5957 for type TYPE (an INTEGER_TYPE). */
5958
5959 int
5960 int_fits_type_p (tree c, tree type)
5961 {
5962 tree type_low_bound = TYPE_MIN_VALUE (type);
5963 tree type_high_bound = TYPE_MAX_VALUE (type);
5964 bool ok_for_low_bound, ok_for_high_bound;
5965 unsigned HOST_WIDE_INT low;
5966 HOST_WIDE_INT high;
5967
5968 /* If at least one bound of the type is a constant integer, we can check
5969 ourselves and maybe make a decision. If no such decision is possible, but
5970 this type is a subtype, try checking against that. Otherwise, use
5971 fit_double_type, which checks against the precision.
5972
5973 Compute the status for each possibly constant bound, and return if we see
5974 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
5975 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
5976 for "constant known to fit". */
5977
5978 /* Check if C >= type_low_bound. */
5979 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
5980 {
5981 if (tree_int_cst_lt (c, type_low_bound))
5982 return 0;
5983 ok_for_low_bound = true;
5984 }
5985 else
5986 ok_for_low_bound = false;
5987
5988 /* Check if c <= type_high_bound. */
5989 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
5990 {
5991 if (tree_int_cst_lt (type_high_bound, c))
5992 return 0;
5993 ok_for_high_bound = true;
5994 }
5995 else
5996 ok_for_high_bound = false;
5997
5998 /* If the constant fits both bounds, the result is known. */
5999 if (ok_for_low_bound && ok_for_high_bound)
6000 return 1;
6001
6002 /* Perform some generic filtering which may allow making a decision
6003 even if the bounds are not constant. First, negative integers
6004 never fit in unsigned types, */
6005 if (TYPE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
6006 return 0;
6007
6008 /* Second, narrower types always fit in wider ones. */
6009 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
6010 return 1;
6011
6012 /* Third, unsigned integers with top bit set never fit signed types. */
6013 if (! TYPE_UNSIGNED (type)
6014 && TYPE_UNSIGNED (TREE_TYPE (c))
6015 && tree_int_cst_msb (c))
6016 return 0;
6017
6018 /* If we haven't been able to decide at this point, there nothing more we
6019 can check ourselves here. Look at the base type if we have one and it
6020 has the same precision. */
6021 if (TREE_CODE (type) == INTEGER_TYPE
6022 && TREE_TYPE (type) != 0
6023 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
6024 return int_fits_type_p (c, TREE_TYPE (type));
6025
6026 /* Or to fit_double_type, if nothing else. */
6027 low = TREE_INT_CST_LOW (c);
6028 high = TREE_INT_CST_HIGH (c);
6029 return !fit_double_type (low, high, &low, &high, type);
6030 }
6031
6032 /* Subprogram of following function. Called by walk_tree.
6033
6034 Return *TP if it is an automatic variable or parameter of the
6035 function passed in as DATA. */
6036
6037 static tree
6038 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
6039 {
6040 tree fn = (tree) data;
6041
6042 if (TYPE_P (*tp))
6043 *walk_subtrees = 0;
6044
6045 else if (DECL_P (*tp)
6046 && lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
6047 return *tp;
6048
6049 return NULL_TREE;
6050 }
6051
6052 /* Returns true if T is, contains, or refers to a type with variable
6053 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
6054 arguments, but not the return type. If FN is nonzero, only return
6055 true if a modifier of the type or position of FN is a variable or
6056 parameter inside FN.
6057
6058 This concept is more general than that of C99 'variably modified types':
6059 in C99, a struct type is never variably modified because a VLA may not
6060 appear as a structure member. However, in GNU C code like:
6061
6062 struct S { int i[f()]; };
6063
6064 is valid, and other languages may define similar constructs. */
6065
6066 bool
6067 variably_modified_type_p (tree type, tree fn)
6068 {
6069 tree t;
6070
6071 /* Test if T is either variable (if FN is zero) or an expression containing
6072 a variable in FN. */
6073 #define RETURN_TRUE_IF_VAR(T) \
6074 do { tree _t = (T); \
6075 if (_t && _t != error_mark_node && TREE_CODE (_t) != INTEGER_CST \
6076 && (!fn || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
6077 return true; } while (0)
6078
6079 if (type == error_mark_node)
6080 return false;
6081
6082 /* If TYPE itself has variable size, it is variably modified. */
6083 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
6084 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
6085
6086 switch (TREE_CODE (type))
6087 {
6088 case POINTER_TYPE:
6089 case REFERENCE_TYPE:
6090 case VECTOR_TYPE:
6091 if (variably_modified_type_p (TREE_TYPE (type), fn))
6092 return true;
6093 break;
6094
6095 case FUNCTION_TYPE:
6096 case METHOD_TYPE:
6097 /* If TYPE is a function type, it is variably modified if the
6098 return type is variably modified. */
6099 if (variably_modified_type_p (TREE_TYPE (type), fn))
6100 return true;
6101 break;
6102
6103 case INTEGER_TYPE:
6104 case REAL_TYPE:
6105 case ENUMERAL_TYPE:
6106 case BOOLEAN_TYPE:
6107 /* Scalar types are variably modified if their end points
6108 aren't constant. */
6109 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
6110 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
6111 break;
6112
6113 case RECORD_TYPE:
6114 case UNION_TYPE:
6115 case QUAL_UNION_TYPE:
6116 /* We can't see if any of the fields are variably-modified by the
6117 definition we normally use, since that would produce infinite
6118 recursion via pointers. */
6119 /* This is variably modified if some field's type is. */
6120 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
6121 if (TREE_CODE (t) == FIELD_DECL)
6122 {
6123 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
6124 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
6125 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
6126
6127 if (TREE_CODE (type) == QUAL_UNION_TYPE)
6128 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
6129 }
6130 break;
6131
6132 case ARRAY_TYPE:
6133 /* Do not call ourselves to avoid infinite recursion. This is
6134 variably modified if the element type is. */
6135 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
6136 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
6137 break;
6138
6139 default:
6140 break;
6141 }
6142
6143 /* The current language may have other cases to check, but in general,
6144 all other types are not variably modified. */
6145 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
6146
6147 #undef RETURN_TRUE_IF_VAR
6148 }
6149
6150 /* Given a DECL or TYPE, return the scope in which it was declared, or
6151 NULL_TREE if there is no containing scope. */
6152
6153 tree
6154 get_containing_scope (tree t)
6155 {
6156 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
6157 }
6158
6159 /* Return the innermost context enclosing DECL that is
6160 a FUNCTION_DECL, or zero if none. */
6161
6162 tree
6163 decl_function_context (tree decl)
6164 {
6165 tree context;
6166
6167 if (TREE_CODE (decl) == ERROR_MARK)
6168 return 0;
6169
6170 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
6171 where we look up the function at runtime. Such functions always take
6172 a first argument of type 'pointer to real context'.
6173
6174 C++ should really be fixed to use DECL_CONTEXT for the real context,
6175 and use something else for the "virtual context". */
6176 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
6177 context
6178 = TYPE_MAIN_VARIANT
6179 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6180 else
6181 context = DECL_CONTEXT (decl);
6182
6183 while (context && TREE_CODE (context) != FUNCTION_DECL)
6184 {
6185 if (TREE_CODE (context) == BLOCK)
6186 context = BLOCK_SUPERCONTEXT (context);
6187 else
6188 context = get_containing_scope (context);
6189 }
6190
6191 return context;
6192 }
6193
6194 /* Return the innermost context enclosing DECL that is
6195 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
6196 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
6197
6198 tree
6199 decl_type_context (tree decl)
6200 {
6201 tree context = DECL_CONTEXT (decl);
6202
6203 while (context)
6204 switch (TREE_CODE (context))
6205 {
6206 case NAMESPACE_DECL:
6207 case TRANSLATION_UNIT_DECL:
6208 return NULL_TREE;
6209
6210 case RECORD_TYPE:
6211 case UNION_TYPE:
6212 case QUAL_UNION_TYPE:
6213 return context;
6214
6215 case TYPE_DECL:
6216 case FUNCTION_DECL:
6217 context = DECL_CONTEXT (context);
6218 break;
6219
6220 case BLOCK:
6221 context = BLOCK_SUPERCONTEXT (context);
6222 break;
6223
6224 default:
6225 gcc_unreachable ();
6226 }
6227
6228 return NULL_TREE;
6229 }
6230
6231 /* CALL is a CALL_EXPR. Return the declaration for the function
6232 called, or NULL_TREE if the called function cannot be
6233 determined. */
6234
6235 tree
6236 get_callee_fndecl (tree call)
6237 {
6238 tree addr;
6239
6240 if (call == error_mark_node)
6241 return call;
6242
6243 /* It's invalid to call this function with anything but a
6244 CALL_EXPR. */
6245 gcc_assert (TREE_CODE (call) == CALL_EXPR);
6246
6247 /* The first operand to the CALL is the address of the function
6248 called. */
6249 addr = TREE_OPERAND (call, 0);
6250
6251 STRIP_NOPS (addr);
6252
6253 /* If this is a readonly function pointer, extract its initial value. */
6254 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
6255 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
6256 && DECL_INITIAL (addr))
6257 addr = DECL_INITIAL (addr);
6258
6259 /* If the address is just `&f' for some function `f', then we know
6260 that `f' is being called. */
6261 if (TREE_CODE (addr) == ADDR_EXPR
6262 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
6263 return TREE_OPERAND (addr, 0);
6264
6265 /* We couldn't figure out what was being called. Maybe the front
6266 end has some idea. */
6267 return lang_hooks.lang_get_callee_fndecl (call);
6268 }
6269
6270 /* Print debugging information about tree nodes generated during the compile,
6271 and any language-specific information. */
6272
6273 void
6274 dump_tree_statistics (void)
6275 {
6276 #ifdef GATHER_STATISTICS
6277 int i;
6278 int total_nodes, total_bytes;
6279 #endif
6280
6281 fprintf (stderr, "\n??? tree nodes created\n\n");
6282 #ifdef GATHER_STATISTICS
6283 fprintf (stderr, "Kind Nodes Bytes\n");
6284 fprintf (stderr, "---------------------------------------\n");
6285 total_nodes = total_bytes = 0;
6286 for (i = 0; i < (int) all_kinds; i++)
6287 {
6288 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
6289 tree_node_counts[i], tree_node_sizes[i]);
6290 total_nodes += tree_node_counts[i];
6291 total_bytes += tree_node_sizes[i];
6292 }
6293 fprintf (stderr, "---------------------------------------\n");
6294 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
6295 fprintf (stderr, "---------------------------------------\n");
6296 ssanames_print_statistics ();
6297 phinodes_print_statistics ();
6298 #else
6299 fprintf (stderr, "(No per-node statistics)\n");
6300 #endif
6301 print_type_hash_statistics ();
6302 print_debug_expr_statistics ();
6303 print_value_expr_statistics ();
6304 print_restrict_base_statistics ();
6305 lang_hooks.print_statistics ();
6306 }
6307 \f
6308 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
6309
6310 /* Generate a crc32 of a string. */
6311
6312 unsigned
6313 crc32_string (unsigned chksum, const char *string)
6314 {
6315 do
6316 {
6317 unsigned value = *string << 24;
6318 unsigned ix;
6319
6320 for (ix = 8; ix--; value <<= 1)
6321 {
6322 unsigned feedback;
6323
6324 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
6325 chksum <<= 1;
6326 chksum ^= feedback;
6327 }
6328 }
6329 while (*string++);
6330 return chksum;
6331 }
6332
6333 /* P is a string that will be used in a symbol. Mask out any characters
6334 that are not valid in that context. */
6335
6336 void
6337 clean_symbol_name (char *p)
6338 {
6339 for (; *p; p++)
6340 if (! (ISALNUM (*p)
6341 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
6342 || *p == '$'
6343 #endif
6344 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
6345 || *p == '.'
6346 #endif
6347 ))
6348 *p = '_';
6349 }
6350
6351 /* Generate a name for a special-purpose function function.
6352 The generated name may need to be unique across the whole link.
6353 TYPE is some string to identify the purpose of this function to the
6354 linker or collect2; it must start with an uppercase letter,
6355 one of:
6356 I - for constructors
6357 D - for destructors
6358 N - for C++ anonymous namespaces
6359 F - for DWARF unwind frame information. */
6360
6361 tree
6362 get_file_function_name (const char *type)
6363 {
6364 char *buf;
6365 const char *p;
6366 char *q;
6367
6368 /* If we already have a name we know to be unique, just use that. */
6369 if (first_global_object_name)
6370 p = first_global_object_name;
6371 /* If the target is handling the constructors/destructors, they
6372 will be local to this file and the name is only necessary for
6373 debugging purposes. */
6374 else if ((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
6375 {
6376 const char *file = main_input_filename;
6377 if (! file)
6378 file = input_filename;
6379 /* Just use the file's basename, because the full pathname
6380 might be quite long. */
6381 p = strrchr (file, '/');
6382 if (p)
6383 p++;
6384 else
6385 p = file;
6386 p = q = ASTRDUP (p);
6387 clean_symbol_name (q);
6388 }
6389 else
6390 {
6391 /* Otherwise, the name must be unique across the entire link.
6392 We don't have anything that we know to be unique to this translation
6393 unit, so use what we do have and throw in some randomness. */
6394 unsigned len;
6395 const char *name = weak_global_object_name;
6396 const char *file = main_input_filename;
6397
6398 if (! name)
6399 name = "";
6400 if (! file)
6401 file = input_filename;
6402
6403 len = strlen (file);
6404 q = alloca (9 * 2 + len + 1);
6405 memcpy (q, file, len + 1);
6406 clean_symbol_name (q);
6407
6408 sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
6409 crc32_string (0, flag_random_seed));
6410
6411 p = q;
6412 }
6413
6414 buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));
6415
6416 /* Set up the name of the file-level functions we may need.
6417 Use a global object (which is already required to be unique over
6418 the program) rather than the file name (which imposes extra
6419 constraints). */
6420 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
6421
6422 return get_identifier (buf);
6423 }
6424 \f
6425 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
6426
6427 /* Complain that the tree code of NODE does not match the expected 0
6428 terminated list of trailing codes. The trailing code list can be
6429 empty, for a more vague error message. FILE, LINE, and FUNCTION
6430 are of the caller. */
6431
6432 void
6433 tree_check_failed (const tree node, const char *file,
6434 int line, const char *function, ...)
6435 {
6436 va_list args;
6437 char *buffer;
6438 unsigned length = 0;
6439 int code;
6440
6441 va_start (args, function);
6442 while ((code = va_arg (args, int)))
6443 length += 4 + strlen (tree_code_name[code]);
6444 va_end (args);
6445 if (length)
6446 {
6447 va_start (args, function);
6448 length += strlen ("expected ");
6449 buffer = alloca (length);
6450 length = 0;
6451 while ((code = va_arg (args, int)))
6452 {
6453 const char *prefix = length ? " or " : "expected ";
6454
6455 strcpy (buffer + length, prefix);
6456 length += strlen (prefix);
6457 strcpy (buffer + length, tree_code_name[code]);
6458 length += strlen (tree_code_name[code]);
6459 }
6460 va_end (args);
6461 }
6462 else
6463 buffer = (char *)"unexpected node";
6464
6465 internal_error ("tree check: %s, have %s in %s, at %s:%d",
6466 buffer, tree_code_name[TREE_CODE (node)],
6467 function, trim_filename (file), line);
6468 }
6469
6470 /* Complain that the tree code of NODE does match the expected 0
6471 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
6472 the caller. */
6473
6474 void
6475 tree_not_check_failed (const tree node, const char *file,
6476 int line, const char *function, ...)
6477 {
6478 va_list args;
6479 char *buffer;
6480 unsigned length = 0;
6481 int code;
6482
6483 va_start (args, function);
6484 while ((code = va_arg (args, int)))
6485 length += 4 + strlen (tree_code_name[code]);
6486 va_end (args);
6487 va_start (args, function);
6488 buffer = alloca (length);
6489 length = 0;
6490 while ((code = va_arg (args, int)))
6491 {
6492 if (length)
6493 {
6494 strcpy (buffer + length, " or ");
6495 length += 4;
6496 }
6497 strcpy (buffer + length, tree_code_name[code]);
6498 length += strlen (tree_code_name[code]);
6499 }
6500 va_end (args);
6501
6502 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
6503 buffer, tree_code_name[TREE_CODE (node)],
6504 function, trim_filename (file), line);
6505 }
6506
6507 /* Similar to tree_check_failed, except that we check for a class of tree
6508 code, given in CL. */
6509
6510 void
6511 tree_class_check_failed (const tree node, const enum tree_code_class cl,
6512 const char *file, int line, const char *function)
6513 {
6514 internal_error
6515 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
6516 TREE_CODE_CLASS_STRING (cl),
6517 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
6518 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6519 }
6520
6521 /* Similar to tree_check_failed, except that instead of specifying a
6522 dozen codes, use the knowledge that they're all sequential. */
6523
6524 void
6525 tree_range_check_failed (const tree node, const char *file, int line,
6526 const char *function, enum tree_code c1,
6527 enum tree_code c2)
6528 {
6529 char *buffer;
6530 unsigned length = 0;
6531 enum tree_code c;
6532
6533 for (c = c1; c <= c2; ++c)
6534 length += 4 + strlen (tree_code_name[c]);
6535
6536 length += strlen ("expected ");
6537 buffer = alloca (length);
6538 length = 0;
6539
6540 for (c = c1; c <= c2; ++c)
6541 {
6542 const char *prefix = length ? " or " : "expected ";
6543
6544 strcpy (buffer + length, prefix);
6545 length += strlen (prefix);
6546 strcpy (buffer + length, tree_code_name[c]);
6547 length += strlen (tree_code_name[c]);
6548 }
6549
6550 internal_error ("tree check: %s, have %s in %s, at %s:%d",
6551 buffer, tree_code_name[TREE_CODE (node)],
6552 function, trim_filename (file), line);
6553 }
6554
6555
6556 /* Similar to tree_check_failed, except that we check that a tree does
6557 not have the specified code, given in CL. */
6558
6559 void
6560 tree_not_class_check_failed (const tree node, const enum tree_code_class cl,
6561 const char *file, int line, const char *function)
6562 {
6563 internal_error
6564 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
6565 TREE_CODE_CLASS_STRING (cl),
6566 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
6567 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6568 }
6569
6570
6571 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
6572
6573 void
6574 omp_clause_check_failed (const tree node, const char *file, int line,
6575 const char *function, enum omp_clause_code code)
6576 {
6577 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
6578 omp_clause_code_name[code], tree_code_name[TREE_CODE (node)],
6579 function, trim_filename (file), line);
6580 }
6581
6582
6583 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
6584
6585 void
6586 omp_clause_range_check_failed (const tree node, const char *file, int line,
6587 const char *function, enum omp_clause_code c1,
6588 enum omp_clause_code c2)
6589 {
6590 char *buffer;
6591 unsigned length = 0;
6592 enum omp_clause_code c;
6593
6594 for (c = c1; c <= c2; ++c)
6595 length += 4 + strlen (omp_clause_code_name[c]);
6596
6597 length += strlen ("expected ");
6598 buffer = alloca (length);
6599 length = 0;
6600
6601 for (c = c1; c <= c2; ++c)
6602 {
6603 const char *prefix = length ? " or " : "expected ";
6604
6605 strcpy (buffer + length, prefix);
6606 length += strlen (prefix);
6607 strcpy (buffer + length, omp_clause_code_name[c]);
6608 length += strlen (omp_clause_code_name[c]);
6609 }
6610
6611 internal_error ("tree check: %s, have %s in %s, at %s:%d",
6612 buffer, omp_clause_code_name[TREE_CODE (node)],
6613 function, trim_filename (file), line);
6614 }
6615
6616
6617 #undef DEFTREESTRUCT
6618 #define DEFTREESTRUCT(VAL, NAME) NAME,
6619
6620 static const char *ts_enum_names[] = {
6621 #include "treestruct.def"
6622 };
6623 #undef DEFTREESTRUCT
6624
6625 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
6626
6627 /* Similar to tree_class_check_failed, except that we check for
6628 whether CODE contains the tree structure identified by EN. */
6629
6630 void
6631 tree_contains_struct_check_failed (const tree node,
6632 const enum tree_node_structure_enum en,
6633 const char *file, int line,
6634 const char *function)
6635 {
6636 internal_error
6637 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
6638 TS_ENUM_NAME(en),
6639 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
6640 }
6641
6642
6643 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
6644 (dynamically sized) vector. */
6645
6646 void
6647 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
6648 const char *function)
6649 {
6650 internal_error
6651 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
6652 idx + 1, len, function, trim_filename (file), line);
6653 }
6654
6655 /* Similar to above, except that the check is for the bounds of a PHI_NODE's
6656 (dynamically sized) vector. */
6657
6658 void
6659 phi_node_elt_check_failed (int idx, int len, const char *file, int line,
6660 const char *function)
6661 {
6662 internal_error
6663 ("tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d",
6664 idx + 1, len, function, trim_filename (file), line);
6665 }
6666
6667 /* Similar to above, except that the check is for the bounds of the operand
6668 vector of an expression node. */
6669
6670 void
6671 tree_operand_check_failed (int idx, enum tree_code code, const char *file,
6672 int line, const char *function)
6673 {
6674 internal_error
6675 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
6676 idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
6677 function, trim_filename (file), line);
6678 }
6679
6680 /* Similar to above, except that the check is for the number of
6681 operands of an OMP_CLAUSE node. */
6682
6683 void
6684 omp_clause_operand_check_failed (int idx, tree t, const char *file,
6685 int line, const char *function)
6686 {
6687 internal_error
6688 ("tree check: accessed operand %d of omp_clause %s with %d operands "
6689 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
6690 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
6691 trim_filename (file), line);
6692 }
6693 #endif /* ENABLE_TREE_CHECKING */
6694 \f
6695 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
6696 and mapped to the machine mode MODE. Initialize its fields and build
6697 the information necessary for debugging output. */
6698
6699 static tree
6700 make_vector_type (tree innertype, int nunits, enum machine_mode mode)
6701 {
6702 tree t;
6703 hashval_t hashcode = 0;
6704
6705 /* Build a main variant, based on the main variant of the inner type, then
6706 use it to build the variant we return. */
6707 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
6708 && TYPE_MAIN_VARIANT (innertype) != innertype)
6709 return build_type_attribute_qual_variant (
6710 make_vector_type (TYPE_MAIN_VARIANT (innertype), nunits, mode),
6711 TYPE_ATTRIBUTES (innertype),
6712 TYPE_QUALS (innertype));
6713
6714 t = make_node (VECTOR_TYPE);
6715 TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
6716 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
6717 TYPE_MODE (t) = mode;
6718 TYPE_READONLY (t) = TYPE_READONLY (innertype);
6719 TYPE_VOLATILE (t) = TYPE_VOLATILE (innertype);
6720
6721 if (TYPE_STRUCTURAL_EQUALITY_P (innertype))
6722 SET_TYPE_STRUCTURAL_EQUALITY (t);
6723 else if (TYPE_CANONICAL (innertype) != innertype
6724 || mode != VOIDmode)
6725 TYPE_CANONICAL (t)
6726 = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode);
6727
6728 layout_type (t);
6729
6730 {
6731 tree index = build_int_cst (NULL_TREE, nunits - 1);
6732 tree array = build_array_type (innertype, build_index_type (index));
6733 tree rt = make_node (RECORD_TYPE);
6734
6735 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
6736 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
6737 layout_type (rt);
6738 TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
6739 /* In dwarfout.c, type lookup uses TYPE_UID numbers. We want to output
6740 the representation type, and we want to find that die when looking up
6741 the vector type. This is most easily achieved by making the TYPE_UID
6742 numbers equal. */
6743 TYPE_UID (rt) = TYPE_UID (t);
6744 }
6745
6746 hashcode = iterative_hash_host_wide_int (VECTOR_TYPE, hashcode);
6747 hashcode = iterative_hash_host_wide_int (mode, hashcode);
6748 hashcode = iterative_hash_object (TYPE_HASH (innertype), hashcode);
6749 return type_hash_canon (hashcode, t);
6750 }
6751
6752 static tree
6753 make_or_reuse_type (unsigned size, int unsignedp)
6754 {
6755 if (size == INT_TYPE_SIZE)
6756 return unsignedp ? unsigned_type_node : integer_type_node;
6757 if (size == CHAR_TYPE_SIZE)
6758 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
6759 if (size == SHORT_TYPE_SIZE)
6760 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
6761 if (size == LONG_TYPE_SIZE)
6762 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
6763 if (size == LONG_LONG_TYPE_SIZE)
6764 return (unsignedp ? long_long_unsigned_type_node
6765 : long_long_integer_type_node);
6766
6767 if (unsignedp)
6768 return make_unsigned_type (size);
6769 else
6770 return make_signed_type (size);
6771 }
6772
6773 /* Create nodes for all integer types (and error_mark_node) using the sizes
6774 of C datatypes. The caller should call set_sizetype soon after calling
6775 this function to select one of the types as sizetype. */
6776
6777 void
6778 build_common_tree_nodes (bool signed_char, bool signed_sizetype)
6779 {
6780 error_mark_node = make_node (ERROR_MARK);
6781 TREE_TYPE (error_mark_node) = error_mark_node;
6782
6783 initialize_sizetypes (signed_sizetype);
6784
6785 /* Define both `signed char' and `unsigned char'. */
6786 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6787 TYPE_STRING_FLAG (signed_char_type_node) = 1;
6788 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6789 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
6790
6791 /* Define `char', which is like either `signed char' or `unsigned char'
6792 but not the same as either. */
6793 char_type_node
6794 = (signed_char
6795 ? make_signed_type (CHAR_TYPE_SIZE)
6796 : make_unsigned_type (CHAR_TYPE_SIZE));
6797 TYPE_STRING_FLAG (char_type_node) = 1;
6798
6799 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6800 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6801 integer_type_node = make_signed_type (INT_TYPE_SIZE);
6802 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6803 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6804 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6805 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6806 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6807
6808 /* Define a boolean type. This type only represents boolean values but
6809 may be larger than char depending on the value of BOOL_TYPE_SIZE.
6810 Front ends which want to override this size (i.e. Java) can redefine
6811 boolean_type_node before calling build_common_tree_nodes_2. */
6812 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6813 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6814 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
6815 TYPE_PRECISION (boolean_type_node) = 1;
6816
6817 /* Fill in the rest of the sized types. Reuse existing type nodes
6818 when possible. */
6819 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
6820 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
6821 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
6822 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
6823 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
6824
6825 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
6826 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
6827 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
6828 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
6829 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
6830
6831 access_public_node = get_identifier ("public");
6832 access_protected_node = get_identifier ("protected");
6833 access_private_node = get_identifier ("private");
6834 }
6835
6836 /* Call this function after calling build_common_tree_nodes and set_sizetype.
6837 It will create several other common tree nodes. */
6838
6839 void
6840 build_common_tree_nodes_2 (int short_double)
6841 {
6842 /* Define these next since types below may used them. */
6843 integer_zero_node = build_int_cst (NULL_TREE, 0);
6844 integer_one_node = build_int_cst (NULL_TREE, 1);
6845 integer_minus_one_node = build_int_cst (NULL_TREE, -1);
6846
6847 size_zero_node = size_int (0);
6848 size_one_node = size_int (1);
6849 bitsize_zero_node = bitsize_int (0);
6850 bitsize_one_node = bitsize_int (1);
6851 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
6852
6853 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
6854 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
6855
6856 void_type_node = make_node (VOID_TYPE);
6857 layout_type (void_type_node);
6858
6859 /* We are not going to have real types in C with less than byte alignment,
6860 so we might as well not have any types that claim to have it. */
6861 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
6862 TYPE_USER_ALIGN (void_type_node) = 0;
6863
6864 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
6865 layout_type (TREE_TYPE (null_pointer_node));
6866
6867 ptr_type_node = build_pointer_type (void_type_node);
6868 const_ptr_type_node
6869 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
6870 fileptr_type_node = ptr_type_node;
6871
6872 float_type_node = make_node (REAL_TYPE);
6873 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6874 layout_type (float_type_node);
6875
6876 double_type_node = make_node (REAL_TYPE);
6877 if (short_double)
6878 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6879 else
6880 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6881 layout_type (double_type_node);
6882
6883 long_double_type_node = make_node (REAL_TYPE);
6884 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6885 layout_type (long_double_type_node);
6886
6887 float_ptr_type_node = build_pointer_type (float_type_node);
6888 double_ptr_type_node = build_pointer_type (double_type_node);
6889 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
6890 integer_ptr_type_node = build_pointer_type (integer_type_node);
6891
6892 /* Fixed size integer types. */
6893 uint32_type_node = build_nonstandard_integer_type (32, true);
6894 uint64_type_node = build_nonstandard_integer_type (64, true);
6895
6896 /* Decimal float types. */
6897 dfloat32_type_node = make_node (REAL_TYPE);
6898 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
6899 layout_type (dfloat32_type_node);
6900 TYPE_MODE (dfloat32_type_node) = SDmode;
6901 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
6902
6903 dfloat64_type_node = make_node (REAL_TYPE);
6904 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
6905 layout_type (dfloat64_type_node);
6906 TYPE_MODE (dfloat64_type_node) = DDmode;
6907 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
6908
6909 dfloat128_type_node = make_node (REAL_TYPE);
6910 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
6911 layout_type (dfloat128_type_node);
6912 TYPE_MODE (dfloat128_type_node) = TDmode;
6913 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
6914
6915 complex_integer_type_node = make_node (COMPLEX_TYPE);
6916 TREE_TYPE (complex_integer_type_node) = integer_type_node;
6917 layout_type (complex_integer_type_node);
6918
6919 complex_float_type_node = make_node (COMPLEX_TYPE);
6920 TREE_TYPE (complex_float_type_node) = float_type_node;
6921 layout_type (complex_float_type_node);
6922
6923 complex_double_type_node = make_node (COMPLEX_TYPE);
6924 TREE_TYPE (complex_double_type_node) = double_type_node;
6925 layout_type (complex_double_type_node);
6926
6927 complex_long_double_type_node = make_node (COMPLEX_TYPE);
6928 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6929 layout_type (complex_long_double_type_node);
6930
6931 {
6932 tree t = targetm.build_builtin_va_list ();
6933
6934 /* Many back-ends define record types without setting TYPE_NAME.
6935 If we copied the record type here, we'd keep the original
6936 record type without a name. This breaks name mangling. So,
6937 don't copy record types and let c_common_nodes_and_builtins()
6938 declare the type to be __builtin_va_list. */
6939 if (TREE_CODE (t) != RECORD_TYPE)
6940 t = build_variant_type_copy (t);
6941
6942 va_list_type_node = t;
6943 }
6944 }
6945
6946 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
6947
6948 static void
6949 local_define_builtin (const char *name, tree type, enum built_in_function code,
6950 const char *library_name, int ecf_flags)
6951 {
6952 tree decl;
6953
6954 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
6955 library_name, NULL_TREE);
6956 if (ecf_flags & ECF_CONST)
6957 TREE_READONLY (decl) = 1;
6958 if (ecf_flags & ECF_PURE)
6959 DECL_IS_PURE (decl) = 1;
6960 if (ecf_flags & ECF_NORETURN)
6961 TREE_THIS_VOLATILE (decl) = 1;
6962 if (ecf_flags & ECF_NOTHROW)
6963 TREE_NOTHROW (decl) = 1;
6964 if (ecf_flags & ECF_MALLOC)
6965 DECL_IS_MALLOC (decl) = 1;
6966
6967 built_in_decls[code] = decl;
6968 implicit_built_in_decls[code] = decl;
6969 }
6970
6971 /* Call this function after instantiating all builtins that the language
6972 front end cares about. This will build the rest of the builtins that
6973 are relied upon by the tree optimizers and the middle-end. */
6974
6975 void
6976 build_common_builtin_nodes (void)
6977 {
6978 tree tmp, ftype;
6979
6980 if (built_in_decls[BUILT_IN_MEMCPY] == NULL
6981 || built_in_decls[BUILT_IN_MEMMOVE] == NULL)
6982 {
6983 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
6984 tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
6985 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6986 ftype = build_function_type (ptr_type_node, tmp);
6987
6988 if (built_in_decls[BUILT_IN_MEMCPY] == NULL)
6989 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
6990 "memcpy", ECF_NOTHROW);
6991 if (built_in_decls[BUILT_IN_MEMMOVE] == NULL)
6992 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
6993 "memmove", ECF_NOTHROW);
6994 }
6995
6996 if (built_in_decls[BUILT_IN_MEMCMP] == NULL)
6997 {
6998 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
6999 tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
7000 tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
7001 ftype = build_function_type (integer_type_node, tmp);
7002 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
7003 "memcmp", ECF_PURE | ECF_NOTHROW);
7004 }
7005
7006 if (built_in_decls[BUILT_IN_MEMSET] == NULL)
7007 {
7008 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
7009 tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
7010 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7011 ftype = build_function_type (ptr_type_node, tmp);
7012 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
7013 "memset", ECF_NOTHROW);
7014 }
7015
7016 if (built_in_decls[BUILT_IN_ALLOCA] == NULL)
7017 {
7018 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
7019 ftype = build_function_type (ptr_type_node, tmp);
7020 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
7021 "alloca", ECF_NOTHROW | ECF_MALLOC);
7022 }
7023
7024 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7025 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7026 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7027 ftype = build_function_type (void_type_node, tmp);
7028 local_define_builtin ("__builtin_init_trampoline", ftype,
7029 BUILT_IN_INIT_TRAMPOLINE,
7030 "__builtin_init_trampoline", ECF_NOTHROW);
7031
7032 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7033 ftype = build_function_type (ptr_type_node, tmp);
7034 local_define_builtin ("__builtin_adjust_trampoline", ftype,
7035 BUILT_IN_ADJUST_TRAMPOLINE,
7036 "__builtin_adjust_trampoline",
7037 ECF_CONST | ECF_NOTHROW);
7038
7039 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7040 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7041 ftype = build_function_type (void_type_node, tmp);
7042 local_define_builtin ("__builtin_nonlocal_goto", ftype,
7043 BUILT_IN_NONLOCAL_GOTO,
7044 "__builtin_nonlocal_goto",
7045 ECF_NORETURN | ECF_NOTHROW);
7046
7047 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7048 tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
7049 ftype = build_function_type (void_type_node, tmp);
7050 local_define_builtin ("__builtin_setjmp_setup", ftype,
7051 BUILT_IN_SETJMP_SETUP,
7052 "__builtin_setjmp_setup", ECF_NOTHROW);
7053
7054 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7055 ftype = build_function_type (ptr_type_node, tmp);
7056 local_define_builtin ("__builtin_setjmp_dispatcher", ftype,
7057 BUILT_IN_SETJMP_DISPATCHER,
7058 "__builtin_setjmp_dispatcher",
7059 ECF_PURE | ECF_NOTHROW);
7060
7061 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7062 ftype = build_function_type (void_type_node, tmp);
7063 local_define_builtin ("__builtin_setjmp_receiver", ftype,
7064 BUILT_IN_SETJMP_RECEIVER,
7065 "__builtin_setjmp_receiver", ECF_NOTHROW);
7066
7067 ftype = build_function_type (ptr_type_node, void_list_node);
7068 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
7069 "__builtin_stack_save", ECF_NOTHROW);
7070
7071 tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
7072 ftype = build_function_type (void_type_node, tmp);
7073 local_define_builtin ("__builtin_stack_restore", ftype,
7074 BUILT_IN_STACK_RESTORE,
7075 "__builtin_stack_restore", ECF_NOTHROW);
7076
7077 ftype = build_function_type (void_type_node, void_list_node);
7078 local_define_builtin ("__builtin_profile_func_enter", ftype,
7079 BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter", 0);
7080 local_define_builtin ("__builtin_profile_func_exit", ftype,
7081 BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit", 0);
7082
7083 /* Complex multiplication and division. These are handled as builtins
7084 rather than optabs because emit_library_call_value doesn't support
7085 complex. Further, we can do slightly better with folding these
7086 beasties if the real and complex parts of the arguments are separate. */
7087 {
7088 enum machine_mode mode;
7089
7090 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
7091 {
7092 char mode_name_buf[4], *q;
7093 const char *p;
7094 enum built_in_function mcode, dcode;
7095 tree type, inner_type;
7096
7097 type = lang_hooks.types.type_for_mode (mode, 0);
7098 if (type == NULL)
7099 continue;
7100 inner_type = TREE_TYPE (type);
7101
7102 tmp = tree_cons (NULL_TREE, inner_type, void_list_node);
7103 tmp = tree_cons (NULL_TREE, inner_type, tmp);
7104 tmp = tree_cons (NULL_TREE, inner_type, tmp);
7105 tmp = tree_cons (NULL_TREE, inner_type, tmp);
7106 ftype = build_function_type (type, tmp);
7107
7108 mcode = BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
7109 dcode = BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
7110
7111 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
7112 *q = TOLOWER (*p);
7113 *q = '\0';
7114
7115 built_in_names[mcode] = concat ("__mul", mode_name_buf, "3", NULL);
7116 local_define_builtin (built_in_names[mcode], ftype, mcode,
7117 built_in_names[mcode], ECF_CONST | ECF_NOTHROW);
7118
7119 built_in_names[dcode] = concat ("__div", mode_name_buf, "3", NULL);
7120 local_define_builtin (built_in_names[dcode], ftype, dcode,
7121 built_in_names[dcode], ECF_CONST | ECF_NOTHROW);
7122 }
7123 }
7124 }
7125
7126 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
7127 better way.
7128
7129 If we requested a pointer to a vector, build up the pointers that
7130 we stripped off while looking for the inner type. Similarly for
7131 return values from functions.
7132
7133 The argument TYPE is the top of the chain, and BOTTOM is the
7134 new type which we will point to. */
7135
7136 tree
7137 reconstruct_complex_type (tree type, tree bottom)
7138 {
7139 tree inner, outer;
7140
7141 if (POINTER_TYPE_P (type))
7142 {
7143 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7144 outer = build_pointer_type (inner);
7145 }
7146 else if (TREE_CODE (type) == ARRAY_TYPE)
7147 {
7148 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7149 outer = build_array_type (inner, TYPE_DOMAIN (type));
7150 }
7151 else if (TREE_CODE (type) == FUNCTION_TYPE)
7152 {
7153 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7154 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
7155 }
7156 else if (TREE_CODE (type) == METHOD_TYPE)
7157 {
7158 tree argtypes;
7159 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
7160 /* The build_method_type_directly() routine prepends 'this' to argument list,
7161 so we must compensate by getting rid of it. */
7162 argtypes = TYPE_ARG_TYPES (type);
7163 outer = build_method_type_directly (TYPE_METHOD_BASETYPE (type),
7164 inner,
7165 TYPE_ARG_TYPES (type));
7166 TYPE_ARG_TYPES (outer) = argtypes;
7167 }
7168 else
7169 return bottom;
7170
7171 TYPE_READONLY (outer) = TYPE_READONLY (type);
7172 TYPE_VOLATILE (outer) = TYPE_VOLATILE (type);
7173
7174 return outer;
7175 }
7176
7177 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
7178 the inner type. */
7179 tree
7180 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
7181 {
7182 int nunits;
7183
7184 switch (GET_MODE_CLASS (mode))
7185 {
7186 case MODE_VECTOR_INT:
7187 case MODE_VECTOR_FLOAT:
7188 nunits = GET_MODE_NUNITS (mode);
7189 break;
7190
7191 case MODE_INT:
7192 /* Check that there are no leftover bits. */
7193 gcc_assert (GET_MODE_BITSIZE (mode)
7194 % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
7195
7196 nunits = GET_MODE_BITSIZE (mode)
7197 / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
7198 break;
7199
7200 default:
7201 gcc_unreachable ();
7202 }
7203
7204 return make_vector_type (innertype, nunits, mode);
7205 }
7206
7207 /* Similarly, but takes the inner type and number of units, which must be
7208 a power of two. */
7209
7210 tree
7211 build_vector_type (tree innertype, int nunits)
7212 {
7213 return make_vector_type (innertype, nunits, VOIDmode);
7214 }
7215
7216
7217 /* Build RESX_EXPR with given REGION_NUMBER. */
7218 tree
7219 build_resx (int region_number)
7220 {
7221 tree t;
7222 t = build1 (RESX_EXPR, void_type_node,
7223 build_int_cst (NULL_TREE, region_number));
7224 return t;
7225 }
7226
7227 /* Given an initializer INIT, return TRUE if INIT is zero or some
7228 aggregate of zeros. Otherwise return FALSE. */
7229 bool
7230 initializer_zerop (tree init)
7231 {
7232 tree elt;
7233
7234 STRIP_NOPS (init);
7235
7236 switch (TREE_CODE (init))
7237 {
7238 case INTEGER_CST:
7239 return integer_zerop (init);
7240
7241 case REAL_CST:
7242 /* ??? Note that this is not correct for C4X float formats. There,
7243 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
7244 negative exponent. */
7245 return real_zerop (init)
7246 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
7247
7248 case COMPLEX_CST:
7249 return integer_zerop (init)
7250 || (real_zerop (init)
7251 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
7252 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
7253
7254 case VECTOR_CST:
7255 for (elt = TREE_VECTOR_CST_ELTS (init); elt; elt = TREE_CHAIN (elt))
7256 if (!initializer_zerop (TREE_VALUE (elt)))
7257 return false;
7258 return true;
7259
7260 case CONSTRUCTOR:
7261 {
7262 unsigned HOST_WIDE_INT idx;
7263
7264 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
7265 if (!initializer_zerop (elt))
7266 return false;
7267 return true;
7268 }
7269
7270 default:
7271 return false;
7272 }
7273 }
7274
7275 /* Build an empty statement. */
7276
7277 tree
7278 build_empty_stmt (void)
7279 {
7280 return build1 (NOP_EXPR, void_type_node, size_zero_node);
7281 }
7282
7283
7284 /* Build an OpenMP clause with code CODE. */
7285
7286 tree
7287 build_omp_clause (enum omp_clause_code code)
7288 {
7289 tree t;
7290 int size, length;
7291
7292 length = omp_clause_num_ops[code];
7293 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
7294
7295 t = ggc_alloc (size);
7296 memset (t, 0, size);
7297 TREE_SET_CODE (t, OMP_CLAUSE);
7298 OMP_CLAUSE_SET_CODE (t, code);
7299
7300 #ifdef GATHER_STATISTICS
7301 tree_node_counts[(int) omp_clause_kind]++;
7302 tree_node_sizes[(int) omp_clause_kind] += size;
7303 #endif
7304
7305 return t;
7306 }
7307
7308
7309 /* Returns true if it is possible to prove that the index of
7310 an array access REF (an ARRAY_REF expression) falls into the
7311 array bounds. */
7312
7313 bool
7314 in_array_bounds_p (tree ref)
7315 {
7316 tree idx = TREE_OPERAND (ref, 1);
7317 tree min, max;
7318
7319 if (TREE_CODE (idx) != INTEGER_CST)
7320 return false;
7321
7322 min = array_ref_low_bound (ref);
7323 max = array_ref_up_bound (ref);
7324 if (!min
7325 || !max
7326 || TREE_CODE (min) != INTEGER_CST
7327 || TREE_CODE (max) != INTEGER_CST)
7328 return false;
7329
7330 if (tree_int_cst_lt (idx, min)
7331 || tree_int_cst_lt (max, idx))
7332 return false;
7333
7334 return true;
7335 }
7336
7337 /* Returns true if it is possible to prove that the range of
7338 an array access REF (an ARRAY_RANGE_REF expression) falls
7339 into the array bounds. */
7340
7341 bool
7342 range_in_array_bounds_p (tree ref)
7343 {
7344 tree domain_type = TYPE_DOMAIN (TREE_TYPE (ref));
7345 tree range_min, range_max, min, max;
7346
7347 range_min = TYPE_MIN_VALUE (domain_type);
7348 range_max = TYPE_MAX_VALUE (domain_type);
7349 if (!range_min
7350 || !range_max
7351 || TREE_CODE (range_min) != INTEGER_CST
7352 || TREE_CODE (range_max) != INTEGER_CST)
7353 return false;
7354
7355 min = array_ref_low_bound (ref);
7356 max = array_ref_up_bound (ref);
7357 if (!min
7358 || !max
7359 || TREE_CODE (min) != INTEGER_CST
7360 || TREE_CODE (max) != INTEGER_CST)
7361 return false;
7362
7363 if (tree_int_cst_lt (range_min, min)
7364 || tree_int_cst_lt (max, range_max))
7365 return false;
7366
7367 return true;
7368 }
7369
7370 /* Return true if T (assumed to be a DECL) is a global variable. */
7371
7372 bool
7373 is_global_var (tree t)
7374 {
7375 if (MTAG_P (t))
7376 return (TREE_STATIC (t) || MTAG_GLOBAL (t));
7377 else
7378 return (TREE_STATIC (t) || DECL_EXTERNAL (t));
7379 }
7380
7381 /* Return true if T (assumed to be a DECL) must be assigned a memory
7382 location. */
7383
7384 bool
7385 needs_to_live_in_memory (tree t)
7386 {
7387 if (TREE_CODE (t) == SSA_NAME)
7388 t = SSA_NAME_VAR (t);
7389
7390 return (TREE_ADDRESSABLE (t)
7391 || is_global_var (t)
7392 || (TREE_CODE (t) == RESULT_DECL
7393 && aggregate_value_p (t, current_function_decl)));
7394 }
7395
7396 /* There are situations in which a language considers record types
7397 compatible which have different field lists. Decide if two fields
7398 are compatible. It is assumed that the parent records are compatible. */
7399
7400 bool
7401 fields_compatible_p (tree f1, tree f2)
7402 {
7403 if (!operand_equal_p (DECL_FIELD_BIT_OFFSET (f1),
7404 DECL_FIELD_BIT_OFFSET (f2), OEP_ONLY_CONST))
7405 return false;
7406
7407 if (!operand_equal_p (DECL_FIELD_OFFSET (f1),
7408 DECL_FIELD_OFFSET (f2), OEP_ONLY_CONST))
7409 return false;
7410
7411 if (!lang_hooks.types_compatible_p (TREE_TYPE (f1), TREE_TYPE (f2)))
7412 return false;
7413
7414 return true;
7415 }
7416
7417 /* Locate within RECORD a field that is compatible with ORIG_FIELD. */
7418
7419 tree
7420 find_compatible_field (tree record, tree orig_field)
7421 {
7422 tree f;
7423
7424 for (f = TYPE_FIELDS (record); f ; f = TREE_CHAIN (f))
7425 if (TREE_CODE (f) == FIELD_DECL
7426 && fields_compatible_p (f, orig_field))
7427 return f;
7428
7429 /* ??? Why isn't this on the main fields list? */
7430 f = TYPE_VFIELD (record);
7431 if (f && TREE_CODE (f) == FIELD_DECL
7432 && fields_compatible_p (f, orig_field))
7433 return f;
7434
7435 /* ??? We should abort here, but Java appears to do Bad Things
7436 with inherited fields. */
7437 return orig_field;
7438 }
7439
7440 /* Return value of a constant X. */
7441
7442 HOST_WIDE_INT
7443 int_cst_value (tree x)
7444 {
7445 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
7446 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
7447 bool negative = ((val >> (bits - 1)) & 1) != 0;
7448
7449 gcc_assert (bits <= HOST_BITS_PER_WIDE_INT);
7450
7451 if (negative)
7452 val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
7453 else
7454 val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
7455
7456 return val;
7457 }
7458
7459
7460 /* Returns unsigned variant of TYPE. */
7461
7462 tree
7463 unsigned_type_for (tree type)
7464 {
7465 if (POINTER_TYPE_P (type))
7466 return lang_hooks.types.unsigned_type (size_type_node);
7467 return lang_hooks.types.unsigned_type (type);
7468 }
7469
7470 /* Returns signed variant of TYPE. */
7471
7472 tree
7473 signed_type_for (tree type)
7474 {
7475 if (POINTER_TYPE_P (type))
7476 return lang_hooks.types.signed_type (size_type_node);
7477 return lang_hooks.types.signed_type (type);
7478 }
7479
7480 /* Returns the largest value obtainable by casting something in INNER type to
7481 OUTER type. */
7482
7483 tree
7484 upper_bound_in_type (tree outer, tree inner)
7485 {
7486 unsigned HOST_WIDE_INT lo, hi;
7487 unsigned int det = 0;
7488 unsigned oprec = TYPE_PRECISION (outer);
7489 unsigned iprec = TYPE_PRECISION (inner);
7490 unsigned prec;
7491
7492 /* Compute a unique number for every combination. */
7493 det |= (oprec > iprec) ? 4 : 0;
7494 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
7495 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
7496
7497 /* Determine the exponent to use. */
7498 switch (det)
7499 {
7500 case 0:
7501 case 1:
7502 /* oprec <= iprec, outer: signed, inner: don't care. */
7503 prec = oprec - 1;
7504 break;
7505 case 2:
7506 case 3:
7507 /* oprec <= iprec, outer: unsigned, inner: don't care. */
7508 prec = oprec;
7509 break;
7510 case 4:
7511 /* oprec > iprec, outer: signed, inner: signed. */
7512 prec = iprec - 1;
7513 break;
7514 case 5:
7515 /* oprec > iprec, outer: signed, inner: unsigned. */
7516 prec = iprec;
7517 break;
7518 case 6:
7519 /* oprec > iprec, outer: unsigned, inner: signed. */
7520 prec = oprec;
7521 break;
7522 case 7:
7523 /* oprec > iprec, outer: unsigned, inner: unsigned. */
7524 prec = iprec;
7525 break;
7526 default:
7527 gcc_unreachable ();
7528 }
7529
7530 /* Compute 2^^prec - 1. */
7531 if (prec <= HOST_BITS_PER_WIDE_INT)
7532 {
7533 hi = 0;
7534 lo = ((~(unsigned HOST_WIDE_INT) 0)
7535 >> (HOST_BITS_PER_WIDE_INT - prec));
7536 }
7537 else
7538 {
7539 hi = ((~(unsigned HOST_WIDE_INT) 0)
7540 >> (2 * HOST_BITS_PER_WIDE_INT - prec));
7541 lo = ~(unsigned HOST_WIDE_INT) 0;
7542 }
7543
7544 return build_int_cst_wide (outer, lo, hi);
7545 }
7546
7547 /* Returns the smallest value obtainable by casting something in INNER type to
7548 OUTER type. */
7549
7550 tree
7551 lower_bound_in_type (tree outer, tree inner)
7552 {
7553 unsigned HOST_WIDE_INT lo, hi;
7554 unsigned oprec = TYPE_PRECISION (outer);
7555 unsigned iprec = TYPE_PRECISION (inner);
7556
7557 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
7558 and obtain 0. */
7559 if (TYPE_UNSIGNED (outer)
7560 /* If we are widening something of an unsigned type, OUTER type
7561 contains all values of INNER type. In particular, both INNER
7562 and OUTER types have zero in common. */
7563 || (oprec > iprec && TYPE_UNSIGNED (inner)))
7564 lo = hi = 0;
7565 else
7566 {
7567 /* If we are widening a signed type to another signed type, we
7568 want to obtain -2^^(iprec-1). If we are keeping the
7569 precision or narrowing to a signed type, we want to obtain
7570 -2^(oprec-1). */
7571 unsigned prec = oprec > iprec ? iprec : oprec;
7572
7573 if (prec <= HOST_BITS_PER_WIDE_INT)
7574 {
7575 hi = ~(unsigned HOST_WIDE_INT) 0;
7576 lo = (~(unsigned HOST_WIDE_INT) 0) << (prec - 1);
7577 }
7578 else
7579 {
7580 hi = ((~(unsigned HOST_WIDE_INT) 0)
7581 << (prec - HOST_BITS_PER_WIDE_INT - 1));
7582 lo = 0;
7583 }
7584 }
7585
7586 return build_int_cst_wide (outer, lo, hi);
7587 }
7588
7589 /* Return nonzero if two operands that are suitable for PHI nodes are
7590 necessarily equal. Specifically, both ARG0 and ARG1 must be either
7591 SSA_NAME or invariant. Note that this is strictly an optimization.
7592 That is, callers of this function can directly call operand_equal_p
7593 and get the same result, only slower. */
7594
7595 int
7596 operand_equal_for_phi_arg_p (tree arg0, tree arg1)
7597 {
7598 if (arg0 == arg1)
7599 return 1;
7600 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
7601 return 0;
7602 return operand_equal_p (arg0, arg1, 0);
7603 }
7604
7605 /* Returns number of zeros at the end of binary representation of X.
7606
7607 ??? Use ffs if available? */
7608
7609 tree
7610 num_ending_zeros (tree x)
7611 {
7612 unsigned HOST_WIDE_INT fr, nfr;
7613 unsigned num, abits;
7614 tree type = TREE_TYPE (x);
7615
7616 if (TREE_INT_CST_LOW (x) == 0)
7617 {
7618 num = HOST_BITS_PER_WIDE_INT;
7619 fr = TREE_INT_CST_HIGH (x);
7620 }
7621 else
7622 {
7623 num = 0;
7624 fr = TREE_INT_CST_LOW (x);
7625 }
7626
7627 for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
7628 {
7629 nfr = fr >> abits;
7630 if (nfr << abits == fr)
7631 {
7632 num += abits;
7633 fr = nfr;
7634 }
7635 }
7636
7637 if (num > TYPE_PRECISION (type))
7638 num = TYPE_PRECISION (type);
7639
7640 return build_int_cst_type (type, num);
7641 }
7642
7643
7644 #define WALK_SUBTREE(NODE) \
7645 do \
7646 { \
7647 result = walk_tree (&(NODE), func, data, pset); \
7648 if (result) \
7649 return result; \
7650 } \
7651 while (0)
7652
7653 /* This is a subroutine of walk_tree that walks field of TYPE that are to
7654 be walked whenever a type is seen in the tree. Rest of operands and return
7655 value are as for walk_tree. */
7656
7657 static tree
7658 walk_type_fields (tree type, walk_tree_fn func, void *data,
7659 struct pointer_set_t *pset)
7660 {
7661 tree result = NULL_TREE;
7662
7663 switch (TREE_CODE (type))
7664 {
7665 case POINTER_TYPE:
7666 case REFERENCE_TYPE:
7667 /* We have to worry about mutually recursive pointers. These can't
7668 be written in C. They can in Ada. It's pathological, but
7669 there's an ACATS test (c38102a) that checks it. Deal with this
7670 by checking if we're pointing to another pointer, that one
7671 points to another pointer, that one does too, and we have no htab.
7672 If so, get a hash table. We check three levels deep to avoid
7673 the cost of the hash table if we don't need one. */
7674 if (POINTER_TYPE_P (TREE_TYPE (type))
7675 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
7676 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
7677 && !pset)
7678 {
7679 result = walk_tree_without_duplicates (&TREE_TYPE (type),
7680 func, data);
7681 if (result)
7682 return result;
7683
7684 break;
7685 }
7686
7687 /* ... fall through ... */
7688
7689 case COMPLEX_TYPE:
7690 WALK_SUBTREE (TREE_TYPE (type));
7691 break;
7692
7693 case METHOD_TYPE:
7694 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
7695
7696 /* Fall through. */
7697
7698 case FUNCTION_TYPE:
7699 WALK_SUBTREE (TREE_TYPE (type));
7700 {
7701 tree arg;
7702
7703 /* We never want to walk into default arguments. */
7704 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
7705 WALK_SUBTREE (TREE_VALUE (arg));
7706 }
7707 break;
7708
7709 case ARRAY_TYPE:
7710 /* Don't follow this nodes's type if a pointer for fear that we'll
7711 have infinite recursion. Those types are uninteresting anyway. */
7712 if (!POINTER_TYPE_P (TREE_TYPE (type))
7713 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)
7714 WALK_SUBTREE (TREE_TYPE (type));
7715 WALK_SUBTREE (TYPE_DOMAIN (type));
7716 break;
7717
7718 case OFFSET_TYPE:
7719 WALK_SUBTREE (TREE_TYPE (type));
7720 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
7721 break;
7722
7723 default:
7724 break;
7725 }
7726
7727 return NULL_TREE;
7728 }
7729
7730 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
7731 called with the DATA and the address of each sub-tree. If FUNC returns a
7732 non-NULL value, the traversal is stopped, and the value returned by FUNC
7733 is returned. If PSET is non-NULL it is used to record the nodes visited,
7734 and to avoid visiting a node more than once. */
7735
7736 tree
7737 walk_tree (tree *tp, walk_tree_fn func, void *data, struct pointer_set_t *pset)
7738 {
7739 enum tree_code code;
7740 int walk_subtrees;
7741 tree result;
7742
7743 #define WALK_SUBTREE_TAIL(NODE) \
7744 do \
7745 { \
7746 tp = & (NODE); \
7747 goto tail_recurse; \
7748 } \
7749 while (0)
7750
7751 tail_recurse:
7752 /* Skip empty subtrees. */
7753 if (!*tp)
7754 return NULL_TREE;
7755
7756 /* Don't walk the same tree twice, if the user has requested
7757 that we avoid doing so. */
7758 if (pset && pointer_set_insert (pset, *tp))
7759 return NULL_TREE;
7760
7761 /* Call the function. */
7762 walk_subtrees = 1;
7763 result = (*func) (tp, &walk_subtrees, data);
7764
7765 /* If we found something, return it. */
7766 if (result)
7767 return result;
7768
7769 code = TREE_CODE (*tp);
7770
7771 /* Even if we didn't, FUNC may have decided that there was nothing
7772 interesting below this point in the tree. */
7773 if (!walk_subtrees)
7774 {
7775 /* But we still need to check our siblings. */
7776 if (code == TREE_LIST)
7777 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
7778 else if (code == OMP_CLAUSE)
7779 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
7780 else
7781 return NULL_TREE;
7782 }
7783
7784 result = lang_hooks.tree_inlining.walk_subtrees (tp, &walk_subtrees, func,
7785 data, pset);
7786 if (result || !walk_subtrees)
7787 return result;
7788
7789 switch (code)
7790 {
7791 case ERROR_MARK:
7792 case IDENTIFIER_NODE:
7793 case INTEGER_CST:
7794 case REAL_CST:
7795 case VECTOR_CST:
7796 case STRING_CST:
7797 case BLOCK:
7798 case PLACEHOLDER_EXPR:
7799 case SSA_NAME:
7800 case FIELD_DECL:
7801 case RESULT_DECL:
7802 /* None of these have subtrees other than those already walked
7803 above. */
7804 break;
7805
7806 case TREE_LIST:
7807 WALK_SUBTREE (TREE_VALUE (*tp));
7808 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
7809 break;
7810
7811 case TREE_VEC:
7812 {
7813 int len = TREE_VEC_LENGTH (*tp);
7814
7815 if (len == 0)
7816 break;
7817
7818 /* Walk all elements but the first. */
7819 while (--len)
7820 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
7821
7822 /* Now walk the first one as a tail call. */
7823 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
7824 }
7825
7826 case COMPLEX_CST:
7827 WALK_SUBTREE (TREE_REALPART (*tp));
7828 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
7829
7830 case CONSTRUCTOR:
7831 {
7832 unsigned HOST_WIDE_INT idx;
7833 constructor_elt *ce;
7834
7835 for (idx = 0;
7836 VEC_iterate(constructor_elt, CONSTRUCTOR_ELTS (*tp), idx, ce);
7837 idx++)
7838 WALK_SUBTREE (ce->value);
7839 }
7840 break;
7841
7842 case SAVE_EXPR:
7843 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
7844
7845 case BIND_EXPR:
7846 {
7847 tree decl;
7848 for (decl = BIND_EXPR_VARS (*tp); decl; decl = TREE_CHAIN (decl))
7849 {
7850 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
7851 into declarations that are just mentioned, rather than
7852 declared; they don't really belong to this part of the tree.
7853 And, we can see cycles: the initializer for a declaration
7854 can refer to the declaration itself. */
7855 WALK_SUBTREE (DECL_INITIAL (decl));
7856 WALK_SUBTREE (DECL_SIZE (decl));
7857 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
7858 }
7859 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
7860 }
7861
7862 case STATEMENT_LIST:
7863 {
7864 tree_stmt_iterator i;
7865 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
7866 WALK_SUBTREE (*tsi_stmt_ptr (i));
7867 }
7868 break;
7869
7870 case OMP_CLAUSE:
7871 switch (OMP_CLAUSE_CODE (*tp))
7872 {
7873 case OMP_CLAUSE_PRIVATE:
7874 case OMP_CLAUSE_SHARED:
7875 case OMP_CLAUSE_FIRSTPRIVATE:
7876 case OMP_CLAUSE_LASTPRIVATE:
7877 case OMP_CLAUSE_COPYIN:
7878 case OMP_CLAUSE_COPYPRIVATE:
7879 case OMP_CLAUSE_IF:
7880 case OMP_CLAUSE_NUM_THREADS:
7881 case OMP_CLAUSE_SCHEDULE:
7882 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
7883 /* FALLTHRU */
7884
7885 case OMP_CLAUSE_NOWAIT:
7886 case OMP_CLAUSE_ORDERED:
7887 case OMP_CLAUSE_DEFAULT:
7888 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
7889
7890 case OMP_CLAUSE_REDUCTION:
7891 {
7892 int i;
7893 for (i = 0; i < 4; i++)
7894 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
7895 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
7896 }
7897
7898 default:
7899 gcc_unreachable ();
7900 }
7901 break;
7902
7903 case TARGET_EXPR:
7904 {
7905 int i, len;
7906
7907 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
7908 But, we only want to walk once. */
7909 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
7910 for (i = 0; i < len; ++i)
7911 WALK_SUBTREE (TREE_OPERAND (*tp, i));
7912 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
7913 }
7914
7915 case DECL_EXPR:
7916 /* If this is a TYPE_DECL, walk into the fields of the type that it's
7917 defining. We only want to walk into these fields of a type in this
7918 case and not in the general case of a mere reference to the type.
7919
7920 The criterion is as follows: if the field can be an expression, it
7921 must be walked only here. This should be in keeping with the fields
7922 that are directly gimplified in gimplify_type_sizes in order for the
7923 mark/copy-if-shared/unmark machinery of the gimplifier to work with
7924 variable-sized types.
7925
7926 Note that DECLs get walked as part of processing the BIND_EXPR. */
7927 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
7928 {
7929 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
7930 if (TREE_CODE (*type_p) == ERROR_MARK)
7931 return NULL_TREE;
7932
7933 /* Call the function for the type. See if it returns anything or
7934 doesn't want us to continue. If we are to continue, walk both
7935 the normal fields and those for the declaration case. */
7936 result = (*func) (type_p, &walk_subtrees, data);
7937 if (result || !walk_subtrees)
7938 return result;
7939
7940 result = walk_type_fields (*type_p, func, data, pset);
7941 if (result)
7942 return result;
7943
7944 /* If this is a record type, also walk the fields. */
7945 if (TREE_CODE (*type_p) == RECORD_TYPE
7946 || TREE_CODE (*type_p) == UNION_TYPE
7947 || TREE_CODE (*type_p) == QUAL_UNION_TYPE)
7948 {
7949 tree field;
7950
7951 for (field = TYPE_FIELDS (*type_p); field;
7952 field = TREE_CHAIN (field))
7953 {
7954 /* We'd like to look at the type of the field, but we can
7955 easily get infinite recursion. So assume it's pointed
7956 to elsewhere in the tree. Also, ignore things that
7957 aren't fields. */
7958 if (TREE_CODE (field) != FIELD_DECL)
7959 continue;
7960
7961 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
7962 WALK_SUBTREE (DECL_SIZE (field));
7963 WALK_SUBTREE (DECL_SIZE_UNIT (field));
7964 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
7965 WALK_SUBTREE (DECL_QUALIFIER (field));
7966 }
7967 }
7968
7969 /* Same for scalar types. */
7970 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
7971 || TREE_CODE (*type_p) == ENUMERAL_TYPE
7972 || TREE_CODE (*type_p) == INTEGER_TYPE
7973 || TREE_CODE (*type_p) == REAL_TYPE)
7974 {
7975 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
7976 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
7977 }
7978
7979 WALK_SUBTREE (TYPE_SIZE (*type_p));
7980 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
7981 }
7982 /* FALLTHRU */
7983
7984 default:
7985 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code))
7986 || IS_GIMPLE_STMT_CODE_CLASS (TREE_CODE_CLASS (code)))
7987 {
7988 int i, len;
7989
7990 /* Walk over all the sub-trees of this operand. */
7991 len = TREE_CODE_LENGTH (code);
7992
7993 /* Go through the subtrees. We need to do this in forward order so
7994 that the scope of a FOR_EXPR is handled properly. */
7995 if (len)
7996 {
7997 for (i = 0; i < len - 1; ++i)
7998 WALK_SUBTREE (GENERIC_TREE_OPERAND (*tp, i));
7999 WALK_SUBTREE_TAIL (GENERIC_TREE_OPERAND (*tp, len - 1));
8000 }
8001 }
8002 /* If this is a type, walk the needed fields in the type. */
8003 else if (TYPE_P (*tp))
8004 return walk_type_fields (*tp, func, data, pset);
8005 break;
8006 }
8007
8008 /* We didn't find what we were looking for. */
8009 return NULL_TREE;
8010
8011 #undef WALK_SUBTREE_TAIL
8012 }
8013 #undef WALK_SUBTREE
8014
8015 /* Like walk_tree, but does not walk duplicate nodes more than once. */
8016
8017 tree
8018 walk_tree_without_duplicates (tree *tp, walk_tree_fn func, void *data)
8019 {
8020 tree result;
8021 struct pointer_set_t *pset;
8022
8023 pset = pointer_set_create ();
8024 result = walk_tree (tp, func, data, pset);
8025 pointer_set_destroy (pset);
8026 return result;
8027 }
8028
8029
8030 /* Return true if STMT is an empty statement or contains nothing but
8031 empty statements. */
8032
8033 bool
8034 empty_body_p (tree stmt)
8035 {
8036 tree_stmt_iterator i;
8037 tree body;
8038
8039 if (IS_EMPTY_STMT (stmt))
8040 return true;
8041 else if (TREE_CODE (stmt) == BIND_EXPR)
8042 body = BIND_EXPR_BODY (stmt);
8043 else if (TREE_CODE (stmt) == STATEMENT_LIST)
8044 body = stmt;
8045 else
8046 return false;
8047
8048 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
8049 if (!empty_body_p (tsi_stmt (i)))
8050 return false;
8051
8052 return true;
8053 }
8054
8055 tree *
8056 tree_block (tree t)
8057 {
8058 char const c = TREE_CODE_CLASS (TREE_CODE (t));
8059
8060 if (IS_EXPR_CODE_CLASS (c))
8061 return &t->exp.block;
8062 else if (IS_GIMPLE_STMT_CODE_CLASS (c))
8063 return &GIMPLE_STMT_BLOCK (t);
8064 gcc_unreachable ();
8065 return NULL;
8066 }
8067
8068 tree *
8069 generic_tree_operand (tree node, int i)
8070 {
8071 if (GIMPLE_STMT_P (node))
8072 return &GIMPLE_STMT_OPERAND (node, i);
8073 return &TREE_OPERAND (node, i);
8074 }
8075
8076 tree *
8077 generic_tree_type (tree node)
8078 {
8079 if (GIMPLE_STMT_P (node))
8080 return &void_type_node;
8081 return &TREE_TYPE (node);
8082 }
8083
8084 #include "gt-tree.h"