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
4 Free Software Foundation, Inc.
6 This file is part of GCC.
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
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
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
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
30 It is intended to be language-independent, but occasionally
31 calls language-dependent routines defined (for C) in typecheck.c. */
35 #include "coretypes.h"
48 #include "langhooks.h"
49 #include "tree-iterator.h"
50 #include "basic-block.h"
51 #include "tree-flow.h"
53 #include "pointer-set.h"
55 /* Each tree code class has an associated string representation.
56 These must correspond to the tree_code_class entries. */
58 const char *const tree_code_class_strings[] =
72 /* obstack.[ch] explicitly declined to prototype this. */
73 extern int _obstack_allocated_p (struct obstack *h, void *obj);
75 #ifdef GATHER_STATISTICS
76 /* Statistics-gathering stuff. */
78 int tree_node_counts[(int) all_kinds];
79 int tree_node_sizes[(int) all_kinds];
81 /* Keep in sync with tree.h:enum tree_node_kind. */
82 static const char * const tree_node_kind_names[] = {
103 #endif /* GATHER_STATISTICS */
105 /* Unique id for next decl created. */
106 static GTY(()) int next_decl_uid;
107 /* Unique id for next type created. */
108 static GTY(()) int next_type_uid = 1;
110 /* Since we cannot rehash a type after it is in the table, we have to
111 keep the hash code. */
113 struct type_hash GTY(())
119 /* Initial size of the hash table (rounded to next prime). */
120 #define TYPE_HASH_INITIAL_SIZE 1000
122 /* Now here is the hash table. When recording a type, it is added to
123 the slot whose index is the hash code. Note that the hash table is
124 used for several kinds of types (function types, array types and
125 array index range types, for now). While all these live in the
126 same table, they are completely independent, and the hash code is
127 computed differently for each of these. */
129 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
130 htab_t type_hash_table;
132 /* Hash table and temporary node for larger integer const values. */
133 static GTY (()) tree int_cst_node;
134 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
135 htab_t int_cst_hash_table;
137 /* General tree->tree mapping structure for use in hash tables. */
140 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
141 htab_t debug_expr_for_decl;
143 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
144 htab_t value_expr_for_decl;
146 static GTY ((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
147 htab_t init_priority_for_decl;
149 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
150 htab_t restrict_base_for_decl;
152 struct tree_int_map GTY(())
157 static unsigned int tree_int_map_hash (const void *);
158 static int tree_int_map_eq (const void *, const void *);
159 static int tree_int_map_marked_p (const void *);
160 static void set_type_quals (tree, int);
161 static int type_hash_eq (const void *, const void *);
162 static hashval_t type_hash_hash (const void *);
163 static hashval_t int_cst_hash_hash (const void *);
164 static int int_cst_hash_eq (const void *, const void *);
165 static void print_type_hash_statistics (void);
166 static void print_debug_expr_statistics (void);
167 static void print_value_expr_statistics (void);
168 static tree make_vector_type (tree, int, enum machine_mode);
169 static int type_hash_marked_p (const void *);
170 static unsigned int type_hash_list (tree, hashval_t);
171 static unsigned int attribute_hash_list (tree, hashval_t);
173 tree global_trees[TI_MAX];
174 tree integer_types[itk_none];
176 unsigned char tree_contains_struct[256][64];
178 /* Number of operands for each OpenMP clause. */
179 unsigned const char omp_clause_num_ops[] =
181 0, /* OMP_CLAUSE_ERROR */
182 1, /* OMP_CLAUSE_PRIVATE */
183 1, /* OMP_CLAUSE_SHARED */
184 1, /* OMP_CLAUSE_FIRSTPRIVATE */
185 1, /* OMP_CLAUSE_LASTPRIVATE */
186 4, /* OMP_CLAUSE_REDUCTION */
187 1, /* OMP_CLAUSE_COPYIN */
188 1, /* OMP_CLAUSE_COPYPRIVATE */
189 1, /* OMP_CLAUSE_IF */
190 1, /* OMP_CLAUSE_NUM_THREADS */
191 1, /* OMP_CLAUSE_SCHEDULE */
192 0, /* OMP_CLAUSE_NOWAIT */
193 0, /* OMP_CLAUSE_ORDERED */
194 0 /* OMP_CLAUSE_DEFAULT */
197 const char * const omp_clause_code_name[] =
220 /* Initialize the hash table of types. */
221 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
224 debug_expr_for_decl = htab_create_ggc (512, tree_map_hash,
227 value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
229 init_priority_for_decl = htab_create_ggc (512, tree_int_map_hash,
231 restrict_base_for_decl = htab_create_ggc (256, tree_map_hash,
234 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
235 int_cst_hash_eq, NULL);
237 int_cst_node = make_node (INTEGER_CST);
239 tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON] = 1;
240 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_NON_COMMON] = 1;
241 tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON] = 1;
244 tree_contains_struct[CONST_DECL][TS_DECL_COMMON] = 1;
245 tree_contains_struct[VAR_DECL][TS_DECL_COMMON] = 1;
246 tree_contains_struct[PARM_DECL][TS_DECL_COMMON] = 1;
247 tree_contains_struct[RESULT_DECL][TS_DECL_COMMON] = 1;
248 tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON] = 1;
249 tree_contains_struct[TYPE_DECL][TS_DECL_COMMON] = 1;
250 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON] = 1;
251 tree_contains_struct[LABEL_DECL][TS_DECL_COMMON] = 1;
252 tree_contains_struct[FIELD_DECL][TS_DECL_COMMON] = 1;
255 tree_contains_struct[CONST_DECL][TS_DECL_WRTL] = 1;
256 tree_contains_struct[VAR_DECL][TS_DECL_WRTL] = 1;
257 tree_contains_struct[PARM_DECL][TS_DECL_WRTL] = 1;
258 tree_contains_struct[RESULT_DECL][TS_DECL_WRTL] = 1;
259 tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL] = 1;
260 tree_contains_struct[LABEL_DECL][TS_DECL_WRTL] = 1;
262 tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL] = 1;
263 tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL] = 1;
264 tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL] = 1;
265 tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL] = 1;
266 tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL] = 1;
267 tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL] = 1;
268 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL] = 1;
269 tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL] = 1;
270 tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL] = 1;
271 tree_contains_struct[STRUCT_FIELD_TAG][TS_DECL_MINIMAL] = 1;
272 tree_contains_struct[NAME_MEMORY_TAG][TS_DECL_MINIMAL] = 1;
273 tree_contains_struct[SYMBOL_MEMORY_TAG][TS_DECL_MINIMAL] = 1;
275 tree_contains_struct[STRUCT_FIELD_TAG][TS_MEMORY_TAG] = 1;
276 tree_contains_struct[NAME_MEMORY_TAG][TS_MEMORY_TAG] = 1;
277 tree_contains_struct[SYMBOL_MEMORY_TAG][TS_MEMORY_TAG] = 1;
279 tree_contains_struct[STRUCT_FIELD_TAG][TS_STRUCT_FIELD_TAG] = 1;
281 tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS] = 1;
282 tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS] = 1;
283 tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS] = 1;
284 tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_WITH_VIS] = 1;
286 tree_contains_struct[VAR_DECL][TS_VAR_DECL] = 1;
287 tree_contains_struct[FIELD_DECL][TS_FIELD_DECL] = 1;
288 tree_contains_struct[PARM_DECL][TS_PARM_DECL] = 1;
289 tree_contains_struct[LABEL_DECL][TS_LABEL_DECL] = 1;
290 tree_contains_struct[RESULT_DECL][TS_RESULT_DECL] = 1;
291 tree_contains_struct[CONST_DECL][TS_CONST_DECL] = 1;
292 tree_contains_struct[TYPE_DECL][TS_TYPE_DECL] = 1;
293 tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL] = 1;
295 lang_hooks.init_ts ();
299 /* The name of the object as the assembler will see it (but before any
300 translations made by ASM_OUTPUT_LABELREF). Often this is the same
301 as DECL_NAME. It is an IDENTIFIER_NODE. */
303 decl_assembler_name (tree decl)
305 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
306 lang_hooks.set_decl_assembler_name (decl);
307 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
310 /* Compute the number of bytes occupied by a tree with code CODE.
311 This function cannot be used for TREE_VEC, PHI_NODE, or STRING_CST
312 codes, which are of variable length. */
314 tree_code_size (enum tree_code code)
316 switch (TREE_CODE_CLASS (code))
318 case tcc_declaration: /* A decl node */
323 return sizeof (struct tree_field_decl);
325 return sizeof (struct tree_parm_decl);
327 return sizeof (struct tree_var_decl);
329 return sizeof (struct tree_label_decl);
331 return sizeof (struct tree_result_decl);
333 return sizeof (struct tree_const_decl);
335 return sizeof (struct tree_type_decl);
337 return sizeof (struct tree_function_decl);
338 case NAME_MEMORY_TAG:
339 case SYMBOL_MEMORY_TAG:
340 return sizeof (struct tree_memory_tag);
341 case STRUCT_FIELD_TAG:
342 return sizeof (struct tree_struct_field_tag);
344 return sizeof (struct tree_decl_non_common);
348 case tcc_type: /* a type node */
349 return sizeof (struct tree_type);
351 case tcc_reference: /* a reference */
352 case tcc_expression: /* an expression */
353 case tcc_statement: /* an expression with side effects */
354 case tcc_comparison: /* a comparison expression */
355 case tcc_unary: /* a unary arithmetic expression */
356 case tcc_binary: /* a binary arithmetic expression */
357 return (sizeof (struct tree_exp)
358 + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
360 case tcc_constant: /* a constant */
363 case INTEGER_CST: return sizeof (struct tree_int_cst);
364 case REAL_CST: return sizeof (struct tree_real_cst);
365 case COMPLEX_CST: return sizeof (struct tree_complex);
366 case VECTOR_CST: return sizeof (struct tree_vector);
367 case STRING_CST: gcc_unreachable ();
369 return lang_hooks.tree_size (code);
372 case tcc_exceptional: /* something random, like an identifier. */
375 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
376 case TREE_LIST: return sizeof (struct tree_list);
379 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
383 case PHI_NODE: gcc_unreachable ();
385 case SSA_NAME: return sizeof (struct tree_ssa_name);
387 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
388 case BLOCK: return sizeof (struct tree_block);
389 case VALUE_HANDLE: return sizeof (struct tree_value_handle);
390 case CONSTRUCTOR: return sizeof (struct tree_constructor);
393 return lang_hooks.tree_size (code);
401 /* Compute the number of bytes occupied by NODE. This routine only
402 looks at TREE_CODE, except for PHI_NODE and TREE_VEC nodes. */
404 tree_size (tree node)
406 enum tree_code code = TREE_CODE (node);
410 return (sizeof (struct tree_phi_node)
411 + (PHI_ARG_CAPACITY (node) - 1) * sizeof (struct phi_arg_d));
414 return (offsetof (struct tree_binfo, base_binfos)
415 + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
418 return (sizeof (struct tree_vec)
419 + (TREE_VEC_LENGTH (node) - 1) * sizeof(char *));
422 return sizeof (struct tree_string) + TREE_STRING_LENGTH (node) - 1;
425 return (sizeof (struct tree_omp_clause)
426 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
430 return tree_code_size (code);
434 /* Return a newly allocated node of code CODE. For decl and type
435 nodes, some other fields are initialized. The rest of the node is
436 initialized to zero. This function cannot be used for PHI_NODE,
437 TREE_VEC or OMP_CLAUSE nodes, which is enforced by asserts in
440 Achoo! I got a code in the node. */
443 make_node_stat (enum tree_code code MEM_STAT_DECL)
446 enum tree_code_class type = TREE_CODE_CLASS (code);
447 size_t length = tree_code_size (code);
448 #ifdef GATHER_STATISTICS
453 case tcc_declaration: /* A decl node */
457 case tcc_type: /* a type node */
461 case tcc_statement: /* an expression with side effects */
465 case tcc_reference: /* a reference */
469 case tcc_expression: /* an expression */
470 case tcc_comparison: /* a comparison expression */
471 case tcc_unary: /* a unary arithmetic expression */
472 case tcc_binary: /* a binary arithmetic expression */
476 case tcc_constant: /* a constant */
480 case tcc_exceptional: /* something random, like an identifier. */
483 case IDENTIFIER_NODE:
500 kind = ssa_name_kind;
521 tree_node_counts[(int) kind]++;
522 tree_node_sizes[(int) kind] += length;
525 if (code == IDENTIFIER_NODE)
526 t = ggc_alloc_zone_pass_stat (length, &tree_id_zone);
528 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
530 memset (t, 0, length);
532 TREE_SET_CODE (t, code);
537 TREE_SIDE_EFFECTS (t) = 1;
540 case tcc_declaration:
541 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
542 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
543 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
545 if (code != FUNCTION_DECL)
547 DECL_USER_ALIGN (t) = 0;
548 /* We have not yet computed the alias set for this declaration. */
549 DECL_POINTER_ALIAS_SET (t) = -1;
551 DECL_SOURCE_LOCATION (t) = input_location;
552 DECL_UID (t) = next_decl_uid++;
557 TYPE_UID (t) = next_type_uid++;
558 TYPE_ALIGN (t) = BITS_PER_UNIT;
559 TYPE_USER_ALIGN (t) = 0;
560 TYPE_MAIN_VARIANT (t) = t;
562 /* Default to no attributes for type, but let target change that. */
563 TYPE_ATTRIBUTES (t) = NULL_TREE;
564 targetm.set_default_type_attributes (t);
566 /* We have not yet computed the alias set for this type. */
567 TYPE_ALIAS_SET (t) = -1;
571 TREE_CONSTANT (t) = 1;
572 TREE_INVARIANT (t) = 1;
581 case PREDECREMENT_EXPR:
582 case PREINCREMENT_EXPR:
583 case POSTDECREMENT_EXPR:
584 case POSTINCREMENT_EXPR:
585 /* All of these have side-effects, no matter what their
587 TREE_SIDE_EFFECTS (t) = 1;
596 /* Other classes need no special treatment. */
603 /* Return a new node with the same contents as NODE except that its
604 TREE_CHAIN is zero and it has a fresh uid. */
607 copy_node_stat (tree node MEM_STAT_DECL)
610 enum tree_code code = TREE_CODE (node);
613 gcc_assert (code != STATEMENT_LIST);
615 length = tree_size (node);
616 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
617 memcpy (t, node, length);
620 TREE_ASM_WRITTEN (t) = 0;
621 TREE_VISITED (t) = 0;
624 if (TREE_CODE_CLASS (code) == tcc_declaration)
626 DECL_UID (t) = next_decl_uid++;
627 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
628 && DECL_HAS_VALUE_EXPR_P (node))
630 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
631 DECL_HAS_VALUE_EXPR_P (t) = 1;
633 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
635 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
636 DECL_HAS_INIT_PRIORITY_P (t) = 1;
638 if (TREE_CODE (node) == VAR_DECL && DECL_BASED_ON_RESTRICT_P (node))
640 SET_DECL_RESTRICT_BASE (t, DECL_GET_RESTRICT_BASE (node));
641 DECL_BASED_ON_RESTRICT_P (t) = 1;
644 else if (TREE_CODE_CLASS (code) == tcc_type)
646 TYPE_UID (t) = next_type_uid++;
647 /* The following is so that the debug code for
648 the copy is different from the original type.
649 The two statements usually duplicate each other
650 (because they clear fields of the same union),
651 but the optimizer should catch that. */
652 TYPE_SYMTAB_POINTER (t) = 0;
653 TYPE_SYMTAB_ADDRESS (t) = 0;
655 /* Do not copy the values cache. */
656 if (TYPE_CACHED_VALUES_P(t))
658 TYPE_CACHED_VALUES_P (t) = 0;
659 TYPE_CACHED_VALUES (t) = NULL_TREE;
666 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
667 For example, this can copy a list made of TREE_LIST nodes. */
670 copy_list (tree list)
678 head = prev = copy_node (list);
679 next = TREE_CHAIN (list);
682 TREE_CHAIN (prev) = copy_node (next);
683 prev = TREE_CHAIN (prev);
684 next = TREE_CHAIN (next);
690 /* Create an INT_CST node with a LOW value sign extended. */
693 build_int_cst (tree type, HOST_WIDE_INT low)
695 return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
698 /* Create an INT_CST node with a LOW value zero extended. */
701 build_int_cstu (tree type, unsigned HOST_WIDE_INT low)
703 return build_int_cst_wide (type, low, 0);
706 /* Create an INT_CST node with a LOW value in TYPE. The value is sign extended
707 if it is negative. This function is similar to build_int_cst, but
708 the extra bits outside of the type precision are cleared. Constants
709 with these extra bits may confuse the fold so that it detects overflows
710 even in cases when they do not occur, and in general should be avoided.
711 We cannot however make this a default behavior of build_int_cst without
712 more intrusive changes, since there are parts of gcc that rely on the extra
713 precision of the integer constants. */
716 build_int_cst_type (tree type, HOST_WIDE_INT low)
718 unsigned HOST_WIDE_INT val = (unsigned HOST_WIDE_INT) low;
719 unsigned HOST_WIDE_INT hi, mask;
725 type = integer_type_node;
727 bits = TYPE_PRECISION (type);
728 signed_p = !TYPE_UNSIGNED (type);
730 if (bits >= HOST_BITS_PER_WIDE_INT)
731 negative = (low < 0);
734 /* If the sign bit is inside precision of LOW, use it to determine
735 the sign of the constant. */
736 negative = ((val >> (bits - 1)) & 1) != 0;
738 /* Mask out the bits outside of the precision of the constant. */
739 mask = (((unsigned HOST_WIDE_INT) 2) << (bits - 1)) - 1;
741 if (signed_p && negative)
747 /* Determine the high bits. */
748 hi = (negative ? ~(unsigned HOST_WIDE_INT) 0 : 0);
750 /* For unsigned type we need to mask out the bits outside of the type
754 if (bits <= HOST_BITS_PER_WIDE_INT)
758 bits -= HOST_BITS_PER_WIDE_INT;
759 mask = (((unsigned HOST_WIDE_INT) 2) << (bits - 1)) - 1;
764 return build_int_cst_wide (type, val, hi);
767 /* These are the hash table functions for the hash table of INTEGER_CST
768 nodes of a sizetype. */
770 /* Return the hash code code X, an INTEGER_CST. */
773 int_cst_hash_hash (const void *x)
777 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
778 ^ htab_hash_pointer (TREE_TYPE (t)));
781 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
782 is the same as that given by *Y, which is the same. */
785 int_cst_hash_eq (const void *x, const void *y)
790 return (TREE_TYPE (xt) == TREE_TYPE (yt)
791 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
792 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
795 /* Create an INT_CST node of TYPE and value HI:LOW. If TYPE is NULL,
796 integer_type_node is used. The returned node is always shared.
797 For small integers we use a per-type vector cache, for larger ones
798 we use a single hash table. */
801 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
808 type = integer_type_node;
810 switch (TREE_CODE (type))
814 /* Cache NULL pointer. */
823 /* Cache false or true. */
831 if (TYPE_UNSIGNED (type))
834 limit = INTEGER_SHARE_LIMIT;
835 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
841 limit = INTEGER_SHARE_LIMIT + 1;
842 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
844 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
854 /* Look for it in the type's vector of small shared ints. */
855 if (!TYPE_CACHED_VALUES_P (type))
857 TYPE_CACHED_VALUES_P (type) = 1;
858 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
861 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
864 /* Make sure no one is clobbering the shared constant. */
865 gcc_assert (TREE_TYPE (t) == type);
866 gcc_assert (TREE_INT_CST_LOW (t) == low);
867 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
871 /* Create a new shared int. */
872 t = make_node (INTEGER_CST);
874 TREE_INT_CST_LOW (t) = low;
875 TREE_INT_CST_HIGH (t) = hi;
876 TREE_TYPE (t) = type;
878 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
883 /* Use the cache of larger shared ints. */
886 TREE_INT_CST_LOW (int_cst_node) = low;
887 TREE_INT_CST_HIGH (int_cst_node) = hi;
888 TREE_TYPE (int_cst_node) = type;
890 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
894 /* Insert this one into the hash table. */
897 /* Make a new node for next time round. */
898 int_cst_node = make_node (INTEGER_CST);
905 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
906 and the rest are zeros. */
909 build_low_bits_mask (tree type, unsigned bits)
911 unsigned HOST_WIDE_INT low;
913 unsigned HOST_WIDE_INT all_ones = ~(unsigned HOST_WIDE_INT) 0;
915 gcc_assert (bits <= TYPE_PRECISION (type));
917 if (bits == TYPE_PRECISION (type)
918 && !TYPE_UNSIGNED (type))
920 /* Sign extended all-ones mask. */
924 else if (bits <= HOST_BITS_PER_WIDE_INT)
926 low = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
931 bits -= HOST_BITS_PER_WIDE_INT;
933 high = all_ones >> (HOST_BITS_PER_WIDE_INT - bits);
936 return build_int_cst_wide (type, low, high);
939 /* Checks that X is integer constant that can be expressed in (unsigned)
940 HOST_WIDE_INT without loss of precision. */
943 cst_and_fits_in_hwi (tree x)
945 if (TREE_CODE (x) != INTEGER_CST)
948 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
951 return (TREE_INT_CST_HIGH (x) == 0
952 || TREE_INT_CST_HIGH (x) == -1);
955 /* Return a new VECTOR_CST node whose type is TYPE and whose values
956 are in a list pointed to by VALS. */
959 build_vector (tree type, tree vals)
961 tree v = make_node (VECTOR_CST);
962 int over1 = 0, over2 = 0;
965 TREE_VECTOR_CST_ELTS (v) = vals;
966 TREE_TYPE (v) = type;
968 /* Iterate through elements and check for overflow. */
969 for (link = vals; link; link = TREE_CHAIN (link))
971 tree value = TREE_VALUE (link);
973 over1 |= TREE_OVERFLOW (value);
974 over2 |= TREE_CONSTANT_OVERFLOW (value);
977 TREE_OVERFLOW (v) = over1;
978 TREE_CONSTANT_OVERFLOW (v) = over2;
983 /* Return a new VECTOR_CST node whose type is TYPE and whose values
984 are extracted from V, a vector of CONSTRUCTOR_ELT. */
987 build_vector_from_ctor (tree type, VEC(constructor_elt,gc) *v)
989 tree list = NULL_TREE;
990 unsigned HOST_WIDE_INT idx;
993 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
994 list = tree_cons (NULL_TREE, value, list);
995 return build_vector (type, nreverse (list));
998 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
999 are in the VEC pointed to by VALS. */
1001 build_constructor (tree type, VEC(constructor_elt,gc) *vals)
1003 tree c = make_node (CONSTRUCTOR);
1004 TREE_TYPE (c) = type;
1005 CONSTRUCTOR_ELTS (c) = vals;
1009 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1012 build_constructor_single (tree type, tree index, tree value)
1014 VEC(constructor_elt,gc) *v;
1015 constructor_elt *elt;
1018 v = VEC_alloc (constructor_elt, gc, 1);
1019 elt = VEC_quick_push (constructor_elt, v, NULL);
1023 t = build_constructor (type, v);
1024 TREE_CONSTANT (t) = TREE_CONSTANT (value);
1029 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1030 are in a list pointed to by VALS. */
1032 build_constructor_from_list (tree type, tree vals)
1035 VEC(constructor_elt,gc) *v = NULL;
1036 bool constant_p = true;
1040 v = VEC_alloc (constructor_elt, gc, list_length (vals));
1041 for (t = vals; t; t = TREE_CHAIN (t))
1043 constructor_elt *elt = VEC_quick_push (constructor_elt, v, NULL);
1044 val = TREE_VALUE (t);
1045 elt->index = TREE_PURPOSE (t);
1047 if (!TREE_CONSTANT (val))
1052 t = build_constructor (type, v);
1053 TREE_CONSTANT (t) = constant_p;
1058 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1061 build_real (tree type, REAL_VALUE_TYPE d)
1064 REAL_VALUE_TYPE *dp;
1067 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1068 Consider doing it via real_convert now. */
1070 v = make_node (REAL_CST);
1071 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
1072 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1074 TREE_TYPE (v) = type;
1075 TREE_REAL_CST_PTR (v) = dp;
1076 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1080 /* Return a new REAL_CST node whose type is TYPE
1081 and whose value is the integer value of the INTEGER_CST node I. */
1084 real_value_from_int_cst (tree type, tree i)
1088 /* Clear all bits of the real value type so that we can later do
1089 bitwise comparisons to see if two values are the same. */
1090 memset (&d, 0, sizeof d);
1092 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1093 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1094 TYPE_UNSIGNED (TREE_TYPE (i)));
1098 /* Given a tree representing an integer constant I, return a tree
1099 representing the same value as a floating-point constant of type TYPE. */
1102 build_real_from_int_cst (tree type, tree i)
1105 int overflow = TREE_OVERFLOW (i);
1107 v = build_real (type, real_value_from_int_cst (type, i));
1109 TREE_OVERFLOW (v) |= overflow;
1110 TREE_CONSTANT_OVERFLOW (v) |= overflow;
1114 /* Return a newly constructed STRING_CST node whose value is
1115 the LEN characters at STR.
1116 The TREE_TYPE is not initialized. */
1119 build_string (int len, const char *str)
1124 length = len + sizeof (struct tree_string);
1126 #ifdef GATHER_STATISTICS
1127 tree_node_counts[(int) c_kind]++;
1128 tree_node_sizes[(int) c_kind] += length;
1131 s = ggc_alloc_tree (length);
1133 memset (s, 0, sizeof (struct tree_common));
1134 TREE_SET_CODE (s, STRING_CST);
1135 TREE_CONSTANT (s) = 1;
1136 TREE_INVARIANT (s) = 1;
1137 TREE_STRING_LENGTH (s) = len;
1138 memcpy ((char *) TREE_STRING_POINTER (s), str, len);
1139 ((char *) TREE_STRING_POINTER (s))[len] = '\0';
1144 /* Return a newly constructed COMPLEX_CST node whose value is
1145 specified by the real and imaginary parts REAL and IMAG.
1146 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1147 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1150 build_complex (tree type, tree real, tree imag)
1152 tree t = make_node (COMPLEX_CST);
1154 TREE_REALPART (t) = real;
1155 TREE_IMAGPART (t) = imag;
1156 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1157 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1158 TREE_CONSTANT_OVERFLOW (t)
1159 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
1163 /* Build a BINFO with LEN language slots. */
1166 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1169 size_t length = (offsetof (struct tree_binfo, base_binfos)
1170 + VEC_embedded_size (tree, base_binfos));
1172 #ifdef GATHER_STATISTICS
1173 tree_node_counts[(int) binfo_kind]++;
1174 tree_node_sizes[(int) binfo_kind] += length;
1177 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1179 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1181 TREE_SET_CODE (t, TREE_BINFO);
1183 VEC_embedded_init (tree, BINFO_BASE_BINFOS (t), base_binfos);
1189 /* Build a newly constructed TREE_VEC node of length LEN. */
1192 make_tree_vec_stat (int len MEM_STAT_DECL)
1195 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1197 #ifdef GATHER_STATISTICS
1198 tree_node_counts[(int) vec_kind]++;
1199 tree_node_sizes[(int) vec_kind] += length;
1202 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
1204 memset (t, 0, length);
1206 TREE_SET_CODE (t, TREE_VEC);
1207 TREE_VEC_LENGTH (t) = len;
1212 /* Return 1 if EXPR is the integer constant zero or a complex constant
1216 integer_zerop (tree expr)
1220 return ((TREE_CODE (expr) == INTEGER_CST
1221 && TREE_INT_CST_LOW (expr) == 0
1222 && TREE_INT_CST_HIGH (expr) == 0)
1223 || (TREE_CODE (expr) == COMPLEX_CST
1224 && integer_zerop (TREE_REALPART (expr))
1225 && integer_zerop (TREE_IMAGPART (expr))));
1228 /* Return 1 if EXPR is the integer constant one or the corresponding
1229 complex constant. */
1232 integer_onep (tree expr)
1236 return ((TREE_CODE (expr) == INTEGER_CST
1237 && TREE_INT_CST_LOW (expr) == 1
1238 && TREE_INT_CST_HIGH (expr) == 0)
1239 || (TREE_CODE (expr) == COMPLEX_CST
1240 && integer_onep (TREE_REALPART (expr))
1241 && integer_zerop (TREE_IMAGPART (expr))));
1244 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1245 it contains. Likewise for the corresponding complex constant. */
1248 integer_all_onesp (tree expr)
1255 if (TREE_CODE (expr) == COMPLEX_CST
1256 && integer_all_onesp (TREE_REALPART (expr))
1257 && integer_zerop (TREE_IMAGPART (expr)))
1260 else if (TREE_CODE (expr) != INTEGER_CST)
1263 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1264 if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1265 && TREE_INT_CST_HIGH (expr) == -1)
1270 /* Note that using TYPE_PRECISION here is wrong. We care about the
1271 actual bits, not the (arbitrary) range of the type. */
1272 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1273 if (prec >= HOST_BITS_PER_WIDE_INT)
1275 HOST_WIDE_INT high_value;
1278 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1280 /* Can not handle precisions greater than twice the host int size. */
1281 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
1282 if (shift_amount == HOST_BITS_PER_WIDE_INT)
1283 /* Shifting by the host word size is undefined according to the ANSI
1284 standard, so we must handle this as a special case. */
1287 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1289 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1290 && TREE_INT_CST_HIGH (expr) == high_value);
1293 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1296 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1300 integer_pow2p (tree expr)
1303 HOST_WIDE_INT high, low;
1307 if (TREE_CODE (expr) == COMPLEX_CST
1308 && integer_pow2p (TREE_REALPART (expr))
1309 && integer_zerop (TREE_IMAGPART (expr)))
1312 if (TREE_CODE (expr) != INTEGER_CST)
1315 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1316 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1317 high = TREE_INT_CST_HIGH (expr);
1318 low = TREE_INT_CST_LOW (expr);
1320 /* First clear all bits that are beyond the type's precision in case
1321 we've been sign extended. */
1323 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1325 else if (prec > HOST_BITS_PER_WIDE_INT)
1326 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1330 if (prec < HOST_BITS_PER_WIDE_INT)
1331 low &= ~((HOST_WIDE_INT) (-1) << prec);
1334 if (high == 0 && low == 0)
1337 return ((high == 0 && (low & (low - 1)) == 0)
1338 || (low == 0 && (high & (high - 1)) == 0));
1341 /* Return 1 if EXPR is an integer constant other than zero or a
1342 complex constant other than zero. */
1345 integer_nonzerop (tree expr)
1349 return ((TREE_CODE (expr) == INTEGER_CST
1350 && (TREE_INT_CST_LOW (expr) != 0
1351 || TREE_INT_CST_HIGH (expr) != 0))
1352 || (TREE_CODE (expr) == COMPLEX_CST
1353 && (integer_nonzerop (TREE_REALPART (expr))
1354 || integer_nonzerop (TREE_IMAGPART (expr)))));
1357 /* Return the power of two represented by a tree node known to be a
1361 tree_log2 (tree expr)
1364 HOST_WIDE_INT high, low;
1368 if (TREE_CODE (expr) == COMPLEX_CST)
1369 return tree_log2 (TREE_REALPART (expr));
1371 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1372 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1374 high = TREE_INT_CST_HIGH (expr);
1375 low = TREE_INT_CST_LOW (expr);
1377 /* First clear all bits that are beyond the type's precision in case
1378 we've been sign extended. */
1380 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1382 else if (prec > HOST_BITS_PER_WIDE_INT)
1383 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1387 if (prec < HOST_BITS_PER_WIDE_INT)
1388 low &= ~((HOST_WIDE_INT) (-1) << prec);
1391 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1392 : exact_log2 (low));
1395 /* Similar, but return the largest integer Y such that 2 ** Y is less
1396 than or equal to EXPR. */
1399 tree_floor_log2 (tree expr)
1402 HOST_WIDE_INT high, low;
1406 if (TREE_CODE (expr) == COMPLEX_CST)
1407 return tree_log2 (TREE_REALPART (expr));
1409 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1410 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1412 high = TREE_INT_CST_HIGH (expr);
1413 low = TREE_INT_CST_LOW (expr);
1415 /* First clear all bits that are beyond the type's precision in case
1416 we've been sign extended. Ignore if type's precision hasn't been set
1417 since what we are doing is setting it. */
1419 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1421 else if (prec > HOST_BITS_PER_WIDE_INT)
1422 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1426 if (prec < HOST_BITS_PER_WIDE_INT)
1427 low &= ~((HOST_WIDE_INT) (-1) << prec);
1430 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1431 : floor_log2 (low));
1434 /* Return 1 if EXPR is the real constant zero. */
1437 real_zerop (tree expr)
1441 return ((TREE_CODE (expr) == REAL_CST
1442 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1443 || (TREE_CODE (expr) == COMPLEX_CST
1444 && real_zerop (TREE_REALPART (expr))
1445 && real_zerop (TREE_IMAGPART (expr))));
1448 /* Return 1 if EXPR is the real constant one in real or complex form. */
1451 real_onep (tree expr)
1455 return ((TREE_CODE (expr) == REAL_CST
1456 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1457 || (TREE_CODE (expr) == COMPLEX_CST
1458 && real_onep (TREE_REALPART (expr))
1459 && real_zerop (TREE_IMAGPART (expr))));
1462 /* Return 1 if EXPR is the real constant two. */
1465 real_twop (tree expr)
1469 return ((TREE_CODE (expr) == REAL_CST
1470 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1471 || (TREE_CODE (expr) == COMPLEX_CST
1472 && real_twop (TREE_REALPART (expr))
1473 && real_zerop (TREE_IMAGPART (expr))));
1476 /* Return 1 if EXPR is the real constant minus one. */
1479 real_minus_onep (tree expr)
1483 return ((TREE_CODE (expr) == REAL_CST
1484 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
1485 || (TREE_CODE (expr) == COMPLEX_CST
1486 && real_minus_onep (TREE_REALPART (expr))
1487 && real_zerop (TREE_IMAGPART (expr))));
1490 /* Nonzero if EXP is a constant or a cast of a constant. */
1493 really_constant_p (tree exp)
1495 /* This is not quite the same as STRIP_NOPS. It does more. */
1496 while (TREE_CODE (exp) == NOP_EXPR
1497 || TREE_CODE (exp) == CONVERT_EXPR
1498 || TREE_CODE (exp) == NON_LVALUE_EXPR)
1499 exp = TREE_OPERAND (exp, 0);
1500 return TREE_CONSTANT (exp);
1503 /* Return first list element whose TREE_VALUE is ELEM.
1504 Return 0 if ELEM is not in LIST. */
1507 value_member (tree elem, tree list)
1511 if (elem == TREE_VALUE (list))
1513 list = TREE_CHAIN (list);
1518 /* Return first list element whose TREE_PURPOSE is ELEM.
1519 Return 0 if ELEM is not in LIST. */
1522 purpose_member (tree elem, tree list)
1526 if (elem == TREE_PURPOSE (list))
1528 list = TREE_CHAIN (list);
1533 /* Return nonzero if ELEM is part of the chain CHAIN. */
1536 chain_member (tree elem, tree chain)
1542 chain = TREE_CHAIN (chain);
1548 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1549 We expect a null pointer to mark the end of the chain.
1550 This is the Lisp primitive `length'. */
1553 list_length (tree t)
1556 #ifdef ENABLE_TREE_CHECKING
1564 #ifdef ENABLE_TREE_CHECKING
1567 gcc_assert (p != q);
1575 /* Returns the number of FIELD_DECLs in TYPE. */
1578 fields_length (tree type)
1580 tree t = TYPE_FIELDS (type);
1583 for (; t; t = TREE_CHAIN (t))
1584 if (TREE_CODE (t) == FIELD_DECL)
1590 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1591 by modifying the last node in chain 1 to point to chain 2.
1592 This is the Lisp primitive `nconc'. */
1595 chainon (tree op1, tree op2)
1604 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1606 TREE_CHAIN (t1) = op2;
1608 #ifdef ENABLE_TREE_CHECKING
1611 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1612 gcc_assert (t2 != t1);
1619 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1622 tree_last (tree chain)
1626 while ((next = TREE_CHAIN (chain)))
1631 /* Reverse the order of elements in the chain T,
1632 and return the new head of the chain (old last element). */
1637 tree prev = 0, decl, next;
1638 for (decl = t; decl; decl = next)
1640 next = TREE_CHAIN (decl);
1641 TREE_CHAIN (decl) = prev;
1647 /* Return a newly created TREE_LIST node whose
1648 purpose and value fields are PARM and VALUE. */
1651 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
1653 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
1654 TREE_PURPOSE (t) = parm;
1655 TREE_VALUE (t) = value;
1659 /* Return a newly created TREE_LIST node whose
1660 purpose and value fields are PURPOSE and VALUE
1661 and whose TREE_CHAIN is CHAIN. */
1664 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
1668 node = ggc_alloc_zone_pass_stat (sizeof (struct tree_list), &tree_zone);
1670 memset (node, 0, sizeof (struct tree_common));
1672 #ifdef GATHER_STATISTICS
1673 tree_node_counts[(int) x_kind]++;
1674 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1677 TREE_SET_CODE (node, TREE_LIST);
1678 TREE_CHAIN (node) = chain;
1679 TREE_PURPOSE (node) = purpose;
1680 TREE_VALUE (node) = value;
1685 /* Return the size nominally occupied by an object of type TYPE
1686 when it resides in memory. The value is measured in units of bytes,
1687 and its data type is that normally used for type sizes
1688 (which is the first type created by make_signed_type or
1689 make_unsigned_type). */
1692 size_in_bytes (tree type)
1696 if (type == error_mark_node)
1697 return integer_zero_node;
1699 type = TYPE_MAIN_VARIANT (type);
1700 t = TYPE_SIZE_UNIT (type);
1704 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
1705 return size_zero_node;
1708 if (TREE_CODE (t) == INTEGER_CST)
1709 t = force_fit_type (t, 0, false, false);
1714 /* Return the size of TYPE (in bytes) as a wide integer
1715 or return -1 if the size can vary or is larger than an integer. */
1718 int_size_in_bytes (tree type)
1722 if (type == error_mark_node)
1725 type = TYPE_MAIN_VARIANT (type);
1726 t = TYPE_SIZE_UNIT (type);
1728 || TREE_CODE (t) != INTEGER_CST
1729 || TREE_INT_CST_HIGH (t) != 0
1730 /* If the result would appear negative, it's too big to represent. */
1731 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1734 return TREE_INT_CST_LOW (t);
1737 /* Return the maximum size of TYPE (in bytes) as a wide integer
1738 or return -1 if the size can vary or is larger than an integer. */
1741 max_int_size_in_bytes (tree type)
1743 HOST_WIDE_INT size = -1;
1746 /* If this is an array type, check for a possible MAX_SIZE attached. */
1748 if (TREE_CODE (type) == ARRAY_TYPE)
1750 size_tree = TYPE_ARRAY_MAX_SIZE (type);
1752 if (size_tree && host_integerp (size_tree, 1))
1753 size = tree_low_cst (size_tree, 1);
1756 /* If we still haven't been able to get a size, see if the language
1757 can compute a maximum size. */
1761 size_tree = lang_hooks.types.max_size (type);
1763 if (size_tree && host_integerp (size_tree, 1))
1764 size = tree_low_cst (size_tree, 1);
1770 /* Return the bit position of FIELD, in bits from the start of the record.
1771 This is a tree of type bitsizetype. */
1774 bit_position (tree field)
1776 return bit_from_pos (DECL_FIELD_OFFSET (field),
1777 DECL_FIELD_BIT_OFFSET (field));
1780 /* Likewise, but return as an integer. It must be representable in
1781 that way (since it could be a signed value, we don't have the
1782 option of returning -1 like int_size_in_byte can. */
1785 int_bit_position (tree field)
1787 return tree_low_cst (bit_position (field), 0);
1790 /* Return the byte position of FIELD, in bytes from the start of the record.
1791 This is a tree of type sizetype. */
1794 byte_position (tree field)
1796 return byte_from_pos (DECL_FIELD_OFFSET (field),
1797 DECL_FIELD_BIT_OFFSET (field));
1800 /* Likewise, but return as an integer. It must be representable in
1801 that way (since it could be a signed value, we don't have the
1802 option of returning -1 like int_size_in_byte can. */
1805 int_byte_position (tree field)
1807 return tree_low_cst (byte_position (field), 0);
1810 /* Return the strictest alignment, in bits, that T is known to have. */
1815 unsigned int align0, align1;
1817 switch (TREE_CODE (t))
1819 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1820 /* If we have conversions, we know that the alignment of the
1821 object must meet each of the alignments of the types. */
1822 align0 = expr_align (TREE_OPERAND (t, 0));
1823 align1 = TYPE_ALIGN (TREE_TYPE (t));
1824 return MAX (align0, align1);
1826 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1827 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1828 case CLEANUP_POINT_EXPR:
1829 /* These don't change the alignment of an object. */
1830 return expr_align (TREE_OPERAND (t, 0));
1833 /* The best we can do is say that the alignment is the least aligned
1835 align0 = expr_align (TREE_OPERAND (t, 1));
1836 align1 = expr_align (TREE_OPERAND (t, 2));
1837 return MIN (align0, align1);
1839 case LABEL_DECL: case CONST_DECL:
1840 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1841 if (DECL_ALIGN (t) != 0)
1842 return DECL_ALIGN (t);
1846 return FUNCTION_BOUNDARY;
1852 /* Otherwise take the alignment from that of the type. */
1853 return TYPE_ALIGN (TREE_TYPE (t));
1856 /* Return, as a tree node, the number of elements for TYPE (which is an
1857 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1860 array_type_nelts (tree type)
1862 tree index_type, min, max;
1864 /* If they did it with unspecified bounds, then we should have already
1865 given an error about it before we got here. */
1866 if (! TYPE_DOMAIN (type))
1867 return error_mark_node;
1869 index_type = TYPE_DOMAIN (type);
1870 min = TYPE_MIN_VALUE (index_type);
1871 max = TYPE_MAX_VALUE (index_type);
1873 return (integer_zerop (min)
1875 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
1878 /* If arg is static -- a reference to an object in static storage -- then
1879 return the object. This is not the same as the C meaning of `static'.
1880 If arg isn't static, return NULL. */
1885 switch (TREE_CODE (arg))
1888 /* Nested functions are static, even though taking their address will
1889 involve a trampoline as we unnest the nested function and create
1890 the trampoline on the tree level. */
1894 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1895 && ! DECL_THREAD_LOCAL_P (arg)
1896 && ! DECL_DLLIMPORT_P (arg)
1900 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1904 return TREE_STATIC (arg) ? arg : NULL;
1911 /* If the thing being referenced is not a field, then it is
1912 something language specific. */
1913 if (TREE_CODE (TREE_OPERAND (arg, 1)) != FIELD_DECL)
1914 return (*lang_hooks.staticp) (arg);
1916 /* If we are referencing a bitfield, we can't evaluate an
1917 ADDR_EXPR at compile time and so it isn't a constant. */
1918 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
1921 return staticp (TREE_OPERAND (arg, 0));
1926 case MISALIGNED_INDIRECT_REF:
1927 case ALIGN_INDIRECT_REF:
1929 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
1932 case ARRAY_RANGE_REF:
1933 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1934 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1935 return staticp (TREE_OPERAND (arg, 0));
1940 if ((unsigned int) TREE_CODE (arg)
1941 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1942 return lang_hooks.staticp (arg);
1948 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
1949 Do this to any expression which may be used in more than one place,
1950 but must be evaluated only once.
1952 Normally, expand_expr would reevaluate the expression each time.
1953 Calling save_expr produces something that is evaluated and recorded
1954 the first time expand_expr is called on it. Subsequent calls to
1955 expand_expr just reuse the recorded value.
1957 The call to expand_expr that generates code that actually computes
1958 the value is the first call *at compile time*. Subsequent calls
1959 *at compile time* generate code to use the saved value.
1960 This produces correct result provided that *at run time* control
1961 always flows through the insns made by the first expand_expr
1962 before reaching the other places where the save_expr was evaluated.
1963 You, the caller of save_expr, must make sure this is so.
1965 Constants, and certain read-only nodes, are returned with no
1966 SAVE_EXPR because that is safe. Expressions containing placeholders
1967 are not touched; see tree.def for an explanation of what these
1971 save_expr (tree expr)
1973 tree t = fold (expr);
1976 /* If the tree evaluates to a constant, then we don't want to hide that
1977 fact (i.e. this allows further folding, and direct checks for constants).
1978 However, a read-only object that has side effects cannot be bypassed.
1979 Since it is no problem to reevaluate literals, we just return the
1981 inner = skip_simple_arithmetic (t);
1983 if (TREE_INVARIANT (inner)
1984 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
1985 || TREE_CODE (inner) == SAVE_EXPR
1986 || TREE_CODE (inner) == ERROR_MARK)
1989 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
1990 it means that the size or offset of some field of an object depends on
1991 the value within another field.
1993 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1994 and some variable since it would then need to be both evaluated once and
1995 evaluated more than once. Front-ends must assure this case cannot
1996 happen by surrounding any such subexpressions in their own SAVE_EXPR
1997 and forcing evaluation at the proper time. */
1998 if (contains_placeholder_p (inner))
2001 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
2003 /* This expression might be placed ahead of a jump to ensure that the
2004 value was computed on both sides of the jump. So make sure it isn't
2005 eliminated as dead. */
2006 TREE_SIDE_EFFECTS (t) = 1;
2007 TREE_INVARIANT (t) = 1;
2011 /* Look inside EXPR and into any simple arithmetic operations. Return
2012 the innermost non-arithmetic node. */
2015 skip_simple_arithmetic (tree expr)
2019 /* We don't care about whether this can be used as an lvalue in this
2021 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
2022 expr = TREE_OPERAND (expr, 0);
2024 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
2025 a constant, it will be more efficient to not make another SAVE_EXPR since
2026 it will allow better simplification and GCSE will be able to merge the
2027 computations if they actually occur. */
2031 if (UNARY_CLASS_P (inner))
2032 inner = TREE_OPERAND (inner, 0);
2033 else if (BINARY_CLASS_P (inner))
2035 if (TREE_INVARIANT (TREE_OPERAND (inner, 1)))
2036 inner = TREE_OPERAND (inner, 0);
2037 else if (TREE_INVARIANT (TREE_OPERAND (inner, 0)))
2038 inner = TREE_OPERAND (inner, 1);
2049 /* Return which tree structure is used by T. */
2051 enum tree_node_structure_enum
2052 tree_node_structure (tree t)
2054 enum tree_code code = TREE_CODE (t);
2056 switch (TREE_CODE_CLASS (code))
2058 case tcc_declaration:
2063 return TS_FIELD_DECL;
2065 return TS_PARM_DECL;
2069 return TS_LABEL_DECL;
2071 return TS_RESULT_DECL;
2073 return TS_CONST_DECL;
2075 return TS_TYPE_DECL;
2077 return TS_FUNCTION_DECL;
2078 case SYMBOL_MEMORY_TAG:
2079 case NAME_MEMORY_TAG:
2080 case STRUCT_FIELD_TAG:
2081 return TS_MEMORY_TAG;
2083 return TS_DECL_NON_COMMON;
2089 case tcc_comparison:
2092 case tcc_expression:
2095 default: /* tcc_constant and tcc_exceptional */
2100 /* tcc_constant cases. */
2101 case INTEGER_CST: return TS_INT_CST;
2102 case REAL_CST: return TS_REAL_CST;
2103 case COMPLEX_CST: return TS_COMPLEX;
2104 case VECTOR_CST: return TS_VECTOR;
2105 case STRING_CST: return TS_STRING;
2106 /* tcc_exceptional cases. */
2107 case ERROR_MARK: return TS_COMMON;
2108 case IDENTIFIER_NODE: return TS_IDENTIFIER;
2109 case TREE_LIST: return TS_LIST;
2110 case TREE_VEC: return TS_VEC;
2111 case PHI_NODE: return TS_PHI_NODE;
2112 case SSA_NAME: return TS_SSA_NAME;
2113 case PLACEHOLDER_EXPR: return TS_COMMON;
2114 case STATEMENT_LIST: return TS_STATEMENT_LIST;
2115 case BLOCK: return TS_BLOCK;
2116 case CONSTRUCTOR: return TS_CONSTRUCTOR;
2117 case TREE_BINFO: return TS_BINFO;
2118 case VALUE_HANDLE: return TS_VALUE_HANDLE;
2119 case OMP_CLAUSE: return TS_OMP_CLAUSE;
2126 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2127 or offset that depends on a field within a record. */
2130 contains_placeholder_p (tree exp)
2132 enum tree_code code;
2137 code = TREE_CODE (exp);
2138 if (code == PLACEHOLDER_EXPR)
2141 switch (TREE_CODE_CLASS (code))
2144 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2145 position computations since they will be converted into a
2146 WITH_RECORD_EXPR involving the reference, which will assume
2147 here will be valid. */
2148 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2150 case tcc_exceptional:
2151 if (code == TREE_LIST)
2152 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
2153 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
2158 case tcc_comparison:
2159 case tcc_expression:
2163 /* Ignoring the first operand isn't quite right, but works best. */
2164 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2167 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2168 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
2169 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
2172 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
2178 switch (TREE_CODE_LENGTH (code))
2181 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
2183 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
2184 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
2195 /* Return true if any part of the computation of TYPE involves a
2196 PLACEHOLDER_EXPR. This includes size, bounds, qualifiers
2197 (for QUAL_UNION_TYPE) and field positions. */
2200 type_contains_placeholder_1 (tree type)
2202 /* If the size contains a placeholder or the parent type (component type in
2203 the case of arrays) type involves a placeholder, this type does. */
2204 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
2205 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
2206 || (TREE_TYPE (type) != 0
2207 && type_contains_placeholder_p (TREE_TYPE (type))))
2210 /* Now do type-specific checks. Note that the last part of the check above
2211 greatly limits what we have to do below. */
2212 switch (TREE_CODE (type))
2220 case REFERENCE_TYPE:
2228 /* Here we just check the bounds. */
2229 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
2230 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
2233 /* We're already checked the component type (TREE_TYPE), so just check
2235 return type_contains_placeholder_p (TYPE_DOMAIN (type));
2239 case QUAL_UNION_TYPE:
2243 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2244 if (TREE_CODE (field) == FIELD_DECL
2245 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
2246 || (TREE_CODE (type) == QUAL_UNION_TYPE
2247 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
2248 || type_contains_placeholder_p (TREE_TYPE (field))))
2260 type_contains_placeholder_p (tree type)
2264 /* If the contains_placeholder_bits field has been initialized,
2265 then we know the answer. */
2266 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
2267 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
2269 /* Indicate that we've seen this type node, and the answer is false.
2270 This is what we want to return if we run into recursion via fields. */
2271 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
2273 /* Compute the real value. */
2274 result = type_contains_placeholder_1 (type);
2276 /* Store the real value. */
2277 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
2282 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2283 return a tree with all occurrences of references to F in a
2284 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
2285 contains only arithmetic expressions or a CALL_EXPR with a
2286 PLACEHOLDER_EXPR occurring only in its arglist. */
2289 substitute_in_expr (tree exp, tree f, tree r)
2291 enum tree_code code = TREE_CODE (exp);
2292 tree op0, op1, op2, op3;
2296 /* We handle TREE_LIST and COMPONENT_REF separately. */
2297 if (code == TREE_LIST)
2299 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
2300 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
2301 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2304 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2306 else if (code == COMPONENT_REF)
2308 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2309 and it is the right field, replace it with R. */
2310 for (inner = TREE_OPERAND (exp, 0);
2311 REFERENCE_CLASS_P (inner);
2312 inner = TREE_OPERAND (inner, 0))
2314 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2315 && TREE_OPERAND (exp, 1) == f)
2318 /* If this expression hasn't been completed let, leave it alone. */
2319 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && TREE_TYPE (inner) == 0)
2322 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2323 if (op0 == TREE_OPERAND (exp, 0))
2326 new = fold_build3 (COMPONENT_REF, TREE_TYPE (exp),
2327 op0, TREE_OPERAND (exp, 1), NULL_TREE);
2330 switch (TREE_CODE_CLASS (code))
2333 case tcc_declaration:
2336 case tcc_exceptional:
2339 case tcc_comparison:
2340 case tcc_expression:
2342 switch (TREE_CODE_LENGTH (code))
2348 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2349 if (op0 == TREE_OPERAND (exp, 0))
2352 new = fold_build1 (code, TREE_TYPE (exp), op0);
2356 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2357 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2359 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2362 new = fold_build2 (code, TREE_TYPE (exp), op0, op1);
2366 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2367 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2368 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2370 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2371 && op2 == TREE_OPERAND (exp, 2))
2374 new = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2378 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
2379 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
2380 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
2381 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
2383 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2384 && op2 == TREE_OPERAND (exp, 2)
2385 && op3 == TREE_OPERAND (exp, 3))
2388 new = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2400 TREE_READONLY (new) = TREE_READONLY (exp);
2404 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
2405 for it within OBJ, a tree that is an object or a chain of references. */
2408 substitute_placeholder_in_expr (tree exp, tree obj)
2410 enum tree_code code = TREE_CODE (exp);
2411 tree op0, op1, op2, op3;
2413 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
2414 in the chain of OBJ. */
2415 if (code == PLACEHOLDER_EXPR)
2417 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
2420 for (elt = obj; elt != 0;
2421 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2422 || TREE_CODE (elt) == COND_EXPR)
2423 ? TREE_OPERAND (elt, 1)
2424 : (REFERENCE_CLASS_P (elt)
2425 || UNARY_CLASS_P (elt)
2426 || BINARY_CLASS_P (elt)
2427 || EXPRESSION_CLASS_P (elt))
2428 ? TREE_OPERAND (elt, 0) : 0))
2429 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
2432 for (elt = obj; elt != 0;
2433 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
2434 || TREE_CODE (elt) == COND_EXPR)
2435 ? TREE_OPERAND (elt, 1)
2436 : (REFERENCE_CLASS_P (elt)
2437 || UNARY_CLASS_P (elt)
2438 || BINARY_CLASS_P (elt)
2439 || EXPRESSION_CLASS_P (elt))
2440 ? TREE_OPERAND (elt, 0) : 0))
2441 if (POINTER_TYPE_P (TREE_TYPE (elt))
2442 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
2444 return fold_build1 (INDIRECT_REF, need_type, elt);
2446 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2447 survives until RTL generation, there will be an error. */
2451 /* TREE_LIST is special because we need to look at TREE_VALUE
2452 and TREE_CHAIN, not TREE_OPERANDS. */
2453 else if (code == TREE_LIST)
2455 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
2456 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
2457 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2460 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2463 switch (TREE_CODE_CLASS (code))
2466 case tcc_declaration:
2469 case tcc_exceptional:
2472 case tcc_comparison:
2473 case tcc_expression:
2476 switch (TREE_CODE_LENGTH (code))
2482 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2483 if (op0 == TREE_OPERAND (exp, 0))
2486 return fold_build1 (code, TREE_TYPE (exp), op0);
2489 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2490 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2492 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2495 return fold_build2 (code, TREE_TYPE (exp), op0, op1);
2498 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2499 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2500 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2502 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2503 && op2 == TREE_OPERAND (exp, 2))
2506 return fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
2509 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
2510 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
2511 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
2512 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
2514 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2515 && op2 == TREE_OPERAND (exp, 2)
2516 && op3 == TREE_OPERAND (exp, 3))
2519 return fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
2531 /* Stabilize a reference so that we can use it any number of times
2532 without causing its operands to be evaluated more than once.
2533 Returns the stabilized reference. This works by means of save_expr,
2534 so see the caveats in the comments about save_expr.
2536 Also allows conversion expressions whose operands are references.
2537 Any other kind of expression is returned unchanged. */
2540 stabilize_reference (tree ref)
2543 enum tree_code code = TREE_CODE (ref);
2550 /* No action is needed in this case. */
2556 case FIX_TRUNC_EXPR:
2557 case FIX_FLOOR_EXPR:
2558 case FIX_ROUND_EXPR:
2560 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2564 result = build_nt (INDIRECT_REF,
2565 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2569 result = build_nt (COMPONENT_REF,
2570 stabilize_reference (TREE_OPERAND (ref, 0)),
2571 TREE_OPERAND (ref, 1), NULL_TREE);
2575 result = build_nt (BIT_FIELD_REF,
2576 stabilize_reference (TREE_OPERAND (ref, 0)),
2577 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2578 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2582 result = build_nt (ARRAY_REF,
2583 stabilize_reference (TREE_OPERAND (ref, 0)),
2584 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2585 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2588 case ARRAY_RANGE_REF:
2589 result = build_nt (ARRAY_RANGE_REF,
2590 stabilize_reference (TREE_OPERAND (ref, 0)),
2591 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2592 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
2596 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2597 it wouldn't be ignored. This matters when dealing with
2599 return stabilize_reference_1 (ref);
2601 /* If arg isn't a kind of lvalue we recognize, make no change.
2602 Caller should recognize the error for an invalid lvalue. */
2607 return error_mark_node;
2610 TREE_TYPE (result) = TREE_TYPE (ref);
2611 TREE_READONLY (result) = TREE_READONLY (ref);
2612 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2613 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2618 /* Subroutine of stabilize_reference; this is called for subtrees of
2619 references. Any expression with side-effects must be put in a SAVE_EXPR
2620 to ensure that it is only evaluated once.
2622 We don't put SAVE_EXPR nodes around everything, because assigning very
2623 simple expressions to temporaries causes us to miss good opportunities
2624 for optimizations. Among other things, the opportunity to fold in the
2625 addition of a constant into an addressing mode often gets lost, e.g.
2626 "y[i+1] += x;". In general, we take the approach that we should not make
2627 an assignment unless we are forced into it - i.e., that any non-side effect
2628 operator should be allowed, and that cse should take care of coalescing
2629 multiple utterances of the same expression should that prove fruitful. */
2632 stabilize_reference_1 (tree e)
2635 enum tree_code code = TREE_CODE (e);
2637 /* We cannot ignore const expressions because it might be a reference
2638 to a const array but whose index contains side-effects. But we can
2639 ignore things that are actual constant or that already have been
2640 handled by this function. */
2642 if (TREE_INVARIANT (e))
2645 switch (TREE_CODE_CLASS (code))
2647 case tcc_exceptional:
2649 case tcc_declaration:
2650 case tcc_comparison:
2652 case tcc_expression:
2654 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2655 so that it will only be evaluated once. */
2656 /* The reference (r) and comparison (<) classes could be handled as
2657 below, but it is generally faster to only evaluate them once. */
2658 if (TREE_SIDE_EFFECTS (e))
2659 return save_expr (e);
2663 /* Constants need no processing. In fact, we should never reach
2668 /* Division is slow and tends to be compiled with jumps,
2669 especially the division by powers of 2 that is often
2670 found inside of an array reference. So do it just once. */
2671 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2672 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2673 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2674 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2675 return save_expr (e);
2676 /* Recursively stabilize each operand. */
2677 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2678 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2682 /* Recursively stabilize each operand. */
2683 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2690 TREE_TYPE (result) = TREE_TYPE (e);
2691 TREE_READONLY (result) = TREE_READONLY (e);
2692 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2693 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2694 TREE_INVARIANT (result) = 1;
2699 /* Low-level constructors for expressions. */
2701 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
2702 TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
2705 recompute_tree_invariant_for_addr_expr (tree t)
2708 bool tc = true, ti = true, se = false;
2710 /* We started out assuming this address is both invariant and constant, but
2711 does not have side effects. Now go down any handled components and see if
2712 any of them involve offsets that are either non-constant or non-invariant.
2713 Also check for side-effects.
2715 ??? Note that this code makes no attempt to deal with the case where
2716 taking the address of something causes a copy due to misalignment. */
2718 #define UPDATE_TITCSE(NODE) \
2719 do { tree _node = (NODE); \
2720 if (_node && !TREE_INVARIANT (_node)) ti = false; \
2721 if (_node && !TREE_CONSTANT (_node)) tc = false; \
2722 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
2724 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
2725 node = TREE_OPERAND (node, 0))
2727 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
2728 array reference (probably made temporarily by the G++ front end),
2729 so ignore all the operands. */
2730 if ((TREE_CODE (node) == ARRAY_REF
2731 || TREE_CODE (node) == ARRAY_RANGE_REF)
2732 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
2734 UPDATE_TITCSE (TREE_OPERAND (node, 1));
2735 if (TREE_OPERAND (node, 2))
2736 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2737 if (TREE_OPERAND (node, 3))
2738 UPDATE_TITCSE (TREE_OPERAND (node, 3));
2740 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
2741 FIELD_DECL, apparently. The G++ front end can put something else
2742 there, at least temporarily. */
2743 else if (TREE_CODE (node) == COMPONENT_REF
2744 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
2746 if (TREE_OPERAND (node, 2))
2747 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2749 else if (TREE_CODE (node) == BIT_FIELD_REF)
2750 UPDATE_TITCSE (TREE_OPERAND (node, 2));
2753 node = lang_hooks.expr_to_decl (node, &tc, &ti, &se);
2755 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
2756 the address, since &(*a)->b is a form of addition. If it's a decl, it's
2757 invariant and constant if the decl is static. It's also invariant if it's
2758 a decl in the current function. Taking the address of a volatile variable
2759 is not volatile. If it's a constant, the address is both invariant and
2760 constant. Otherwise it's neither. */
2761 if (TREE_CODE (node) == INDIRECT_REF)
2762 UPDATE_TITCSE (TREE_OPERAND (node, 0));
2763 else if (DECL_P (node))
2767 else if (decl_function_context (node) == current_function_decl
2768 /* Addresses of thread-local variables are invariant. */
2769 || (TREE_CODE (node) == VAR_DECL
2770 && DECL_THREAD_LOCAL_P (node)))
2775 else if (CONSTANT_CLASS_P (node))
2780 se |= TREE_SIDE_EFFECTS (node);
2783 TREE_CONSTANT (t) = tc;
2784 TREE_INVARIANT (t) = ti;
2785 TREE_SIDE_EFFECTS (t) = se;
2786 #undef UPDATE_TITCSE
2789 /* Build an expression of code CODE, data type TYPE, and operands as
2790 specified. Expressions and reference nodes can be created this way.
2791 Constants, decls, types and misc nodes cannot be.
2793 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2794 enough for all extant tree codes. */
2797 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2801 gcc_assert (TREE_CODE_LENGTH (code) == 0);
2803 t = make_node_stat (code PASS_MEM_STAT);
2810 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2812 int length = sizeof (struct tree_exp);
2813 #ifdef GATHER_STATISTICS
2814 tree_node_kind kind;
2818 #ifdef GATHER_STATISTICS
2819 switch (TREE_CODE_CLASS (code))
2821 case tcc_statement: /* an expression with side effects */
2824 case tcc_reference: /* a reference */
2832 tree_node_counts[(int) kind]++;
2833 tree_node_sizes[(int) kind] += length;
2836 gcc_assert (TREE_CODE_LENGTH (code) == 1);
2838 t = ggc_alloc_zone_pass_stat (length, &tree_zone);
2840 memset (t, 0, sizeof (struct tree_common));
2842 TREE_SET_CODE (t, code);
2844 TREE_TYPE (t) = type;
2845 #ifdef USE_MAPPED_LOCATION
2846 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2848 SET_EXPR_LOCUS (t, NULL);
2850 TREE_COMPLEXITY (t) = 0;
2851 TREE_OPERAND (t, 0) = node;
2852 TREE_BLOCK (t) = NULL_TREE;
2853 if (node && !TYPE_P (node))
2855 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2856 TREE_READONLY (t) = TREE_READONLY (node);
2859 if (TREE_CODE_CLASS (code) == tcc_statement)
2860 TREE_SIDE_EFFECTS (t) = 1;
2864 /* All of these have side-effects, no matter what their
2866 TREE_SIDE_EFFECTS (t) = 1;
2867 TREE_READONLY (t) = 0;
2870 case MISALIGNED_INDIRECT_REF:
2871 case ALIGN_INDIRECT_REF:
2873 /* Whether a dereference is readonly has nothing to do with whether
2874 its operand is readonly. */
2875 TREE_READONLY (t) = 0;
2880 recompute_tree_invariant_for_addr_expr (t);
2884 if (TREE_CODE_CLASS (code) == tcc_unary
2885 && node && !TYPE_P (node)
2886 && TREE_CONSTANT (node))
2887 TREE_CONSTANT (t) = 1;
2888 if (TREE_CODE_CLASS (code) == tcc_unary
2889 && node && TREE_INVARIANT (node))
2890 TREE_INVARIANT (t) = 1;
2891 if (TREE_CODE_CLASS (code) == tcc_reference
2892 && node && TREE_THIS_VOLATILE (node))
2893 TREE_THIS_VOLATILE (t) = 1;
2900 #define PROCESS_ARG(N) \
2902 TREE_OPERAND (t, N) = arg##N; \
2903 if (arg##N &&!TYPE_P (arg##N)) \
2905 if (TREE_SIDE_EFFECTS (arg##N)) \
2907 if (!TREE_READONLY (arg##N)) \
2909 if (!TREE_CONSTANT (arg##N)) \
2911 if (!TREE_INVARIANT (arg##N)) \
2917 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2919 bool constant, read_only, side_effects, invariant;
2922 gcc_assert (TREE_CODE_LENGTH (code) == 2);
2924 t = make_node_stat (code PASS_MEM_STAT);
2927 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2928 result based on those same flags for the arguments. But if the
2929 arguments aren't really even `tree' expressions, we shouldn't be trying
2932 /* Expressions without side effects may be constant if their
2933 arguments are as well. */
2934 constant = (TREE_CODE_CLASS (code) == tcc_comparison
2935 || TREE_CODE_CLASS (code) == tcc_binary);
2937 side_effects = TREE_SIDE_EFFECTS (t);
2938 invariant = constant;
2943 TREE_READONLY (t) = read_only;
2944 TREE_CONSTANT (t) = constant;
2945 TREE_INVARIANT (t) = invariant;
2946 TREE_SIDE_EFFECTS (t) = side_effects;
2947 TREE_THIS_VOLATILE (t)
2948 = (TREE_CODE_CLASS (code) == tcc_reference
2949 && arg0 && TREE_THIS_VOLATILE (arg0));
2955 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2956 tree arg2 MEM_STAT_DECL)
2958 bool constant, read_only, side_effects, invariant;
2961 gcc_assert (TREE_CODE_LENGTH (code) == 3);
2963 t = make_node_stat (code PASS_MEM_STAT);
2966 side_effects = TREE_SIDE_EFFECTS (t);
2972 if (code == CALL_EXPR && !side_effects)
2977 /* Calls have side-effects, except those to const or
2979 i = call_expr_flags (t);
2980 if (!(i & (ECF_CONST | ECF_PURE)))
2983 /* And even those have side-effects if their arguments do. */
2984 else for (node = arg1; node; node = TREE_CHAIN (node))
2985 if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2992 TREE_SIDE_EFFECTS (t) = side_effects;
2993 TREE_THIS_VOLATILE (t)
2994 = (TREE_CODE_CLASS (code) == tcc_reference
2995 && arg0 && TREE_THIS_VOLATILE (arg0));
3001 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3002 tree arg2, tree arg3 MEM_STAT_DECL)
3004 bool constant, read_only, side_effects, invariant;
3007 gcc_assert (TREE_CODE_LENGTH (code) == 4);
3009 t = make_node_stat (code PASS_MEM_STAT);
3012 side_effects = TREE_SIDE_EFFECTS (t);
3019 TREE_SIDE_EFFECTS (t) = side_effects;
3020 TREE_THIS_VOLATILE (t)
3021 = (TREE_CODE_CLASS (code) == tcc_reference
3022 && arg0 && TREE_THIS_VOLATILE (arg0));
3028 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3029 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
3031 bool constant, read_only, side_effects, invariant;
3034 gcc_assert (TREE_CODE_LENGTH (code) == 5);
3036 t = make_node_stat (code PASS_MEM_STAT);
3039 side_effects = TREE_SIDE_EFFECTS (t);
3047 TREE_SIDE_EFFECTS (t) = side_effects;
3048 TREE_THIS_VOLATILE (t)
3049 = (TREE_CODE_CLASS (code) == tcc_reference
3050 && arg0 && TREE_THIS_VOLATILE (arg0));
3056 build7_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
3057 tree arg2, tree arg3, tree arg4, tree arg5,
3058 tree arg6 MEM_STAT_DECL)
3060 bool constant, read_only, side_effects, invariant;
3063 gcc_assert (code == TARGET_MEM_REF);
3065 t = make_node_stat (code PASS_MEM_STAT);
3068 side_effects = TREE_SIDE_EFFECTS (t);
3078 TREE_SIDE_EFFECTS (t) = side_effects;
3079 TREE_THIS_VOLATILE (t) = 0;
3084 /* Similar except don't specify the TREE_TYPE
3085 and leave the TREE_SIDE_EFFECTS as 0.
3086 It is permissible for arguments to be null,
3087 or even garbage if their values do not matter. */
3090 build_nt (enum tree_code code, ...)
3099 t = make_node (code);
3100 length = TREE_CODE_LENGTH (code);
3102 for (i = 0; i < length; i++)
3103 TREE_OPERAND (t, i) = va_arg (p, tree);
3109 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3110 We do NOT enter this node in any sort of symbol table.
3112 layout_decl is used to set up the decl's storage layout.
3113 Other slots are initialized to 0 or null pointers. */
3116 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
3120 t = make_node_stat (code PASS_MEM_STAT);
3122 /* if (type == error_mark_node)
3123 type = integer_type_node; */
3124 /* That is not done, deliberately, so that having error_mark_node
3125 as the type can suppress useless errors in the use of this variable. */
3127 DECL_NAME (t) = name;
3128 TREE_TYPE (t) = type;
3130 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3132 else if (code == FUNCTION_DECL)
3133 DECL_MODE (t) = FUNCTION_MODE;
3135 if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
3137 /* Set default visibility to whatever the user supplied with
3138 visibility_specified depending on #pragma GCC visibility. */
3139 DECL_VISIBILITY (t) = default_visibility;
3140 DECL_VISIBILITY_SPECIFIED (t) = visibility_options.inpragma;
3146 /* Builds and returns function declaration with NAME and TYPE. */
3149 build_fn_decl (const char *name, tree type)
3151 tree id = get_identifier (name);
3152 tree decl = build_decl (FUNCTION_DECL, id, type);
3154 DECL_EXTERNAL (decl) = 1;
3155 TREE_PUBLIC (decl) = 1;
3156 DECL_ARTIFICIAL (decl) = 1;
3157 TREE_NOTHROW (decl) = 1;
3163 /* BLOCK nodes are used to represent the structure of binding contours
3164 and declarations, once those contours have been exited and their contents
3165 compiled. This information is used for outputting debugging info. */
3168 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
3170 tree block = make_node (BLOCK);
3172 BLOCK_VARS (block) = vars;
3173 BLOCK_SUBBLOCKS (block) = subblocks;
3174 BLOCK_SUPERCONTEXT (block) = supercontext;
3175 BLOCK_CHAIN (block) = chain;
3179 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
3180 /* ??? gengtype doesn't handle conditionals */
3181 static GTY(()) source_locus last_annotated_node;
3184 #ifdef USE_MAPPED_LOCATION
3187 expand_location (source_location loc)
3189 expanded_location xloc;
3190 if (loc == 0) { xloc.file = NULL; xloc.line = 0; xloc.column = 0; }
3193 const struct line_map *map = linemap_lookup (&line_table, loc);
3194 xloc.file = map->to_file;
3195 xloc.line = SOURCE_LINE (map, loc);
3196 xloc.column = SOURCE_COLUMN (map, loc);
3203 /* Record the exact location where an expression or an identifier were
3207 annotate_with_file_line (tree node, const char *file, int line)
3209 /* Roughly one percent of the calls to this function are to annotate
3210 a node with the same information already attached to that node!
3211 Just return instead of wasting memory. */
3212 if (EXPR_LOCUS (node)
3213 && EXPR_LINENO (node) == line
3214 && (EXPR_FILENAME (node) == file
3215 || !strcmp (EXPR_FILENAME (node), file)))
3217 last_annotated_node = EXPR_LOCUS (node);
3221 /* In heavily macroized code (such as GCC itself) this single
3222 entry cache can reduce the number of allocations by more
3224 if (last_annotated_node
3225 && last_annotated_node->line == line
3226 && (last_annotated_node->file == file
3227 || !strcmp (last_annotated_node->file, file)))
3229 SET_EXPR_LOCUS (node, last_annotated_node);
3233 SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
3234 EXPR_LINENO (node) = line;
3235 EXPR_FILENAME (node) = file;
3236 last_annotated_node = EXPR_LOCUS (node);
3240 annotate_with_locus (tree node, location_t locus)
3242 annotate_with_file_line (node, locus.file, locus.line);
3246 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
3250 build_decl_attribute_variant (tree ddecl, tree attribute)
3252 DECL_ATTRIBUTES (ddecl) = attribute;
3256 /* Borrowed from hashtab.c iterative_hash implementation. */
3257 #define mix(a,b,c) \
3259 a -= b; a -= c; a ^= (c>>13); \
3260 b -= c; b -= a; b ^= (a<< 8); \
3261 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
3262 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
3263 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
3264 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
3265 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
3266 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
3267 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
3271 /* Produce good hash value combining VAL and VAL2. */
3272 static inline hashval_t
3273 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
3275 /* the golden ratio; an arbitrary value. */
3276 hashval_t a = 0x9e3779b9;
3282 /* Produce good hash value combining PTR and VAL2. */
3283 static inline hashval_t
3284 iterative_hash_pointer (void *ptr, hashval_t val2)
3286 if (sizeof (ptr) == sizeof (hashval_t))
3287 return iterative_hash_hashval_t ((size_t) ptr, val2);
3290 hashval_t a = (hashval_t) (size_t) ptr;
3291 /* Avoid warnings about shifting of more than the width of the type on
3292 hosts that won't execute this path. */
3294 hashval_t b = (hashval_t) ((size_t) ptr >> (sizeof (hashval_t) * 8 + zero));
3300 /* Produce good hash value combining VAL and VAL2. */
3301 static inline hashval_t
3302 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
3304 if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
3305 return iterative_hash_hashval_t (val, val2);
3308 hashval_t a = (hashval_t) val;
3309 /* Avoid warnings about shifting of more than the width of the type on
3310 hosts that won't execute this path. */
3312 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
3314 if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
3316 hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
3317 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
3324 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3327 Record such modified types already made so we don't make duplicates. */
3330 build_type_attribute_variant (tree ttype, tree attribute)
3332 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3334 hashval_t hashcode = 0;
3336 enum tree_code code = TREE_CODE (ttype);
3338 ntype = copy_node (ttype);
3340 TYPE_POINTER_TO (ntype) = 0;
3341 TYPE_REFERENCE_TO (ntype) = 0;
3342 TYPE_ATTRIBUTES (ntype) = attribute;
3344 /* Create a new main variant of TYPE. */
3345 TYPE_MAIN_VARIANT (ntype) = ntype;
3346 TYPE_NEXT_VARIANT (ntype) = 0;
3347 set_type_quals (ntype, TYPE_UNQUALIFIED);
3349 hashcode = iterative_hash_object (code, hashcode);
3350 if (TREE_TYPE (ntype))
3351 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
3353 hashcode = attribute_hash_list (attribute, hashcode);
3355 switch (TREE_CODE (ntype))
3358 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
3361 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
3365 hashcode = iterative_hash_object
3366 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
3367 hashcode = iterative_hash_object
3368 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
3372 unsigned int precision = TYPE_PRECISION (ntype);
3373 hashcode = iterative_hash_object (precision, hashcode);
3380 ntype = type_hash_canon (hashcode, ntype);
3381 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3388 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3391 We try both `text' and `__text__', ATTR may be either one. */
3392 /* ??? It might be a reasonable simplification to require ATTR to be only
3393 `text'. One might then also require attribute lists to be stored in
3394 their canonicalized form. */
3397 is_attribute_with_length_p (const char *attr, int attr_len, tree ident)
3402 if (TREE_CODE (ident) != IDENTIFIER_NODE)
3405 p = IDENTIFIER_POINTER (ident);
3406 ident_len = IDENTIFIER_LENGTH (ident);
3408 if (ident_len == attr_len
3409 && strcmp (attr, p) == 0)
3412 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
3415 gcc_assert (attr[1] == '_');
3416 gcc_assert (attr[attr_len - 2] == '_');
3417 gcc_assert (attr[attr_len - 1] == '_');
3418 gcc_assert (attr[1] == '_');
3419 if (ident_len == attr_len - 4
3420 && strncmp (attr + 2, p, attr_len - 4) == 0)
3425 if (ident_len == attr_len + 4
3426 && p[0] == '_' && p[1] == '_'
3427 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3428 && strncmp (attr, p + 2, attr_len) == 0)
3435 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3438 We try both `text' and `__text__', ATTR may be either one. */
3441 is_attribute_p (const char *attr, tree ident)
3443 return is_attribute_with_length_p (attr, strlen (attr), ident);
3446 /* Given an attribute name and a list of attributes, return a pointer to the
3447 attribute's list element if the attribute is part of the list, or NULL_TREE
3448 if not found. If the attribute appears more than once, this only
3449 returns the first occurrence; the TREE_CHAIN of the return value should
3450 be passed back in if further occurrences are wanted. */
3453 lookup_attribute (const char *attr_name, tree list)
3456 size_t attr_len = strlen (attr_name);
3458 for (l = list; l; l = TREE_CHAIN (l))
3460 gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3461 if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3468 /* Return an attribute list that is the union of a1 and a2. */
3471 merge_attributes (tree a1, tree a2)
3475 /* Either one unset? Take the set one. */
3477 if ((attributes = a1) == 0)
3480 /* One that completely contains the other? Take it. */
3482 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3484 if (attribute_list_contained (a2, a1))
3488 /* Pick the longest list, and hang on the other list. */
3490 if (list_length (a1) < list_length (a2))
3491 attributes = a2, a2 = a1;
3493 for (; a2 != 0; a2 = TREE_CHAIN (a2))
3496 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3499 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3502 if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
3507 a1 = copy_node (a2);
3508 TREE_CHAIN (a1) = attributes;
3517 /* Given types T1 and T2, merge their attributes and return
3521 merge_type_attributes (tree t1, tree t2)
3523 return merge_attributes (TYPE_ATTRIBUTES (t1),
3524 TYPE_ATTRIBUTES (t2));
3527 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3531 merge_decl_attributes (tree olddecl, tree newdecl)
3533 return merge_attributes (DECL_ATTRIBUTES (olddecl),
3534 DECL_ATTRIBUTES (newdecl));
3537 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3539 /* Specialization of merge_decl_attributes for various Windows targets.
3541 This handles the following situation:
3543 __declspec (dllimport) int foo;
3546 The second instance of `foo' nullifies the dllimport. */
3549 merge_dllimport_decl_attributes (tree old, tree new)
3552 int delete_dllimport_p = 1;
3554 /* What we need to do here is remove from `old' dllimport if it doesn't
3555 appear in `new'. dllimport behaves like extern: if a declaration is
3556 marked dllimport and a definition appears later, then the object
3557 is not dllimport'd. We also remove a `new' dllimport if the old list
3558 contains dllexport: dllexport always overrides dllimport, regardless
3559 of the order of declaration. */
3560 if (!VAR_OR_FUNCTION_DECL_P (new))
3561 delete_dllimport_p = 0;
3562 else if (DECL_DLLIMPORT_P (new)
3563 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
3565 DECL_DLLIMPORT_P (new) = 0;
3566 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
3567 "dllimport ignored", new);
3569 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new))
3571 /* Warn about overriding a symbol that has already been used. eg:
3572 extern int __attribute__ ((dllimport)) foo;
3573 int* bar () {return &foo;}
3576 if (TREE_USED (old))
3578 warning (0, "%q+D redeclared without dllimport attribute "
3579 "after being referenced with dll linkage", new);
3580 /* If we have used a variable's address with dllimport linkage,
3581 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
3582 decl may already have had TREE_INVARIANT and TREE_CONSTANT
3584 We still remove the attribute so that assembler code refers
3585 to '&foo rather than '_imp__foo'. */
3586 if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
3587 DECL_DLLIMPORT_P (new) = 1;
3590 /* Let an inline definition silently override the external reference,
3591 but otherwise warn about attribute inconsistency. */
3592 else if (TREE_CODE (new) == VAR_DECL
3593 || !DECL_DECLARED_INLINE_P (new))
3594 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
3595 "previous dllimport ignored", new);
3598 delete_dllimport_p = 0;
3600 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new));
3602 if (delete_dllimport_p)
3605 const size_t attr_len = strlen ("dllimport");
3607 /* Scan the list for dllimport and delete it. */
3608 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3610 if (is_attribute_with_length_p ("dllimport", attr_len,
3613 if (prev == NULL_TREE)
3616 TREE_CHAIN (prev) = TREE_CHAIN (t);
3625 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
3626 struct attribute_spec.handler. */
3629 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
3634 /* These attributes may apply to structure and union types being created,
3635 but otherwise should pass to the declaration involved. */
3638 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
3639 | (int) ATTR_FLAG_ARRAY_NEXT))
3641 *no_add_attrs = true;
3642 return tree_cons (name, args, NULL_TREE);
3644 if (TREE_CODE (node) != RECORD_TYPE && TREE_CODE (node) != UNION_TYPE)
3646 warning (OPT_Wattributes, "%qs attribute ignored",
3647 IDENTIFIER_POINTER (name));
3648 *no_add_attrs = true;
3654 /* Report error on dllimport ambiguities seen now before they cause
3656 if (is_attribute_p ("dllimport", name))
3658 /* Honor any target-specific overrides. */
3659 if (!targetm.valid_dllimport_attribute_p (node))
3660 *no_add_attrs = true;
3662 else if (TREE_CODE (node) == FUNCTION_DECL
3663 && DECL_DECLARED_INLINE_P (node))
3665 warning (OPT_Wattributes, "inline function %q+D declared as "
3666 " dllimport: attribute ignored", node);
3667 *no_add_attrs = true;
3669 /* Like MS, treat definition of dllimported variables and
3670 non-inlined functions on declaration as syntax errors. */
3671 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
3673 error ("function %q+D definition is marked dllimport", node);
3674 *no_add_attrs = true;
3677 else if (TREE_CODE (node) == VAR_DECL)
3679 if (DECL_INITIAL (node))
3681 error ("variable %q+D definition is marked dllimport",
3683 *no_add_attrs = true;
3686 /* `extern' needn't be specified with dllimport.
3687 Specify `extern' now and hope for the best. Sigh. */
3688 DECL_EXTERNAL (node) = 1;
3689 /* Also, implicitly give dllimport'd variables declared within
3690 a function global scope, unless declared static. */
3691 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
3692 TREE_PUBLIC (node) = 1;
3695 if (*no_add_attrs == false)
3696 DECL_DLLIMPORT_P (node) = 1;
3699 /* Report error if symbol is not accessible at global scope. */
3700 if (!TREE_PUBLIC (node)
3701 && (TREE_CODE (node) == VAR_DECL
3702 || TREE_CODE (node) == FUNCTION_DECL))
3704 error ("external linkage required for symbol %q+D because of "
3705 "%qs attribute", node, IDENTIFIER_POINTER (name));
3706 *no_add_attrs = true;
3712 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
3714 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3715 of the various TYPE_QUAL values. */
3718 set_type_quals (tree type, int type_quals)
3720 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3721 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3722 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3725 /* Returns true iff cand is equivalent to base with type_quals. */
3728 check_qualified_type (tree cand, tree base, int type_quals)
3730 return (TYPE_QUALS (cand) == type_quals
3731 && TYPE_NAME (cand) == TYPE_NAME (base)
3732 /* Apparently this is needed for Objective-C. */
3733 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
3734 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
3735 TYPE_ATTRIBUTES (base)));
3738 /* Return a version of the TYPE, qualified as indicated by the
3739 TYPE_QUALS, if one exists. If no qualified version exists yet,
3740 return NULL_TREE. */
3743 get_qualified_type (tree type, int type_quals)
3747 if (TYPE_QUALS (type) == type_quals)
3750 /* Search the chain of variants to see if there is already one there just