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