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.
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
[] =
74 /* obstack.[ch] explicitly declined to prototype this. */
75 extern int _obstack_allocated_p (struct obstack
*h
, void *obj
);
77 #ifdef GATHER_STATISTICS
78 /* Statistics-gathering stuff. */
80 int tree_node_counts
[(int) all_kinds
];
81 int tree_node_sizes
[(int) all_kinds
];
83 /* Keep in sync with tree.h:enum tree_node_kind. */
84 static const char * const tree_node_kind_names
[] = {
106 #endif /* GATHER_STATISTICS */
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;
113 /* Since we cannot rehash a type after it is in the table, we have to
114 keep the hash code. */
116 struct type_hash
GTY(())
122 /* Initial size of the hash table (rounded to next prime). */
123 #define TYPE_HASH_INITIAL_SIZE 1000
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. */
132 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash
)))
133 htab_t type_hash_table
;
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
;
140 /* General tree->tree mapping structure for use in hash tables. */
143 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map
)))
144 htab_t debug_expr_for_decl
;
146 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map
)))
147 htab_t value_expr_for_decl
;
149 static GTY ((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map
)))
150 htab_t init_priority_for_decl
;
152 static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map
)))
153 htab_t restrict_base_for_decl
;
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
);
167 tree global_trees
[TI_MAX
];
168 tree integer_types
[itk_none
];
170 unsigned char tree_contains_struct
[256][64];
172 /* Number of operands for each OpenMP clause. */
173 unsigned const char omp_clause_num_ops
[] =
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 */
191 const char * const omp_clause_code_name
[] =
214 /* Initialize the hash table of types. */
215 type_hash_table
= htab_create_ggc (TYPE_HASH_INITIAL_SIZE
, type_hash_hash
,
218 debug_expr_for_decl
= htab_create_ggc (512, tree_map_hash
,
221 value_expr_for_decl
= htab_create_ggc (512, tree_map_hash
,
223 init_priority_for_decl
= htab_create_ggc (512, tree_int_map_hash
,
225 restrict_base_for_decl
= htab_create_ggc (256, tree_map_hash
,
228 int_cst_hash_table
= htab_create_ggc (1024, int_cst_hash_hash
,
229 int_cst_hash_eq
, NULL
);
231 int_cst_node
= make_node (INTEGER_CST
);
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;
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;
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;
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;
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;
275 tree_contains_struct
[STRUCT_FIELD_TAG
][TS_STRUCT_FIELD_TAG
] = 1;
276 tree_contains_struct
[MEMORY_PARTITION_TAG
][TS_MEMORY_PARTITION_TAG
] = 1;
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;
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;
292 lang_hooks
.init_ts ();
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. */
300 decl_assembler_name (tree decl
)
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
;
307 /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL. */
310 decl_assembler_name_equal (tree decl
, tree asmname
)
312 tree decl_asmname
= DECL_ASSEMBLER_NAME (decl
);
314 if (decl_asmname
== asmname
)
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] == '*')
325 const char *decl_str
= IDENTIFIER_POINTER (decl_asmname
) + 1;
326 size_t ulp_len
= strlen (user_label_prefix
);
330 else if (strncmp (decl_str
, user_label_prefix
, ulp_len
) == 0)
335 return strcmp (decl_str
, IDENTIFIER_POINTER (asmname
)) == 0;
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. */
345 tree_code_size (enum tree_code code
)
347 switch (TREE_CODE_CLASS (code
))
349 case tcc_declaration
: /* A decl node */
354 return sizeof (struct tree_field_decl
);
356 return sizeof (struct tree_parm_decl
);
358 return sizeof (struct tree_var_decl
);
360 return sizeof (struct tree_label_decl
);
362 return sizeof (struct tree_result_decl
);
364 return sizeof (struct tree_const_decl
);
366 return sizeof (struct tree_type_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
);
377 return sizeof (struct tree_decl_non_common
);
381 case tcc_type
: /* a type node */
382 return sizeof (struct tree_type
);
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
));
393 case tcc_gimple_stmt
:
394 return (sizeof (struct gimple_stmt
)
395 + (TREE_CODE_LENGTH (code
) - 1) * sizeof (char *));
397 case tcc_constant
: /* a constant */
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 ();
406 return lang_hooks
.tree_size (code
);
409 case tcc_exceptional
: /* something random, like an identifier. */
412 case IDENTIFIER_NODE
: return lang_hooks
.identifier_size
;
413 case TREE_LIST
: return sizeof (struct tree_list
);
416 case PLACEHOLDER_EXPR
: return sizeof (struct tree_common
);
420 case PHI_NODE
: gcc_unreachable ();
422 case SSA_NAME
: return sizeof (struct tree_ssa_name
);
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
);
430 return lang_hooks
.tree_size (code
);
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. */
441 tree_size (tree node
)
443 enum tree_code code
= TREE_CODE (node
);
447 return (sizeof (struct tree_phi_node
)
448 + (PHI_ARG_CAPACITY (node
) - 1) * sizeof (struct phi_arg_d
));
451 return (offsetof (struct tree_binfo
, base_binfos
)
452 + VEC_embedded_size (tree
, BINFO_N_BASE_BINFOS (node
)));
455 return (sizeof (struct tree_vec
)
456 + (TREE_VEC_LENGTH (node
) - 1) * sizeof (tree
));
459 return TREE_STRING_LENGTH (node
) + offsetof (struct tree_string
, str
) + 1;
462 return (sizeof (struct tree_omp_clause
)
463 + (omp_clause_num_ops
[OMP_CLAUSE_CODE (node
)] - 1)
467 if (TREE_CODE_CLASS (code
) == tcc_vl_exp
)
468 return (sizeof (struct tree_exp
)
469 + (VL_EXP_OPERAND_LENGTH (node
) - 1) * sizeof (tree
));
471 return tree_code_size (code
);
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
481 Achoo! I got a code in the node. */
484 make_node_stat (enum tree_code code MEM_STAT_DECL
)
487 enum tree_code_class type
= TREE_CODE_CLASS (code
);
488 size_t length
= tree_code_size (code
);
489 #ifdef GATHER_STATISTICS
494 case tcc_declaration
: /* A decl node */
498 case tcc_type
: /* a type node */
502 case tcc_statement
: /* an expression with side effects */
506 case tcc_reference
: /* a reference */
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 */
517 case tcc_constant
: /* a constant */
521 case tcc_gimple_stmt
:
522 kind
= gimple_stmt_kind
;
525 case tcc_exceptional
: /* something random, like an identifier. */
528 case IDENTIFIER_NODE
:
545 kind
= ssa_name_kind
;
566 tree_node_counts
[(int) kind
]++;
567 tree_node_sizes
[(int) kind
] += length
;
570 if (code
== IDENTIFIER_NODE
)
571 t
= ggc_alloc_zone_pass_stat (length
, &tree_id_zone
);
573 t
= ggc_alloc_zone_pass_stat (length
, &tree_zone
);
575 memset (t
, 0, length
);
577 TREE_SET_CODE (t
, code
);
582 TREE_SIDE_EFFECTS (t
) = 1;
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
))
590 if (code
!= FUNCTION_DECL
)
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;
596 DECL_SOURCE_LOCATION (t
) = input_location
;
597 DECL_UID (t
) = next_decl_uid
++;
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
;
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
);
612 /* We have not yet computed the alias set for this type. */
613 TYPE_ALIAS_SET (t
) = -1;
617 TREE_CONSTANT (t
) = 1;
618 TREE_INVARIANT (t
) = 1;
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
633 TREE_SIDE_EFFECTS (t
) = 1;
641 case tcc_gimple_stmt
:
644 case GIMPLE_MODIFY_STMT
:
645 TREE_SIDE_EFFECTS (t
) = 1;
653 /* Other classes need no special treatment. */
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. */
664 copy_node_stat (tree node MEM_STAT_DECL
)
667 enum tree_code code
= TREE_CODE (node
);
670 gcc_assert (code
!= STATEMENT_LIST
);
672 length
= tree_size (node
);
673 t
= ggc_alloc_zone_pass_stat (length
, &tree_zone
);
674 memcpy (t
, node
, length
);
676 if (!GIMPLE_TUPLE_P (node
))
678 TREE_ASM_WRITTEN (t
) = 0;
679 TREE_VISITED (t
) = 0;
682 if (TREE_CODE_CLASS (code
) == tcc_declaration
)
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
))
688 SET_DECL_VALUE_EXPR (t
, DECL_VALUE_EXPR (node
));
689 DECL_HAS_VALUE_EXPR_P (t
) = 1;
691 if (TREE_CODE (node
) == VAR_DECL
&& DECL_HAS_INIT_PRIORITY_P (node
))
693 SET_DECL_INIT_PRIORITY (t
, DECL_INIT_PRIORITY (node
));
694 DECL_HAS_INIT_PRIORITY_P (t
) = 1;
696 if (TREE_CODE (node
) == VAR_DECL
&& DECL_BASED_ON_RESTRICT_P (node
))
698 SET_DECL_RESTRICT_BASE (t
, DECL_GET_RESTRICT_BASE (node
));
699 DECL_BASED_ON_RESTRICT_P (t
) = 1;
702 else if (TREE_CODE_CLASS (code
) == tcc_type
)
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;
713 /* Do not copy the values cache. */
714 if (TYPE_CACHED_VALUES_P(t
))
716 TYPE_CACHED_VALUES_P (t
) = 0;
717 TYPE_CACHED_VALUES (t
) = NULL_TREE
;
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. */
728 copy_list (tree list
)
736 head
= prev
= copy_node (list
);
737 next
= TREE_CHAIN (list
);
740 TREE_CHAIN (prev
) = copy_node (next
);
741 prev
= TREE_CHAIN (prev
);
742 next
= TREE_CHAIN (next
);
748 /* Create an INT_CST node with a LOW value sign extended. */
751 build_int_cst (tree type
, HOST_WIDE_INT low
)
753 /* Support legacy code. */
755 type
= integer_type_node
;
757 return build_int_cst_wide (type
, low
, low
< 0 ? -1 : 0);
760 /* Create an INT_CST node with a LOW value zero extended. */
763 build_int_cstu (tree type
, unsigned HOST_WIDE_INT low
)
765 return build_int_cst_wide (type
, low
, 0);
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. */
778 build_int_cst_type (tree type
, HOST_WIDE_INT low
)
780 unsigned HOST_WIDE_INT low1
;
785 fit_double_type (low
, low
< 0 ? -1 : 0, &low1
, &hi
, type
);
787 return build_int_cst_wide (type
, low1
, hi
);
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. */
794 build_int_cst_wide_type (tree type
,
795 unsigned HOST_WIDE_INT low
, HOST_WIDE_INT high
)
797 fit_double_type (low
, high
, &low
, &high
, type
);
798 return build_int_cst_wide (type
, low
, high
);
801 /* These are the hash table functions for the hash table of INTEGER_CST
802 nodes of a sizetype. */
804 /* Return the hash code code X, an INTEGER_CST. */
807 int_cst_hash_hash (const void *x
)
811 return (TREE_INT_CST_HIGH (t
) ^ TREE_INT_CST_LOW (t
)
812 ^ htab_hash_pointer (TREE_TYPE (t
)));
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. */
819 int_cst_hash_eq (const void *x
, const void *y
)
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
));
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. */
834 build_int_cst_wide (tree type
, unsigned HOST_WIDE_INT low
, HOST_WIDE_INT hi
)
842 switch (TREE_CODE (type
))
846 /* Cache NULL pointer. */
855 /* Cache false or true. */
863 if (TYPE_UNSIGNED (type
))
866 limit
= INTEGER_SHARE_LIMIT
;
867 if (!hi
&& low
< (unsigned HOST_WIDE_INT
)INTEGER_SHARE_LIMIT
)
873 limit
= INTEGER_SHARE_LIMIT
+ 1;
874 if (!hi
&& low
< (unsigned HOST_WIDE_INT
)INTEGER_SHARE_LIMIT
)
876 else if (hi
== -1 && low
== -(unsigned HOST_WIDE_INT
)1)
890 /* Look for it in the type's vector of small shared ints. */
891 if (!TYPE_CACHED_VALUES_P (type
))
893 TYPE_CACHED_VALUES_P (type
) = 1;
894 TYPE_CACHED_VALUES (type
) = make_tree_vec (limit
);
897 t
= TREE_VEC_ELT (TYPE_CACHED_VALUES (type
), ix
);
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
);
907 /* Create a new shared int. */
908 t
= make_node (INTEGER_CST
);
910 TREE_INT_CST_LOW (t
) = low
;
911 TREE_INT_CST_HIGH (t
) = hi
;
912 TREE_TYPE (t
) = type
;
914 TREE_VEC_ELT (TYPE_CACHED_VALUES (type
), ix
) = t
;
919 /* Use the cache of larger shared ints. */
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
;
926 slot
= htab_find_slot (int_cst_hash_table
, int_cst_node
, INSERT
);
930 /* Insert this one into the hash table. */
933 /* Make a new node for next time round. */
934 int_cst_node
= make_node (INTEGER_CST
);
941 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
942 and the rest are zeros. */
945 build_low_bits_mask (tree type
, unsigned bits
)
947 unsigned HOST_WIDE_INT low
;
949 unsigned HOST_WIDE_INT all_ones
= ~(unsigned HOST_WIDE_INT
) 0;
951 gcc_assert (bits
<= TYPE_PRECISION (type
));
953 if (bits
== TYPE_PRECISION (type
)
954 && !TYPE_UNSIGNED (type
))
956 /* Sign extended all-ones mask. */
960 else if (bits
<= HOST_BITS_PER_WIDE_INT
)
962 low
= all_ones
>> (HOST_BITS_PER_WIDE_INT
- bits
);
967 bits
-= HOST_BITS_PER_WIDE_INT
;
969 high
= all_ones
>> (HOST_BITS_PER_WIDE_INT
- bits
);
972 return build_int_cst_wide (type
, low
, high
);
975 /* Checks that X is integer constant that can be expressed in (unsigned)
976 HOST_WIDE_INT without loss of precision. */
979 cst_and_fits_in_hwi (tree x
)
981 if (TREE_CODE (x
) != INTEGER_CST
)
984 if (TYPE_PRECISION (TREE_TYPE (x
)) > HOST_BITS_PER_WIDE_INT
)
987 return (TREE_INT_CST_HIGH (x
) == 0
988 || TREE_INT_CST_HIGH (x
) == -1);
991 /* Return a new VECTOR_CST node whose type is TYPE and whose values
992 are in a list pointed to by VALS. */
995 build_vector (tree type
, tree vals
)
997 tree v
= make_node (VECTOR_CST
);
1001 TREE_VECTOR_CST_ELTS (v
) = vals
;
1002 TREE_TYPE (v
) = type
;
1004 /* Iterate through elements and check for overflow. */
1005 for (link
= vals
; link
; link
= TREE_CHAIN (link
))
1007 tree value
= TREE_VALUE (link
);
1009 /* Don't crash if we get an address constant. */
1010 if (!CONSTANT_CLASS_P (value
))
1013 over
|= TREE_OVERFLOW (value
);
1016 TREE_OVERFLOW (v
) = over
;
1020 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1021 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1024 build_vector_from_ctor (tree type
, VEC(constructor_elt
,gc
) *v
)
1026 tree list
= NULL_TREE
;
1027 unsigned HOST_WIDE_INT idx
;
1030 FOR_EACH_CONSTRUCTOR_VALUE (v
, idx
, value
)
1031 list
= tree_cons (NULL_TREE
, value
, list
);
1032 return build_vector (type
, nreverse (list
));
1035 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1036 are in the VEC pointed to by VALS. */
1038 build_constructor (tree type
, VEC(constructor_elt
,gc
) *vals
)
1040 tree c
= make_node (CONSTRUCTOR
);
1041 TREE_TYPE (c
) = type
;
1042 CONSTRUCTOR_ELTS (c
) = vals
;
1046 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1049 build_constructor_single (tree type
, tree index
, tree value
)
1051 VEC(constructor_elt
,gc
) *v
;
1052 constructor_elt
*elt
;
1055 v
= VEC_alloc (constructor_elt
, gc
, 1);
1056 elt
= VEC_quick_push (constructor_elt
, v
, NULL
);
1060 t
= build_constructor (type
, v
);
1061 TREE_CONSTANT (t
) = TREE_CONSTANT (value
);
1066 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1067 are in a list pointed to by VALS. */
1069 build_constructor_from_list (tree type
, tree vals
)
1072 VEC(constructor_elt
,gc
) *v
= NULL
;
1073 bool constant_p
= true;
1077 v
= VEC_alloc (constructor_elt
, gc
, list_length (vals
));
1078 for (t
= vals
; t
; t
= TREE_CHAIN (t
))
1080 constructor_elt
*elt
= VEC_quick_push (constructor_elt
, v
, NULL
);
1081 val
= TREE_VALUE (t
);
1082 elt
->index
= TREE_PURPOSE (t
);
1084 if (!TREE_CONSTANT (val
))
1089 t
= build_constructor (type
, v
);
1090 TREE_CONSTANT (t
) = constant_p
;
1095 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1098 build_real (tree type
, REAL_VALUE_TYPE d
)
1101 REAL_VALUE_TYPE
*dp
;
1104 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1105 Consider doing it via real_convert now. */
1107 v
= make_node (REAL_CST
);
1108 dp
= ggc_alloc (sizeof (REAL_VALUE_TYPE
));
1109 memcpy (dp
, &d
, sizeof (REAL_VALUE_TYPE
));
1111 TREE_TYPE (v
) = type
;
1112 TREE_REAL_CST_PTR (v
) = dp
;
1113 TREE_OVERFLOW (v
) = overflow
;
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. */
1121 real_value_from_int_cst (tree type
, tree i
)
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
);
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
)));
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. */
1139 build_real_from_int_cst (tree type
, tree i
)
1142 int overflow
= TREE_OVERFLOW (i
);
1144 v
= build_real (type
, real_value_from_int_cst (type
, i
));
1146 TREE_OVERFLOW (v
) |= overflow
;
1150 /* Return a newly constructed STRING_CST node whose value is
1151 the LEN characters at STR.
1152 The TREE_TYPE is not initialized. */
1155 build_string (int len
, const char *str
)
1160 /* Do not waste bytes provided by padding of struct tree_string. */
1161 length
= len
+ offsetof (struct tree_string
, str
) + 1;
1163 #ifdef GATHER_STATISTICS
1164 tree_node_counts
[(int) c_kind
]++;
1165 tree_node_sizes
[(int) c_kind
] += length
;
1168 s
= ggc_alloc_tree (length
);
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';
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. */
1187 build_complex (tree type
, tree real
, tree imag
)
1189 tree t
= make_node (COMPLEX_CST
);
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
);
1198 /* Return a constant of arithmetic type TYPE which is the
1199 multiplicative identity of the set TYPE. */
1202 build_one_cst (tree type
)
1204 switch (TREE_CODE (type
))
1206 case INTEGER_TYPE
: case ENUMERAL_TYPE
: case BOOLEAN_TYPE
:
1207 case POINTER_TYPE
: case REFERENCE_TYPE
:
1209 return build_int_cst (type
, 1);
1212 return build_real (type
, dconst1
);
1219 scalar
= build_one_cst (TREE_TYPE (type
));
1221 /* Create 'vect_cst_ = {cst,cst,...,cst}' */
1223 for (i
= TYPE_VECTOR_SUBPARTS (type
); --i
>= 0; )
1224 cst
= tree_cons (NULL_TREE
, scalar
, cst
);
1226 return build_vector (type
, cst
);
1230 return build_complex (type
,
1231 build_one_cst (TREE_TYPE (type
)),
1232 fold_convert (TREE_TYPE (type
), integer_zero_node
));
1239 /* Build a BINFO with LEN language slots. */
1242 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL
)
1245 size_t length
= (offsetof (struct tree_binfo
, base_binfos
)
1246 + VEC_embedded_size (tree
, base_binfos
));
1248 #ifdef GATHER_STATISTICS
1249 tree_node_counts
[(int) binfo_kind
]++;
1250 tree_node_sizes
[(int) binfo_kind
] += length
;
1253 t
= ggc_alloc_zone_pass_stat (length
, &tree_zone
);
1255 memset (t
, 0, offsetof (struct tree_binfo
, base_binfos
));
1257 TREE_SET_CODE (t
, TREE_BINFO
);
1259 VEC_embedded_init (tree
, BINFO_BASE_BINFOS (t
), base_binfos
);
1265 /* Build a newly constructed TREE_VEC node of length LEN. */
1268 make_tree_vec_stat (int len MEM_STAT_DECL
)
1271 int length
= (len
- 1) * sizeof (tree
) + sizeof (struct tree_vec
);
1273 #ifdef GATHER_STATISTICS
1274 tree_node_counts
[(int) vec_kind
]++;
1275 tree_node_sizes
[(int) vec_kind
] += length
;
1278 t
= ggc_alloc_zone_pass_stat (length
, &tree_zone
);
1280 memset (t
, 0, length
);
1282 TREE_SET_CODE (t
, TREE_VEC
);
1283 TREE_VEC_LENGTH (t
) = len
;
1288 /* Return 1 if EXPR is the integer constant zero or a complex constant
1292 integer_zerop (tree expr
)
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
))));
1304 /* Return 1 if EXPR is the integer constant one or the corresponding
1305 complex constant. */
1308 integer_onep (tree expr
)
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
))));
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. */
1324 integer_all_onesp (tree expr
)
1331 if (TREE_CODE (expr
) == COMPLEX_CST
1332 && integer_all_onesp (TREE_REALPART (expr
))
1333 && integer_zerop (TREE_IMAGPART (expr
)))
1336 else if (TREE_CODE (expr
) != INTEGER_CST
)
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)
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
)
1351 HOST_WIDE_INT high_value
;
1354 shift_amount
= prec
- HOST_BITS_PER_WIDE_INT
;
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. */
1363 high_value
= ((HOST_WIDE_INT
) 1 << shift_amount
) - 1;
1365 return (TREE_INT_CST_LOW (expr
) == ~(unsigned HOST_WIDE_INT
) 0
1366 && TREE_INT_CST_HIGH (expr
) == high_value
);
1369 return TREE_INT_CST_LOW (expr
) == ((unsigned HOST_WIDE_INT
) 1 << prec
) - 1;
1372 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1376 integer_pow2p (tree expr
)
1379 HOST_WIDE_INT high
, low
;
1383 if (TREE_CODE (expr
) == COMPLEX_CST
1384 && integer_pow2p (TREE_REALPART (expr
))
1385 && integer_zerop (TREE_IMAGPART (expr
)))
1388 if (TREE_CODE (expr
) != INTEGER_CST
)
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
);
1396 /* First clear all bits that are beyond the type's precision in case
1397 we've been sign extended. */
1399 if (prec
== 2 * HOST_BITS_PER_WIDE_INT
)
1401 else if (prec
> HOST_BITS_PER_WIDE_INT
)
1402 high
&= ~((HOST_WIDE_INT
) (-1) << (prec
- HOST_BITS_PER_WIDE_INT
));
1406 if (prec
< HOST_BITS_PER_WIDE_INT
)
1407 low
&= ~((HOST_WIDE_INT
) (-1) << prec
);
1410 if (high
== 0 && low
== 0)
1413 return ((high
== 0 && (low
& (low
- 1)) == 0)
1414 || (low
== 0 && (high
& (high
- 1)) == 0));
1417 /* Return 1 if EXPR is an integer constant other than zero or a
1418 complex constant other than zero. */
1421 integer_nonzerop (tree expr
)
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
)))));
1433 /* Return the power of two represented by a tree node known to be a
1437 tree_log2 (tree expr
)
1440 HOST_WIDE_INT high
, low
;
1444 if (TREE_CODE (expr
) == COMPLEX_CST
)
1445 return tree_log2 (TREE_REALPART (expr
));
1447 prec
= (POINTER_TYPE_P (TREE_TYPE (expr
))
1448 ? POINTER_SIZE
: TYPE_PRECISION (TREE_TYPE (expr
)));
1450 high
= TREE_INT_CST_HIGH (expr
);
1451 low
= TREE_INT_CST_LOW (expr
);
1453 /* First clear all bits that are beyond the type's precision in case
1454 we've been sign extended. */
1456 if (prec
== 2 * HOST_BITS_PER_WIDE_INT
)
1458 else if (prec
> HOST_BITS_PER_WIDE_INT
)
1459 high
&= ~((HOST_WIDE_INT
) (-1) << (prec
- HOST_BITS_PER_WIDE_INT
));
1463 if (prec
< HOST_BITS_PER_WIDE_INT
)
1464 low
&= ~((HOST_WIDE_INT
) (-1) << prec
);
1467 return (high
!= 0 ? HOST_BITS_PER_WIDE_INT
+ exact_log2 (high
)
1468 : exact_log2 (low
));
1471 /* Similar, but return the largest integer Y such that 2 ** Y is less
1472 than or equal to EXPR. */
1475 tree_floor_log2 (tree expr
)
1478 HOST_WIDE_INT high
, low
;
1482 if (TREE_CODE (expr
) == COMPLEX_CST
)
1483 return tree_log2 (TREE_REALPART (expr
));
1485 prec
= (POINTER_TYPE_P (TREE_TYPE (expr
))
1486 ? POINTER_SIZE
: TYPE_PRECISION (TREE_TYPE (expr
)));
1488 high
= TREE_INT_CST_HIGH (expr
);
1489 low
= TREE_INT_CST_LOW (expr
);
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. */
1495 if (prec
== 2 * HOST_BITS_PER_WIDE_INT
|| prec
== 0)
1497 else if (prec
> HOST_BITS_PER_WIDE_INT
)
1498 high
&= ~((HOST_WIDE_INT
) (-1) << (prec
- HOST_BITS_PER_WIDE_INT
));
1502 if (prec
< HOST_BITS_PER_WIDE_INT
)
1503 low
&= ~((HOST_WIDE_INT
) (-1) << prec
);
1506 return (high
!= 0 ? HOST_BITS_PER_WIDE_INT
+ floor_log2 (high
)
1507 : floor_log2 (low
));
1510 /* Return 1 if EXPR is the real constant zero. */
1513 real_zerop (tree expr
)
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
))));
1524 /* Return 1 if EXPR is the real constant one in real or complex form. */
1527 real_onep (tree expr
)
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
))));
1538 /* Return 1 if EXPR is the real constant two. */
1541 real_twop (tree expr
)
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
))));
1552 /* Return 1 if EXPR is the real constant minus one. */
1555 real_minus_onep (tree expr
)
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
))));
1566 /* Nonzero if EXP is a constant or a cast of a constant. */
1569 really_constant_p (tree exp
)
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
);
1579 /* Return first list element whose TREE_VALUE is ELEM.
1580 Return 0 if ELEM is not in LIST. */
1583 value_member (tree elem
, tree list
)
1587 if (elem
== TREE_VALUE (list
))
1589 list
= TREE_CHAIN (list
);
1594 /* Return first list element whose TREE_PURPOSE is ELEM.
1595 Return 0 if ELEM is not in LIST. */
1598 purpose_member (tree elem
, tree list
)
1602 if (elem
== TREE_PURPOSE (list
))
1604 list
= TREE_CHAIN (list
);
1609 /* Return nonzero if ELEM is part of the chain CHAIN. */
1612 chain_member (tree elem
, tree chain
)
1618 chain
= TREE_CHAIN (chain
);
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'. */
1629 list_length (tree t
)
1632 #ifdef ENABLE_TREE_CHECKING
1640 #ifdef ENABLE_TREE_CHECKING
1643 gcc_assert (p
!= q
);
1651 /* Returns the number of FIELD_DECLs in TYPE. */
1654 fields_length (tree type
)
1656 tree t
= TYPE_FIELDS (type
);
1659 for (; t
; t
= TREE_CHAIN (t
))
1660 if (TREE_CODE (t
) == FIELD_DECL
)
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'. */
1671 chainon (tree op1
, tree op2
)
1680 for (t1
= op1
; TREE_CHAIN (t1
); t1
= TREE_CHAIN (t1
))
1682 TREE_CHAIN (t1
) = op2
;
1684 #ifdef ENABLE_TREE_CHECKING
1687 for (t2
= op2
; t2
; t2
= TREE_CHAIN (t2
))
1688 gcc_assert (t2
!= t1
);
1695 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1698 tree_last (tree chain
)
1702 while ((next
= TREE_CHAIN (chain
)))
1707 /* Reverse the order of elements in the chain T,
1708 and return the new head of the chain (old last element). */
1713 tree prev
= 0, decl
, next
;
1714 for (decl
= t
; decl
; decl
= next
)
1716 next
= TREE_CHAIN (decl
);
1717 TREE_CHAIN (decl
) = prev
;
1723 /* Return a newly created TREE_LIST node whose
1724 purpose and value fields are PARM and VALUE. */
1727 build_tree_list_stat (tree parm
, tree value MEM_STAT_DECL
)
1729 tree t
= make_node_stat (TREE_LIST PASS_MEM_STAT
);
1730 TREE_PURPOSE (t
) = parm
;
1731 TREE_VALUE (t
) = value
;
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. */
1740 tree_cons_stat (tree purpose
, tree value
, tree chain MEM_STAT_DECL
)
1744 node
= ggc_alloc_zone_pass_stat (sizeof (struct tree_list
), &tree_zone
);
1746 memset (node
, 0, sizeof (struct tree_common
));
1748 #ifdef GATHER_STATISTICS
1749 tree_node_counts
[(int) x_kind
]++;
1750 tree_node_sizes
[(int) x_kind
] += sizeof (struct tree_list
);
1753 TREE_SET_CODE (node
, TREE_LIST
);
1754 TREE_CHAIN (node
) = chain
;
1755 TREE_PURPOSE (node
) = purpose
;
1756 TREE_VALUE (node
) = value
;
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). */
1768 size_in_bytes (tree type
)
1772 if (type
== error_mark_node
)
1773 return integer_zero_node
;
1775 type
= TYPE_MAIN_VARIANT (type
);
1776 t
= TYPE_SIZE_UNIT (type
);
1780 lang_hooks
.types
.incomplete_type_error (NULL_TREE
, type
);
1781 return size_zero_node
;
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. */
1791 int_size_in_bytes (tree type
)
1795 if (type
== error_mark_node
)
1798 type
= TYPE_MAIN_VARIANT (type
);
1799 t
= TYPE_SIZE_UNIT (type
);
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)
1807 return TREE_INT_CST_LOW (t
);
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. */
1814 max_int_size_in_bytes (tree type
)
1816 HOST_WIDE_INT size
= -1;
1819 /* If this is an array type, check for a possible MAX_SIZE attached. */
1821 if (TREE_CODE (type
) == ARRAY_TYPE
)
1823 size_tree
= TYPE_ARRAY_MAX_SIZE (type
);
1825 if (size_tree
&& host_integerp (size_tree
, 1))
1826 size
= tree_low_cst (size_tree
, 1);
1829 /* If we still haven't been able to get a size, see if the language
1830 can compute a maximum size. */
1834 size_tree
= lang_hooks
.types
.max_size (type
);
1836 if (size_tree
&& host_integerp (size_tree
, 1))
1837 size
= tree_low_cst (size_tree
, 1);
1843 /* Return the bit position of FIELD, in bits from the start of the record.
1844 This is a tree of type bitsizetype. */
1847 bit_position (tree field
)
1849 return bit_from_pos (DECL_FIELD_OFFSET (field
),
1850 DECL_FIELD_BIT_OFFSET (field
));
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. */
1858 int_bit_position (tree field
)
1860 return tree_low_cst (bit_position (field
), 0);
1863 /* Return the byte position of FIELD, in bytes from the start of the record.
1864 This is a tree of type sizetype. */
1867 byte_position (tree field
)
1869 return byte_from_pos (DECL_FIELD_OFFSET (field
),
1870 DECL_FIELD_BIT_OFFSET (field
));
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. */
1878 int_byte_position (tree field
)
1880 return tree_low_cst (byte_position (field
), 0);
1883 /* Return the strictest alignment, in bits, that T is known to have. */
1888 unsigned int align0
, align1
;
1890 switch (TREE_CODE (t
))
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
);
1899 case GIMPLE_MODIFY_STMT
:
1900 /* We should never ask for the alignment of a gimple statement. */
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));
1910 /* The best we can do is say that the alignment is the least aligned
1912 align0
= expr_align (TREE_OPERAND (t
, 1));
1913 align1
= expr_align (TREE_OPERAND (t
, 2));
1914 return MIN (align0
, align1
);
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
);
1923 return FUNCTION_BOUNDARY
;
1929 /* Otherwise take the alignment from that of the type. */
1930 return TYPE_ALIGN (TREE_TYPE (t
));
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. */
1937 array_type_nelts (tree type
)
1939 tree index_type
, min
, max
;
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
;
1946 index_type
= TYPE_DOMAIN (type
);
1947 min
= TYPE_MIN_VALUE (index_type
);
1948 max
= TYPE_MAX_VALUE (index_type
);
1950 return (integer_zerop (min
)
1952 : fold_build2 (MINUS_EXPR
, TREE_TYPE (max
), max
, min
));
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. */
1962 switch (TREE_CODE (arg
))
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. */
1971 return ((TREE_STATIC (arg
) || DECL_EXTERNAL (arg
))
1972 && ! DECL_THREAD_LOCAL_P (arg
)
1973 && ! DECL_DLLIMPORT_P (arg
)
1977 return ((TREE_STATIC (arg
) || DECL_EXTERNAL (arg
))
1981 return TREE_STATIC (arg
) ? arg
: NULL
;
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
);
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)))
1998 return staticp (TREE_OPERAND (arg
, 0));
2003 case MISALIGNED_INDIRECT_REF
:
2004 case ALIGN_INDIRECT_REF
:
2006 return TREE_CONSTANT (TREE_OPERAND (arg
, 0)) ? arg
: NULL
;
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));
2017 if ((unsigned int) TREE_CODE (arg
)
2018 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE
)
2019 return lang_hooks
.staticp (arg
);
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.
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.
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.
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
2048 save_expr (tree expr
)
2050 tree t
= fold (expr
);
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
2058 inner
= skip_simple_arithmetic (t
);
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
)
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.
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
))
2078 t
= build1 (SAVE_EXPR
, TREE_TYPE (expr
), t
);
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;
2088 /* Look inside EXPR and into any simple arithmetic operations. Return
2089 the innermost non-arithmetic node. */
2092 skip_simple_arithmetic (tree expr
)
2096 /* We don't care about whether this can be used as an lvalue in this
2098 while (TREE_CODE (expr
) == NON_LVALUE_EXPR
)
2099 expr
= TREE_OPERAND (expr
, 0);
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. */
2108 if (UNARY_CLASS_P (inner
))
2109 inner
= TREE_OPERAND (inner
, 0);
2110 else if (BINARY_CLASS_P (inner
))
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);
2126 /* Return which tree structure is used by T. */
2128 enum tree_node_structure_enum
2129 tree_node_structure (tree t
)
2131 enum tree_code code
= TREE_CODE (t
);
2133 switch (TREE_CODE_CLASS (code
))
2135 case tcc_declaration
:
2140 return TS_FIELD_DECL
;
2142 return TS_PARM_DECL
;
2146 return TS_LABEL_DECL
;
2148 return TS_RESULT_DECL
;
2150 return TS_CONST_DECL
;
2152 return TS_TYPE_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
;
2161 return TS_DECL_NON_COMMON
;
2167 case tcc_comparison
:
2170 case tcc_expression
:
2174 case tcc_gimple_stmt
:
2175 return TS_GIMPLE_STATEMENT
;
2176 default: /* tcc_constant and tcc_exceptional */
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
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
;
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. */
2213 contains_placeholder_p (tree exp
)
2215 enum tree_code code
;
2220 code
= TREE_CODE (exp
);
2221 if (code
== PLACEHOLDER_EXPR
)
2224 switch (TREE_CODE_CLASS (code
))
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));
2233 case tcc_exceptional
:
2234 if (code
== TREE_LIST
)
2235 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp
))
2236 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp
)));
2241 case tcc_comparison
:
2242 case tcc_expression
:
2246 /* Ignoring the first operand isn't quite right, but works best. */
2247 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp
, 1));
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)));
2258 switch (TREE_CODE_LENGTH (code
))
2261 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp
, 0));
2263 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp
, 0))
2264 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp
, 1)));
2275 call_expr_arg_iterator iter
;
2276 FOR_EACH_CALL_EXPR_ARG (arg
, iter
, exp
)
2277 if (CONTAINS_PLACEHOLDER_P (arg
))
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. */
2296 type_contains_placeholder_1 (tree type
)
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
))))
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
))
2316 case REFERENCE_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
)));
2329 /* We're already checked the component type (TREE_TYPE), so just check
2331 return type_contains_placeholder_p (TYPE_DOMAIN (type
));
2335 case QUAL_UNION_TYPE
:
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
))))
2356 type_contains_placeholder_p (tree type
)
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;
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;
2369 /* Compute the real value. */
2370 result
= type_contains_placeholder_1 (type
);
2372 /* Store the real value. */
2373 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type
) = result
+ 1;
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. */
2385 substitute_in_expr (tree exp
, tree f
, tree r
)
2387 enum tree_code code
= TREE_CODE (exp
);
2388 tree op0
, op1
, op2
, op3
;
2392 /* We handle TREE_LIST and COMPONENT_REF separately. */
2393 if (code
== TREE_LIST
)
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
))
2400 return tree_cons (TREE_PURPOSE (exp
), op1
, op0
);
2402 else if (code
== COMPONENT_REF
)
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))
2410 if (TREE_CODE (inner
) == PLACEHOLDER_EXPR
2411 && TREE_OPERAND (exp
, 1) == f
)
2414 /* If this expression hasn't been completed let, leave it alone. */
2415 if (TREE_CODE (inner
) == PLACEHOLDER_EXPR
&& TREE_TYPE (inner
) == 0)
2418 op0
= SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp
, 0), f
, r
);
2419 if (op0
== TREE_OPERAND (exp
, 0))
2422 new = fold_build3 (COMPONENT_REF
, TREE_TYPE (exp
),
2423 op0
, TREE_OPERAND (exp
, 1), NULL_TREE
);
2426 switch (TREE_CODE_CLASS (code
))
2429 case tcc_declaration
:
2432 case tcc_exceptional
:
2435 case tcc_comparison
:
2436 case tcc_expression
:
2438 switch (TREE_CODE_LENGTH (code
))
2444 op0
= SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp
, 0), f
, r
);
2445 if (op0
== TREE_OPERAND (exp
, 0))
2448 new = fold_build1 (code
, TREE_TYPE (exp
), op0
);
2452 op0
= SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp
, 0), f
, r
);
2453 op1
= SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp
, 1), f
, r
);
2455 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1))
2458 new = fold_build2 (code
, TREE_TYPE (exp
), op0
, op1
);
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
);
2466 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1)
2467 && op2
== TREE_OPERAND (exp
, 2))
2470 new = fold_build3 (code
, TREE_TYPE (exp
), op0
, op1
, op2
);
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
);
2479 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1)
2480 && op2
== TREE_OPERAND (exp
, 2)
2481 && op3
== TREE_OPERAND (exp
, 3))
2484 new = fold (build4 (code
, TREE_TYPE (exp
), op0
, op1
, op2
, op3
));
2494 tree copy
= NULL_TREE
;
2496 int n
= TREE_OPERAND_LENGTH (exp
);
2497 for (i
= 1; i
< n
; i
++)
2499 tree op
= TREE_OPERAND (exp
, i
);
2500 tree newop
= SUBSTITUTE_IN_EXPR (op
, f
, r
);
2503 copy
= copy_node (exp
);
2504 TREE_OPERAND (copy
, i
) = newop
;
2517 TREE_READONLY (new) = TREE_READONLY (exp
);
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. */
2525 substitute_placeholder_in_expr (tree exp
, tree obj
)
2527 enum tree_code code
= TREE_CODE (exp
);
2528 tree op0
, op1
, op2
, op3
;
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
)
2534 tree need_type
= TYPE_MAIN_VARIANT (TREE_TYPE (exp
));
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
)
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
)))
2563 return fold_build1 (INDIRECT_REF
, need_type
, elt
);
2565 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
2566 survives until RTL generation, there will be an error. */
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
)
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
))
2579 return tree_cons (TREE_PURPOSE (exp
), op1
, op0
);
2582 switch (TREE_CODE_CLASS (code
))
2585 case tcc_declaration
:
2588 case tcc_exceptional
:
2591 case tcc_comparison
:
2592 case tcc_expression
:
2595 switch (TREE_CODE_LENGTH (code
))
2601 op0
= SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp
, 0), obj
);
2602 if (op0
== TREE_OPERAND (exp
, 0))
2605 return fold_build1 (code
, TREE_TYPE (exp
), op0
);
2608 op0
= SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp
, 0), obj
);
2609 op1
= SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp
, 1), obj
);
2611 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1))
2614 return fold_build2 (code
, TREE_TYPE (exp
), op0
, op1
);
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
);
2621 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1)
2622 && op2
== TREE_OPERAND (exp
, 2))
2625 return fold_build3 (code
, TREE_TYPE (exp
), op0
, op1
, op2
);
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
);
2633 if (op0
== TREE_OPERAND (exp
, 0) && op1
== TREE_OPERAND (exp
, 1)
2634 && op2
== TREE_OPERAND (exp
, 2)
2635 && op3
== TREE_OPERAND (exp
, 3))
2638 return fold (build4 (code
, TREE_TYPE (exp
), op0
, op1
, op2
, op3
));
2647 tree copy
= NULL_TREE
;
2649 int n
= TREE_OPERAND_LENGTH (exp
);
2650 for (i
= 1; i
< n
; i
++)
2652 tree op
= TREE_OPERAND (exp
, i
);
2653 tree newop
= SUBSTITUTE_PLACEHOLDER_IN_EXPR (op
, obj
);
2657 copy
= copy_node (exp
);
2658 TREE_OPERAND (copy
, i
) = newop
;
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.
2677 Also allows conversion expressions whose operands are references.
2678 Any other kind of expression is returned unchanged. */
2681 stabilize_reference (tree ref
)
2684 enum tree_code code
= TREE_CODE (ref
);
2691 /* No action is needed in this case. */
2697 case FIX_TRUNC_EXPR
:
2698 result
= build_nt (code
, stabilize_reference (TREE_OPERAND (ref
, 0)));
2702 result
= build_nt (INDIRECT_REF
,
2703 stabilize_reference_1 (TREE_OPERAND (ref
, 0)));
2707 result
= build_nt (COMPONENT_REF
,
2708 stabilize_reference (TREE_OPERAND (ref
, 0)),
2709 TREE_OPERAND (ref
, 1), NULL_TREE
);
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)));
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));
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));
2734 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2735 it wouldn't be ignored. This matters when dealing with
2737 return stabilize_reference_1 (ref
);
2739 /* If arg isn't a kind of lvalue we recognize, make no change.
2740 Caller should recognize the error for an invalid lvalue. */
2745 return error_mark_node
;
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
);
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.
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. */
2770 stabilize_reference_1 (tree e
)
2773 enum tree_code code
= TREE_CODE (e
);
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. */
2780 if (TREE_INVARIANT (e
))
2783 switch (TREE_CODE_CLASS (code
))
2785 case tcc_exceptional
:
2787 case tcc_declaration
:
2788 case tcc_comparison
:
2790 case tcc_expression
:
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
);
2802 /* Constants need no processing. In fact, we should never reach
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)));
2821 /* Recursively stabilize each operand. */
2822 result
= build_nt (code
, stabilize_reference_1 (TREE_OPERAND (e
, 0)));
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;
2838 /* Low-level constructors for expressions. */
2840 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
2841 TREE_INVARIANT, and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
2844 recompute_tree_invariant_for_addr_expr (tree t
)
2847 bool tc
= true, ti
= true, se
= false;
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.
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. */
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)
2863 for (node
= TREE_OPERAND (t
, 0); handled_component_p (node
);
2864 node
= TREE_OPERAND (node
, 0))
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
)
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));
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
)
2885 if (TREE_OPERAND (node
, 2))
2886 UPDATE_TITCSE (TREE_OPERAND (node
, 2));
2888 else if (TREE_CODE (node
) == BIT_FIELD_REF
)
2889 UPDATE_TITCSE (TREE_OPERAND (node
, 2));
2892 node
= lang_hooks
.expr_to_decl (node
, &tc
, &ti
, &se
);
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
))
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
)))
2914 else if (CONSTANT_CLASS_P (node
))
2919 se
|= TREE_SIDE_EFFECTS (node
);
2922 TREE_CONSTANT (t
) = tc
;
2923 TREE_INVARIANT (t
) = ti
;
2924 TREE_SIDE_EFFECTS (t
) = se
;
2925 #undef UPDATE_TITCSE
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.
2932 We define 5 non-variadic functions, from 0 to 4 arguments. This is
2933 enough for all extant tree codes. */
2936 build0_stat (enum tree_code code
, tree tt MEM_STAT_DECL
)
2940 gcc_assert (TREE_CODE_LENGTH (code
) == 0);
2942 t
= make_node_stat (code PASS_MEM_STAT
);
2949 build1_stat (enum tree_code code
, tree type
, tree node MEM_STAT_DECL
)
2951 int length
= sizeof (struct tree_exp
);
2952 #ifdef GATHER_STATISTICS
2953 tree_node_kind kind
;
2957 #ifdef GATHER_STATISTICS
2958 switch (TREE_CODE_CLASS (code
))
2960 case tcc_statement
: /* an expression with side effects */
2963 case tcc_reference
: /* a reference */
2971 tree_node_counts
[(int) kind
]++;
2972 tree_node_sizes
[(int) kind
] += length
;
2975 gcc_assert (TREE_CODE_LENGTH (code
) == 1);
2977 t
= ggc_alloc_zone_pass_stat (length
, &tree_zone
);
2979 memset (t
, 0, sizeof (struct tree_common
));
2981 TREE_SET_CODE (t
, code
);
2983 TREE_TYPE (t
) = type
;
2984 #ifdef USE_MAPPED_LOCATION
2985 SET_EXPR_LOCATION (t
, UNKNOWN_LOCATION
);
2987 SET_EXPR_LOCUS (t
, NULL
);
2989 TREE_OPERAND (t
, 0) = node
;
2990 TREE_BLOCK (t
) = NULL_TREE
;
2991 if (node
&& !TYPE_P (node
))
2993 TREE_SIDE_EFFECTS (t
) = TREE_SIDE_EFFECTS (node
);
2994 TREE_READONLY (t
) = TREE_READONLY (node
);
2997 if (TREE_CODE_CLASS (code
) == tcc_statement
)
2998 TREE_SIDE_EFFECTS (t
) = 1;
3002 /* All of these have side-effects, no matter what their
3004 TREE_SIDE_EFFECTS (t
) = 1;
3005 TREE_READONLY (t
) = 0;
3008 case MISALIGNED_INDIRECT_REF
:
3009 case ALIGN_INDIRECT_REF
:
3011 /* Whether a dereference is readonly has nothing to do with whether
3012 its operand is readonly. */
3013 TREE_READONLY (t
) = 0;
3018 recompute_tree_invariant_for_addr_expr (t
);
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;
3038 #define PROCESS_ARG(N) \
3040 TREE_OPERAND (t, N) = arg##N; \
3041 if (arg##N &&!TYPE_P (arg##N)) \
3043 if (TREE_SIDE_EFFECTS (arg##N)) \
3045 if (!TREE_READONLY (arg##N)) \
3047 if (!TREE_CONSTANT (arg##N)) \
3049 if (!TREE_INVARIANT (arg##N)) \
3055 build2_stat (enum tree_code code
, tree tt
, tree arg0
, tree arg1 MEM_STAT_DECL
)
3057 bool constant
, read_only
, side_effects
, invariant
;
3060 gcc_assert (TREE_CODE_LENGTH (code
) == 2);
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
);
3067 /* Must use build_gimple_modify_stmt to construct GIMPLE_MODIFY_STMTs. */
3068 gcc_assert (code
!= GIMPLE_MODIFY_STMT
);
3071 t
= make_node_stat (code PASS_MEM_STAT
);
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
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
);
3084 side_effects
= TREE_SIDE_EFFECTS (t
);
3085 invariant
= constant
;
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
));
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). */
3106 build_gimple_modify_stmt_stat (tree arg0
, tree arg1 MEM_STAT_DECL
)
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
;
3118 build3_stat (enum tree_code code
, tree tt
, tree arg0
, tree arg1
,
3119 tree arg2 MEM_STAT_DECL
)
3121 bool constant
, read_only
, side_effects
, invariant
;
3124 gcc_assert (TREE_CODE_LENGTH (code
) == 3);
3125 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
3127 t
= make_node_stat (code PASS_MEM_STAT
);
3130 side_effects
= TREE_SIDE_EFFECTS (t
);
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
));
3145 build4_stat (enum tree_code code
, tree tt
, tree arg0
, tree arg1
,
3146 tree arg2
, tree arg3 MEM_STAT_DECL
)
3148 bool constant
, read_only
, side_effects
, invariant
;
3151 gcc_assert (TREE_CODE_LENGTH (code
) == 4);
3153 t
= make_node_stat (code PASS_MEM_STAT
);
3156 side_effects
= TREE_SIDE_EFFECTS (t
);
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
));
3172 build5_stat (enum tree_code code
, tree tt
, tree arg0
, tree arg1
,
3173 tree arg2
, tree arg3
, tree arg4 MEM_STAT_DECL
)
3175 bool constant
, read_only
, side_effects
, invariant
;
3178 gcc_assert (TREE_CODE_LENGTH (code
) == 5);
3180 t
= make_node_stat (code PASS_MEM_STAT
);
3183 side_effects
= TREE_SIDE_EFFECTS (t
);
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
));
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
)
3204 bool constant
, read_only
, side_effects
, invariant
;
3207 gcc_assert (code
== TARGET_MEM_REF
);
3209 t
= make_node_stat (code PASS_MEM_STAT
);
3212 side_effects
= TREE_SIDE_EFFECTS (t
);
3222 TREE_SIDE_EFFECTS (t
) = side_effects
;
3223 TREE_THIS_VOLATILE (t
) = 0;
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. */
3234 build_nt (enum tree_code code
, ...)
3241 gcc_assert (TREE_CODE_CLASS (code
) != tcc_vl_exp
);
3245 t
= make_node (code
);
3246 length
= TREE_CODE_LENGTH (code
);
3248 for (i
= 0; i
< length
; i
++)
3249 TREE_OPERAND (t
, i
) = va_arg (p
, tree
);
3255 /* Similar to build_nt, but for creating a CALL_EXPR object with
3256 ARGLIST passed as a list. */
3259 build_nt_call_list (tree fn
, tree arglist
)
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
);
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.
3275 layout_decl is used to set up the decl's storage layout.
3276 Other slots are initialized to 0 or null pointers. */
3279 build_decl_stat (enum tree_code code
, tree name
, tree type MEM_STAT_DECL
)
3283 t
= make_node_stat (code PASS_MEM_STAT
);
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. */
3290 DECL_NAME (t
) = name
;
3291 TREE_TYPE (t
) = type
;
3293 if (code
== VAR_DECL
|| code
== PARM_DECL
|| code
== RESULT_DECL
)
3295 else if (code
== FUNCTION_DECL
)
3296 DECL_MODE (t
) = FUNCTION_MODE
;
3301 /* Builds and returns function declaration with NAME and TYPE. */
3304 build_fn_decl (const char *name
, tree type
)
3306 tree id
= get_identifier (name
);
3307 tree decl
= build_decl (FUNCTION_DECL
, id
, type
);
3309 DECL_EXTERNAL (decl
) = 1;
3310 TREE_PUBLIC (decl
) = 1;
3311 DECL_ARTIFICIAL (decl
) = 1;
3312 TREE_NOTHROW (decl
) = 1;
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. */
3323 build_block (tree vars
, tree subblocks
, tree supercontext
, tree chain
)
3325 tree block
= make_node (BLOCK
);
3327 BLOCK_VARS (block
) = vars
;
3328 BLOCK_SUBBLOCKS (block
) = subblocks
;
3329 BLOCK_SUPERCONTEXT (block
) = supercontext
;
3330 BLOCK_CHAIN (block
) = chain
;
3334 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
3335 /* ??? gengtype doesn't handle conditionals */
3336 static GTY(()) source_locus last_annotated_node
;
3339 #ifdef USE_MAPPED_LOCATION
3342 expand_location (source_location loc
)
3344 expanded_location xloc
;
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
);
3363 /* Record the exact location where an expression or an identifier were
3367 annotate_with_file_line (tree node
, const char *file
, int line
)
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
)))
3377 last_annotated_node
= EXPR_LOCUS (node
);
3381 /* In heavily macroized code (such as GCC itself) this single
3382 entry cache can reduce the number of allocations by more
3384 if (last_annotated_node
3385 && last_annotated_node
->line
== line
3386 && (last_annotated_node
->file
== file
3387 || !strcmp (last_annotated_node
->file
, file
)))
3389 SET_EXPR_LOCUS (node
, last_annotated_node
);
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
);
3400 annotate_with_locus (tree node
, location_t locus
)
3402 annotate_with_file_line (node
, locus
.file
, locus
.line
);
3406 /* Source location accessor functions. */
3409 /* The source location of this expression. Non-tree_exp nodes such as
3410 decls and constants can be shared among multiple locations, so
3413 expr_location (tree node
)
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
;
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
;
3428 set_expr_location (tree node
, location_t locus
)
3430 #ifdef USE_MAPPED_LOCATION
3431 if (GIMPLE_STMT_P (node
))
3432 GIMPLE_STMT_LOCUS (node
) = locus
;
3434 EXPR_CHECK (node
)->exp
.locus
= locus
;
3436 annotate_with_locus (node
, locus
);
3441 expr_has_location (tree node
)
3443 #ifdef USE_MAPPED_LOCATION
3444 return expr_location (node
) != UNKNOWN_LOCATION
;
3446 return expr_locus (node
) != NULL
;
3450 #ifdef USE_MAPPED_LOCATION
3455 expr_locus (tree node
)
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
;
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
;
3471 set_expr_locus (tree node
,
3472 #ifdef USE_MAPPED_LOCATION
3473 source_location
*loc
3479 #ifdef USE_MAPPED_LOCATION
3482 if (GIMPLE_STMT_P (node
))
3483 GIMPLE_STMT_LOCUS (node
) = UNKNOWN_LOCATION
;
3485 EXPR_CHECK (node
)->exp
.locus
= UNKNOWN_LOCATION
;
3489 if (GIMPLE_STMT_P (node
))
3490 GIMPLE_STMT_LOCUS (node
) = *loc
;
3492 EXPR_CHECK (node
)->exp
.locus
= *loc
;
3495 if (GIMPLE_STMT_P (node
))
3496 GIMPLE_STMT_LOCUS (node
) = loc
;
3498 EXPR_CHECK (node
)->exp
.locus
= loc
;
3503 expr_filename (tree node
)
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
);
3510 if (GIMPLE_STMT_P (node
))
3511 return &GIMPLE_STMT_LOCUS (node
)->file
;
3512 return &(EXPR_CHECK (node
)->exp
.locus
->file
);
3517 expr_lineno (tree node
)
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
);
3524 if (GIMPLE_STMT_P (node
))
3525 return &GIMPLE_STMT_LOCUS (node
)->line
;
3526 return &EXPR_CHECK (node
)->exp
.locus
->line
;
3530 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
3534 build_decl_attribute_variant (tree ddecl
, tree attribute
)
3536 DECL_ATTRIBUTES (ddecl
) = attribute
;
3540 /* Borrowed from hashtab.c iterative_hash implementation. */
3541 #define mix(a,b,c) \
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; \
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
)
3559 /* the golden ratio; an arbitrary value. */
3560 hashval_t a
= 0x9e3779b9;
3566 /* Produce good hash value combining PTR and VAL2. */
3567 static inline hashval_t
3568 iterative_hash_pointer (void *ptr
, hashval_t val2
)
3570 if (sizeof (ptr
) == sizeof (hashval_t
))
3571 return iterative_hash_hashval_t ((size_t) ptr
, val2
);
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. */
3578 hashval_t b
= (hashval_t
) ((size_t) ptr
>> (sizeof (hashval_t
) * 8 + zero
));
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
)
3588 if (sizeof (HOST_WIDE_INT
) == sizeof (hashval_t
))
3589 return iterative_hash_hashval_t (val
, val2
);
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. */
3596 hashval_t b
= (hashval_t
) (val
>> (sizeof (hashval_t
) * 8 + zero
));
3598 if (sizeof (HOST_WIDE_INT
) > 2 * sizeof (hashval_t
))
3600 hashval_t a
= (hashval_t
) (val
>> (sizeof (hashval_t
) * 16 + zero
));
3601 hashval_t b
= (hashval_t
) (val
>> (sizeof (hashval_t
) * 24 + zero
));
3608 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3609 is ATTRIBUTE and its qualifiers are QUALS.
3611 Record such modified types already made so we don't make duplicates. */
3614 build_type_attribute_qual_variant (tree ttype
, tree attribute
, int quals
)
3616 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype
), attribute
))
3618 hashval_t hashcode
= 0;
3620 enum tree_code code
= TREE_CODE (ttype
);
3622 ntype
= copy_node (ttype
);
3624 TYPE_POINTER_TO (ntype
) = 0;
3625 TYPE_REFERENCE_TO (ntype
) = 0;
3626 TYPE_ATTRIBUTES (ntype
) = attribute
;
3628 if (TYPE_STRUCTURAL_EQUALITY_P (ttype
))
3629 SET_TYPE_STRUCTURAL_EQUALITY (ntype
);
3631 TYPE_CANONICAL (ntype
)
3632 = build_qualified_type (TYPE_CANONICAL (ttype
), quals
);
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
);
3639 hashcode
= iterative_hash_object (code
, hashcode
);
3640 if (TREE_TYPE (ntype
))
3641 hashcode
= iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype
)),
3643 hashcode
= attribute_hash_list (attribute
, hashcode
);
3645 switch (TREE_CODE (ntype
))
3648 hashcode
= type_hash_list (TYPE_ARG_TYPES (ntype
), hashcode
);
3651 hashcode
= iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype
)),
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
);
3662 unsigned int precision
= TYPE_PRECISION (ntype
);
3663 hashcode
= iterative_hash_object (precision
, hashcode
);
3670 ntype
= type_hash_canon (hashcode
, ntype
);
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
);
3678 ttype
= build_qualified_type (ntype
, quals
);
3685 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3688 Record such modified types already made so we don't make duplicates. */
3691 build_type_attribute_variant (tree ttype
, tree attribute
)
3693 return build_type_attribute_qual_variant (ttype
, attribute
,
3694 TYPE_QUALS (ttype
));
3697 /* Return nonzero if IDENT is a valid name for attribute ATTR,
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. */
3706 is_attribute_with_length_p (const char *attr
, int attr_len
, tree ident
)
3711 if (TREE_CODE (ident
) != IDENTIFIER_NODE
)
3714 p
= IDENTIFIER_POINTER (ident
);
3715 ident_len
= IDENTIFIER_LENGTH (ident
);
3717 if (ident_len
== attr_len
3718 && strcmp (attr
, p
) == 0)
3721 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
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)
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)
3743 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3746 We try both `text' and `__text__', ATTR may be either one. */
3749 is_attribute_p (const char *attr
, tree ident
)
3751 return is_attribute_with_length_p (attr
, strlen (attr
), ident
);
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. */
3761 lookup_attribute (const char *attr_name
, tree list
)
3764 size_t attr_len
= strlen (attr_name
);
3766 for (l
= list
; l
; l
= TREE_CHAIN (l
))
3768 gcc_assert (TREE_CODE (TREE_PURPOSE (l
)) == IDENTIFIER_NODE
);
3769 if (is_attribute_with_length_p (attr_name
, attr_len
, TREE_PURPOSE (l
)))
3776 /* Remove any instances of attribute ATTR_NAME in LIST and return the
3780 remove_attribute (const char *attr_name
, tree list
)
3783 size_t attr_len
= strlen (attr_name
);
3785 for (p
= &list
; *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
);
3792 p
= &TREE_CHAIN (l
);
3798 /* Return an attribute list that is the union of a1 and a2. */
3801 merge_attributes (tree a1
, tree a2
)
3805 /* Either one unset? Take the set one. */
3807 if ((attributes
= a1
) == 0)
3810 /* One that completely contains the other? Take it. */
3812 else if (a2
!= 0 && ! attribute_list_contained (a1
, a2
))
3814 if (attribute_list_contained (a2
, a1
))
3818 /* Pick the longest list, and hang on the other list. */
3820 if (list_length (a1
) < list_length (a2
))
3821 attributes
= a2
, a2
= a1
;
3823 for (; a2
!= 0; a2
= TREE_CHAIN (a2
))
3826 for (a
= lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2
)),
3829 a
= lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2
)),
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
)
3837 if (simple_cst_list_equal (TREE_VALUE (a
),
3838 TREE_VALUE (a2
)) == 1)
3841 else if (simple_cst_equal (TREE_VALUE (a
),
3842 TREE_VALUE (a2
)) == 1)
3847 a1
= copy_node (a2
);
3848 TREE_CHAIN (a1
) = attributes
;
3857 /* Given types T1 and T2, merge their attributes and return
3861 merge_type_attributes (tree t1
, tree t2
)
3863 return merge_attributes (TYPE_ATTRIBUTES (t1
),
3864 TYPE_ATTRIBUTES (t2
));
3867 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3871 merge_decl_attributes (tree olddecl
, tree newdecl
)
3873 return merge_attributes (DECL_ATTRIBUTES (olddecl
),
3874 DECL_ATTRIBUTES (newdecl
));
3877 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3879 /* Specialization of merge_decl_attributes for various Windows targets.
3881 This handles the following situation:
3883 __declspec (dllimport) int foo;
3886 The second instance of `foo' nullifies the dllimport. */
3889 merge_dllimport_decl_attributes (tree old
, tree
new)
3892 int delete_dllimport_p
= 1;
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
)))
3905 DECL_DLLIMPORT_P (new) = 0;
3906 warning (OPT_Wattributes
, "%q+D already declared with dllexport attribute: "
3907 "dllimport ignored", new);
3909 else if (DECL_DLLIMPORT_P (old
) && !DECL_DLLIMPORT_P (new))
3911 /* Warn about overriding a symbol that has already been used. eg:
3912 extern int __attribute__ ((dllimport)) foo;
3913 int* bar () {return &foo;}
3916 if (TREE_USED (old
))
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
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;
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);
3938 delete_dllimport_p
= 0;
3940 a
= merge_attributes (DECL_ATTRIBUTES (old
), DECL_ATTRIBUTES (new));
3942 if (delete_dllimport_p
)
3945 const size_t attr_len
= strlen ("dllimport");
3947 /* Scan the list for dllimport and delete it. */
3948 for (prev
= NULL_TREE
, t
= a
; t
; prev
= t
, t
= TREE_CHAIN (t
))
3950 if (is_attribute_with_length_p ("dllimport", attr_len
,
3953 if (prev
== NULL_TREE
)
3956 TREE_CHAIN (prev
) = TREE_CHAIN (t
);
3965 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
3966 struct attribute_spec.handler. */
3969 handle_dll_attribute (tree
* pnode
, tree name
, tree args
, int flags
,
3974 /* These attributes may apply to structure and union types being created,
3975 but otherwise should pass to the declaration involved. */
3978 if (flags
& ((int) ATTR_FLAG_DECL_NEXT
| (int) ATTR_FLAG_FUNCTION_NEXT
3979 | (int) ATTR_FLAG_ARRAY_NEXT
))
3981 *no_add_attrs
= true;
3982 return tree_cons (name
, args
, NULL_TREE
);
3984 if (TREE_CODE (node
) != RECORD_TYPE
&& TREE_CODE (node
) != UNION_TYPE
)
3986 warning (OPT_Wattributes
, "%qs attribute ignored",
3987 IDENTIFIER_POINTER (name
));
3988 *no_add_attrs
= true;
3994 if (TREE_CODE (node
) != FUNCTION_DECL
3995 && TREE_CODE (node
) != VAR_DECL
)
3997 *no_add_attrs
= true;
3998 warning (OPT_Wattributes
, "%qs attribute ignored",
3999 IDENTIFIER_POINTER (name
));
4003 /* Report error on dllimport ambiguities seen now before they cause
4005 else if (is_attribute_p ("dllimport", name
))
4007 /* Honor any target-specific overrides. */
4008 if (!targetm
.valid_dllimport_attribute_p (node
))
4009 *no_add_attrs
= true;
4011 else if (TREE_CODE (node
) == FUNCTION_DECL
4012 && DECL_DECLARED_INLINE_P (node
))
4014 warning (OPT_Wattributes
, "inline function %q+D declared as "
4015 " dllimport: attribute ignored", node
);
4016 *no_add_attrs
= true;
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
))
4022 error ("function %q+D definition is marked dllimport", node
);
4023 *no_add_attrs
= true;
4026 else if (TREE_CODE (node
) == VAR_DECL
)
4028 if (DECL_INITIAL (node
))
4030 error ("variable %q+D definition is marked dllimport",
4032 *no_add_attrs
= true;
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;
4044 if (*no_add_attrs
== false)
4045 DECL_DLLIMPORT_P (node
) = 1;
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
))
4053 error ("external linkage required for symbol %q+D because of "
4054 "%qs attribute", node
, IDENTIFIER_POINTER (name
));
4055 *no_add_attrs
= true;
4061 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
4063 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
4064 of the various TYPE_QUAL values. */
4067 set_type_quals (tree type
, int type_quals
)
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;
4074 /* Returns true iff cand is equivalent to base with type_quals. */
4077 check_qualified_type (tree cand
, tree base
, int type_quals
)
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
)));
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. */
4092 get_qualified_type (tree type
, int type_quals
)
4096 if (TYPE_QUALS (type
) == type_quals
)
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
))
4109 /* Like get_qualified_type, but creates the type if it does not
4110 exist. This function never returns NULL_TREE. */
4113 build_qualified_type (tree type
, int type_quals
)
4117 /* See if we already have the appropriate qualified variant. */
4118 t
= get_qualified_type (type
, type_quals
);
4120 /* If not, build it. */
4123 t
= build_variant_type_copy (type
);
4124 set_type_quals (t
, type_quals
);
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
4132 TYPE_CANONICAL (t
) = build_qualified_type (TYPE_CANONICAL (type
),
4135 /* T is its own canonical type. */
4136 TYPE_CANONICAL (t
) = t
;
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. */
4149 build_distinct_type_copy (tree type
)
4151 tree t
= copy_node (type
);
4153 TYPE_POINTER_TO (t
) = 0;
4154 TYPE_REFERENCE_TO (t
) = 0;
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
);
4161 TYPE_CANONICAL (t
) = t
;
4163 /* Make it its own variant. */
4164 TYPE_MAIN_VARIANT (t
) = t
;
4165 TYPE_NEXT_VARIANT (t
) = 0;
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). */
4177 build_variant_type_copy (tree type
)
4179 tree t
, m
= TYPE_MAIN_VARIANT (type
);
4181 t
= build_distinct_type_copy (type
);
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
);
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
;
4195 /* Return true if the from tree in both tree maps are equal. */
4198 tree_map_eq (const void *va
, const void *vb
)
4200 const struct tree_map
*a
= va
, *b
= vb
;
4201 return (a
->from
== b
->from
);
4204 /* Hash a from tree in a tree_map. */
4207 tree_map_hash (const void *item
)
4209 return (((const struct tree_map
*) item
)->hash
);
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. */
4217 tree_map_marked_p (const void *p
)
4219 tree from
= ((struct tree_map
*) p
)->from
;
4221 return ggc_marked_p (from
);
4224 /* Return true if the trees in the tree_int_map *'s VA and VB are equal. */
4227 tree_int_map_eq (const void *va
, const void *vb
)
4229 const struct tree_int_map
*a
= va
, *b
= vb
;
4230 return (a
->from
== b
->from
);
4233 /* Hash a from tree in the tree_int_map * ITEM. */
4236 tree_int_map_hash (const void *item
)
4238 return htab_hash_pointer (((const struct tree_int_map
*)item
)->from
);
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. */
4246 tree_int_map_marked_p (const void *p
)
4248 tree from
= ((struct tree_int_map
*) p
)->from
;
4250 return ggc_marked_p (from
);
4252 /* Lookup an init priority for FROM, and return it if we find one. */
4255 decl_init_priority_lookup (tree from
)
4257 struct tree_int_map
*h
, in
;
4260 h
= htab_find_with_hash (init_priority_for_decl
,
4261 &in
, htab_hash_pointer (from
));
4267 /* Insert a mapping FROM->TO in the init priority hashtable. */
4270 decl_init_priority_insert (tree from
, unsigned short to
)
4272 struct tree_int_map
*h
;
4275 h
= ggc_alloc (sizeof (struct tree_int_map
));
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
;
4283 /* Look up a restrict qualified base decl for FROM. */
4286 decl_restrict_base_lookup (tree from
)
4292 h
= htab_find_with_hash (restrict_base_for_decl
, &in
,
4293 htab_hash_pointer (from
));
4294 return h
? h
->to
: NULL_TREE
;
4297 /* Record the restrict qualified base TO for FROM. */
4300 decl_restrict_base_insert (tree from
, tree to
)
4305 h
= ggc_alloc (sizeof (struct tree_map
));
4306 h
->hash
= htab_hash_pointer (from
);
4309 loc
= htab_find_slot_with_hash (restrict_base_for_decl
, h
, h
->hash
, INSERT
);
4310 *(struct tree_map
**) loc
= h
;
4313 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
4316 print_debug_expr_statistics (void)
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
));
4324 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
4327 print_value_expr_statistics (void)
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
));
4335 /* Print out statistics for the RESTRICT_BASE_FOR_DECL hash table, but
4336 don't print anything if the table is empty. */
4339 print_restrict_base_statistics (void)
4341 if (htab_elements (restrict_base_for_decl
) != 0)
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
));
4349 /* Lookup a debug expression for FROM, and return it if we find one. */
4352 decl_debug_expr_lookup (tree from
)
4354 struct tree_map
*h
, in
;
4357 h
= htab_find_with_hash (debug_expr_for_decl
, &in
, htab_hash_pointer (from
));
4363 /* Insert a mapping FROM->TO in the debug expression hashtable. */
4366 decl_debug_expr_insert (tree from
, tree to
)
4371 h
= ggc_alloc (sizeof (struct tree_map
));
4372 h
->hash
= htab_hash_pointer (from
);
4375 loc
= htab_find_slot_with_hash (debug_expr_for_decl
, h
, h
->hash
, INSERT
);
4376 *(struct tree_map
**) loc
= h
;
4379 /* Lookup a value expression for FROM, and return it if we find one. */
4382 decl_value_expr_lookup (tree from
)
4384 struct tree_map
*h
, in
;
4387 h
= htab_find_with_hash (value_expr_for_decl
, &in
, htab_hash_pointer (from
));
4393 /* Insert a mapping FROM->TO in the value expression hashtable. */
4396 decl_value_expr_insert (tree from
, tree to
)
4401 h
= ggc_alloc (sizeof (struct tree_map
));
4402 h
->hash
= htab_hash_pointer (from
);
4405 loc
= htab_find_slot_with_hash (value_expr_for_decl
, h
, h
->hash
, INSERT
);
4406 *(struct tree_map
**) loc
= h
;
4409 /* Hashing of types so that we don't make duplicates.
4410 The entry point is `type_hash_canon'. */
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. */
4417 type_hash_list (tree list
, hashval_t hashcode
)
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
)),
4429 /* These are the Hashtable callback functions. */
4431 /* Returns true iff the types are equivalent. */
4434 type_hash_eq (const void *va
, const void *vb
)
4436 const struct type_hash
*a
= va
, *b
= vb
;
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
))
4448 switch (TREE_CODE (a
->type
))
4453 case REFERENCE_TYPE
:
4457 return TYPE_VECTOR_SUBPARTS (a
->type
) == TYPE_VECTOR_SUBPARTS (b
->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
))))
4469 /* ... fall through ... */
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
))));
4482 return TYPE_OFFSET_BASETYPE (a
->type
) == TYPE_OFFSET_BASETYPE (b
->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
)))));
4495 return TYPE_DOMAIN (a
->type
) == TYPE_DOMAIN (b
->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
))));
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
))));
4522 /* Return the cached hash value. */
4525 type_hash_hash (const void *item
)
4527 return ((const struct type_hash
*) item
)->hash
;
4530 /* Look in the type hash table for a type isomorphic to TYPE.
4531 If one is found, return it. Otherwise return 0. */
4534 type_hash_lookup (hashval_t hashcode
, tree type
)
4536 struct type_hash
*h
, in
;
4538 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4539 must call that routine before comparing TYPE_ALIGNs. */
4545 h
= htab_find_with_hash (type_hash_table
, &in
, hashcode
);
4551 /* Add an entry to the type-hash-table
4552 for a type TYPE whose hash code is HASHCODE. */
4555 type_hash_add (hashval_t hashcode
, tree type
)
4557 struct type_hash
*h
;
4560 h
= ggc_alloc (sizeof (struct type_hash
));
4563 loc
= htab_find_slot_with_hash (type_hash_table
, h
, hashcode
, INSERT
);
4564 *(struct type_hash
**) loc
= h
;
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.
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. */
4577 type_hash_canon (unsigned int hashcode
, tree type
)
4581 /* The hash table only contains main variants, so ensure that's what we're
4583 gcc_assert (TYPE_MAIN_VARIANT (type
) == type
);
4585 if (!lang_hooks
.types
.hash_types
)
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
);
4593 #ifdef GATHER_STATISTICS
4594 tree_node_counts
[(int) t_kind
]--;
4595 tree_node_sizes
[(int) t_kind
] -= sizeof (struct tree_type
);
4601 type_hash_add (hashcode
, type
);
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. */
4613 type_hash_marked_p (const void *p
)
4615 tree type
= ((struct type_hash
*) p
)->type
;
4617 return ggc_marked_p (type
) || TYPE_SYMTAB_POINTER (type
);
4621 print_type_hash_statistics (void)
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
));
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. */
4634 attribute_hash_list (tree list
, hashval_t hashcode
)
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
);
4645 /* Given two lists of attributes, return true if list l2 is
4646 equivalent to l1. */
4649 attribute_list_equal (tree l1
, tree l2
)
4651 return attribute_list_contained (l1
, l2
)
4652 && attribute_list_contained (l2
, l1
);
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
4664 attribute_list_contained (tree l1
, tree l2
)
4668 /* First check the obvious, maybe the lists are identical. */
4672 /* Maybe the lists are similar. */
4673 for (t1
= l1
, t2
= l2
;
4675 && TREE_PURPOSE (t1
) == TREE_PURPOSE (t2
)
4676 && TREE_VALUE (t1
) == TREE_VALUE (t2
);
4677 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
));
4679 /* Maybe the lists are equal. */
4680 if (t1
== 0 && t2
== 0)
4683 for (; t2
!= 0; t2
= TREE_CHAIN (t2
))
4686 for (attr
= lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2
)), l1
);
4688 attr
= lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2
)),
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
)
4696 if (simple_cst_list_equal (TREE_VALUE (t2
),
4697 TREE_VALUE (attr
)) == 1)
4700 else if (simple_cst_equal (TREE_VALUE (t2
), TREE_VALUE (attr
)) == 1)
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. */
4717 type_list_equal (tree l1
, tree l2
)
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
))))))
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. */
4737 type_num_arguments (tree type
)
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
)))
4753 /* Nonzero if integer constants T1 and T2
4754 represent the same constant value. */
4757 tree_int_cst_equal (tree t1
, tree t2
)
4762 if (t1
== 0 || t2
== 0)
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
))
4774 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4775 The precise way of comparison depends on their data type. */
4778 tree_int_cst_lt (tree t1
, tree t2
)
4783 if (TYPE_UNSIGNED (TREE_TYPE (t1
)) != TYPE_UNSIGNED (TREE_TYPE (t2
)))
4785 int t1_sgn
= tree_int_cst_sgn (t1
);
4786 int t2_sgn
= tree_int_cst_sgn (t2
);
4788 if (t1_sgn
< t2_sgn
)
4790 else if (t1_sgn
> t2_sgn
)
4792 /* Otherwise, both are non-negative, so we compare them as
4793 unsigned just in case one of them would overflow a signed
4796 else if (!TYPE_UNSIGNED (TREE_TYPE (t1
)))
4797 return INT_CST_LT (t1
, t2
);
4799 return INT_CST_LT_UNSIGNED (t1
, t2
);
4802 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
4805 tree_int_cst_compare (tree t1
, tree t2
)
4807 if (tree_int_cst_lt (t1
, t2
))
4809 else if (tree_int_cst_lt (t2
, t1
))
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. */
4821 host_integerp (tree t
, int pos
)
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)));
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. */
4837 tree_low_cst (tree t
, int pos
)
4839 gcc_assert (host_integerp (t
, pos
));
4840 return TREE_INT_CST_LOW (t
);
4843 /* Return the most significant bit of the integer constant T. */
4846 tree_int_cst_msb (tree t
)
4850 unsigned HOST_WIDE_INT l
;
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;
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. */
4865 tree_int_cst_sgn (tree t
)
4867 if (TREE_INT_CST_LOW (t
) == 0 && TREE_INT_CST_HIGH (t
) == 0)
4869 else if (TYPE_UNSIGNED (TREE_TYPE (t
)))
4871 else if (TREE_INT_CST_HIGH (t
) < 0)
4877 /* Compare two constructor-element-type constants. Return 1 if the lists
4878 are known to be equal; otherwise return 0. */
4881 simple_cst_list_equal (tree l1
, tree l2
)
4883 while (l1
!= NULL_TREE
&& l2
!= NULL_TREE
)
4885 if (simple_cst_equal (TREE_VALUE (l1
), TREE_VALUE (l2
)) != 1)
4888 l1
= TREE_CHAIN (l1
);
4889 l2
= TREE_CHAIN (l2
);
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
4902 simple_cst_equal (tree t1
, tree t2
)
4904 enum tree_code code1
, code2
;
4910 if (t1
== 0 || t2
== 0)
4913 code1
= TREE_CODE (t1
);
4914 code2
= TREE_CODE (t2
);
4916 if (code1
== NOP_EXPR
|| code1
== CONVERT_EXPR
|| code1
== NON_LVALUE_EXPR
)
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));
4922 return simple_cst_equal (TREE_OPERAND (t1
, 0), t2
);
4925 else if (code2
== NOP_EXPR
|| code2
== CONVERT_EXPR
4926 || code2
== NON_LVALUE_EXPR
)
4927 return simple_cst_equal (t1
, TREE_OPERAND (t2
, 0));
4935 return (TREE_INT_CST_LOW (t1
) == TREE_INT_CST_LOW (t2
)
4936 && TREE_INT_CST_HIGH (t1
) == TREE_INT_CST_HIGH (t2
));
4939 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1
), TREE_REAL_CST (t2
));
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
)));
4948 unsigned HOST_WIDE_INT idx
;
4949 VEC(constructor_elt
, gc
) *v1
= CONSTRUCTOR_ELTS (t1
);
4950 VEC(constructor_elt
, gc
) *v2
= CONSTRUCTOR_ELTS (t2
);
4952 if (VEC_length (constructor_elt
, v1
) != VEC_length (constructor_elt
, v2
))
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
))
4964 return simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
4967 cmp
= simple_cst_equal (CALL_EXPR_FN (t1
), CALL_EXPR_FN (t2
));
4970 if (call_expr_nargs (t1
) != call_expr_nargs (t2
))
4974 call_expr_arg_iterator iter1
, iter2
;
4975 for (arg1
= first_call_expr_arg (t1
, &iter1
),
4976 arg2
= first_call_expr_arg (t2
, &iter2
);
4978 arg1
= next_call_expr_arg (&iter1
),
4979 arg2
= next_call_expr_arg (&iter2
))
4981 cmp
= simple_cst_equal (arg1
, arg2
);
4985 return arg1
== arg2
;
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))))
5001 cmp
= simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
5006 return simple_cst_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
5008 case WITH_CLEANUP_EXPR
:
5009 cmp
= simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
5013 return simple_cst_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t1
, 1));
5016 if (TREE_OPERAND (t1
, 1) == TREE_OPERAND (t2
, 1))
5017 return simple_cst_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
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
5035 if ((int) code1
>= (int) LAST_AND_UNUSED_TREE_CODE
)
5038 switch (TREE_CODE_CLASS (code1
))
5042 case tcc_comparison
:
5043 case tcc_expression
:
5047 for (i
= 0; i
< TREE_CODE_LENGTH (code1
); i
++)
5049 cmp
= simple_cst_equal (TREE_OPERAND (t1
, i
), TREE_OPERAND (t2
, i
));
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. */
5066 compare_tree_int (tree t
, unsigned HOST_WIDE_INT u
)
5068 if (tree_int_cst_sgn (t
) < 0)
5070 else if (TREE_INT_CST_HIGH (t
) != 0)
5072 else if (TREE_INT_CST_LOW (t
) == u
)
5074 else if (TREE_INT_CST_LOW (t
) < u
)
5080 /* Return true if CODE represents an associative tree code. Otherwise
5083 associative_tree_code (enum tree_code code
)
5102 /* Return true if CODE represents a commutative tree code. Otherwise
5105 commutative_tree_code (enum tree_code code
)
5118 case UNORDERED_EXPR
:
5122 case TRUTH_AND_EXPR
:
5123 case TRUTH_XOR_EXPR
:
5133 /* Generate a hash value for an expression. This can be used iteratively
5134 by passing a previous result as the "val" argument.
5136 This function is intended to produce the same hash for expressions which
5137 would compare equal using operand_equal_p. */
5140 iterative_hash_expr (tree t
, hashval_t val
)
5143 enum tree_code code
;
5147 return iterative_hash_pointer (t
, val
);
5149 code
= TREE_CODE (t
);
5153 /* Alas, constants aren't shared, so we can't rely on pointer
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
);
5160 unsigned int val2
= real_hash (TREE_REAL_CST_PTR (t
));
5162 return iterative_hash_hashval_t (val2
, val
);
5165 return iterative_hash (TREE_STRING_POINTER (t
),
5166 TREE_STRING_LENGTH (t
), val
);
5168 val
= iterative_hash_expr (TREE_REALPART (t
), val
);
5169 return iterative_hash_expr (TREE_IMAGPART (t
), val
);
5171 return iterative_hash_expr (TREE_VECTOR_CST_ELTS (t
), val
);
5175 /* we can just compare by pointer. */
5176 return iterative_hash_pointer (t
, val
);
5179 /* A list of expressions, for a CALL_EXPR or as the elements of a
5181 for (; t
; t
= TREE_CHAIN (t
))
5182 val
= iterative_hash_expr (TREE_VALUE (t
), val
);
5186 unsigned HOST_WIDE_INT idx
;
5188 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t
), idx
, field
, value
)
5190 val
= iterative_hash_expr (field
, val
);
5191 val
= iterative_hash_expr (value
, val
);
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
5200 if (DECL_BUILT_IN (t
))
5202 val
= iterative_hash_pointer (built_in_decls
[DECL_FUNCTION_CODE (t
)],
5206 /* else FALL THROUGH */
5208 class = TREE_CODE_CLASS (code
);
5210 if (class == tcc_declaration
)
5212 /* DECL's have a unique ID */
5213 val
= iterative_hash_host_wide_int (DECL_UID (t
), val
);
5217 gcc_assert (IS_EXPR_CODE_CLASS (class));
5219 val
= iterative_hash_object (code
, val
);
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
)
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
);
5233 else if (commutative_tree_code (code
))
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
5239 hashval_t one
= iterative_hash_expr (TREE_OPERAND (t
, 0), 0);
5240 hashval_t two
= iterative_hash_expr (TREE_OPERAND (t
, 1), 0);
5244 t
= one
, one
= two
, two
= t
;
5246 val
= iterative_hash_hashval_t (one
, val
);
5247 val
= iterative_hash_hashval_t (two
, val
);
5250 for (i
= TREE_OPERAND_LENGTH (t
) - 1; i
>= 0; --i
)
5251 val
= iterative_hash_expr (TREE_OPERAND (t
, i
), val
);
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.) */
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. */
5268 build_pointer_type_for_mode (tree to_type
, enum machine_mode mode
,
5273 if (to_type
== error_mark_node
)
5274 return error_mark_node
;
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
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
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
);
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
)
5294 t
= make_node (POINTER_TYPE
);
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
;
5302 if (TYPE_STRUCTURAL_EQUALITY_P (to_type
))
5303 SET_TYPE_STRUCTURAL_EQUALITY (t
);
5304 else if (TYPE_CANONICAL (to_type
) != to_type
)
5306 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type
),
5307 mode
, can_alias_all
);
5309 /* Lay out the type. This function has many callers that are concerned
5310 with expression-construction, and this simplifies them all. */
5316 /* By default build pointers in ptr_mode. */
5319 build_pointer_type (tree to_type
)
5321 return build_pointer_type_for_mode (to_type
, ptr_mode
, false);
5324 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
5327 build_reference_type_for_mode (tree to_type
, enum machine_mode mode
,
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
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
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
);
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
)
5350 t
= make_node (REFERENCE_TYPE
);
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
;
5358 if (TYPE_STRUCTURAL_EQUALITY_P (to_type
))
5359 SET_TYPE_STRUCTURAL_EQUALITY (t
);
5360 else if (TYPE_CANONICAL (to_type
) != to_type
)
5362 = build_reference_type_for_mode (TYPE_CANONICAL (to_type
),
5363 mode
, can_alias_all
);
5371 /* Build the node for the type of references-to-TO_TYPE by default
5375 build_reference_type (tree to_type
)
5377 return build_reference_type_for_mode (to_type
, ptr_mode
, false);
5380 /* Build a type that is compatible with t but has no cv quals anywhere
5383 const char *const *const * -> char ***. */
5386 build_type_no_quals (tree t
)
5388 switch (TREE_CODE (t
))
5391 return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t
)),
5393 TYPE_REF_CAN_ALIAS_ALL (t
));
5394 case REFERENCE_TYPE
:
5396 build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t
)),
5398 TYPE_REF_CAN_ALIAS_ALL (t
));
5400 return TYPE_MAIN_VARIANT (t
);
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).
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. */
5414 build_index_type (tree maxval
)
5416 tree itype
= make_node (INTEGER_TYPE
);
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
);
5428 if (host_integerp (maxval
, 1))
5429 return type_hash_canon (tree_low_cst (maxval
, 1), itype
);
5432 /* Since we cannot hash this type, we need to compare it using
5433 structural equality checks. */
5434 SET_TYPE_STRUCTURAL_EQUALITY (itype
);
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. */
5443 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision
,
5446 tree itype
= make_node (INTEGER_TYPE
);
5448 TYPE_PRECISION (itype
) = precision
;
5451 fixup_unsigned_type (itype
);
5453 fixup_signed_type (itype
);
5455 if (host_integerp (TYPE_MAX_VALUE (itype
), 1))
5456 return type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype
), 1), itype
);
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. */
5466 build_range_type (tree type
, tree lowval
, tree highval
)
5468 tree itype
= make_node (INTEGER_TYPE
);
5470 TREE_TYPE (itype
) = type
;
5471 if (type
== NULL_TREE
)
5474 TYPE_MIN_VALUE (itype
) = fold_convert (type
, lowval
);
5475 TYPE_MAX_VALUE (itype
) = highval
? fold_convert (type
, highval
) : NULL
;
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
);
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),
5492 /* Just like build_index_type, but takes lowval and highval instead
5493 of just highval (maxval). */
5496 build_index_2_type (tree lowval
, tree highval
)
5498 return build_range_type (sizetype
, lowval
, highval
);
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. */
5506 build_array_type (tree elt_type
, tree index_type
)
5509 hashval_t hashcode
= 0;
5511 if (TREE_CODE (elt_type
) == FUNCTION_TYPE
)
5513 error ("arrays of functions are not meaningful");
5514 elt_type
= integer_type_node
;
5517 t
= make_node (ARRAY_TYPE
);
5518 TREE_TYPE (t
) = elt_type
;
5519 TYPE_DOMAIN (t
) = index_type
;
5521 if (index_type
== 0)
5524 hashcode
= iterative_hash_object (TYPE_HASH (elt_type
), hashcode
);
5525 t
= type_hash_canon (hashcode
, t
);
5529 if (TYPE_CANONICAL (t
) == t
)
5531 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type
))
5532 SET_TYPE_STRUCTURAL_EQUALITY (t
);
5533 else if (TYPE_CANONICAL (elt_type
) != elt_type
)
5535 = build_array_type (TYPE_CANONICAL (elt_type
), index_type
);
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
);
5545 if (!COMPLETE_TYPE_P (t
))
5548 if (TYPE_CANONICAL (t
) == t
)
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
)
5556 = build_array_type (TYPE_CANONICAL (elt_type
),
5557 TYPE_CANONICAL (index_type
));
5563 /* Return the TYPE of the elements comprising
5564 the innermost dimension of ARRAY. */
5567 get_inner_array_type (tree array
)
5569 tree type
= TREE_TYPE (array
);
5571 while (TREE_CODE (type
) == ARRAY_TYPE
)
5572 type
= TREE_TYPE (type
);
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. */
5585 build_function_type (tree value_type
, tree arg_types
)
5588 hashval_t hashcode
= 0;
5590 if (TREE_CODE (value_type
) == FUNCTION_TYPE
)
5592 error ("function return type cannot be function");
5593 value_type
= integer_type_node
;
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
;
5601 /* We don't have canonicalization of function types, yet. */
5602 SET_TYPE_STRUCTURAL_EQUALITY (t
);
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
);
5609 if (!COMPLETE_TYPE_P (t
))
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. */
5620 build_function_type_list (tree return_type
, ...)
5625 va_start (p
, return_type
);
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
);
5631 if (args
== NULL_TREE
)
5632 args
= void_list_node
;
5636 args
= nreverse (args
);
5637 TREE_CHAIN (last
) = void_list_node
;
5639 args
= build_function_type (return_type
, args
);
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. */
5651 build_method_type_directly (tree basetype
,
5659 /* Make a node of the sort we want. */
5660 t
= make_node (METHOD_TYPE
);
5662 TYPE_METHOD_BASETYPE (t
) = TYPE_MAIN_VARIANT (basetype
);
5663 TREE_TYPE (t
) = rettype
;
5664 ptype
= build_pointer_type (basetype
);
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
;
5671 /* We don't have canonicalization of method types yet. */
5672 SET_TYPE_STRUCTURAL_EQUALITY (t
);
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
);
5680 if (!COMPLETE_TYPE_P (t
))
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. */
5692 build_method_type (tree basetype
, tree type
)
5694 gcc_assert (TREE_CODE (type
) == FUNCTION_TYPE
);
5696 return build_method_type_directly (basetype
,
5698 TYPE_ARG_TYPES (type
));
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. */
5706 build_offset_type (tree basetype
, tree type
)
5709 hashval_t hashcode
= 0;
5711 /* Make a node of the sort we want. */
5712 t
= make_node (OFFSET_TYPE
);
5714 TYPE_OFFSET_BASETYPE (t
) = TYPE_MAIN_VARIANT (basetype
);
5715 TREE_TYPE (t
) = type
;
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
);
5722 if (!COMPLETE_TYPE_P (t
))
5725 if (TYPE_CANONICAL (t
) == t
)
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
)
5733 = build_offset_type (TYPE_CANONICAL (basetype
),
5734 TYPE_CANONICAL (type
));
5740 /* Create a complex type whose components are COMPONENT_TYPE. */
5743 build_complex_type (tree component_type
)
5748 /* Make a node of the sort we want. */
5749 t
= make_node (COMPLEX_TYPE
);
5751 TREE_TYPE (t
) = TYPE_MAIN_VARIANT (component_type
);
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
);
5757 if (!COMPLETE_TYPE_P (t
))
5760 if (TYPE_CANONICAL (t
) == t
)
5762 if (TYPE_STRUCTURAL_EQUALITY_P (component_type
))
5763 SET_TYPE_STRUCTURAL_EQUALITY (t
);
5764 else if (TYPE_CANONICAL (component_type
) != component_type
)
5766 = build_complex_type (TYPE_CANONICAL (component_type
));
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
)
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";
5801 TYPE_NAME (t
) = get_identifier (name
);
5804 return build_qualified_type (t
, TYPE_QUALS (component_type
));
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.
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.
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.
5818 OP must have integer, real or enumeral type. Pointers are not allowed!
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. */
5831 get_unwidened (tree op
, tree for_type
)
5833 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
5834 tree type
= TREE_TYPE (op
);
5836 = TYPE_PRECISION (for_type
!= 0 ? for_type
: type
);
5838 = (for_type
!= 0 && for_type
!= type
5839 && final_prec
> TYPE_PRECISION (type
)
5840 && TYPE_UNSIGNED (type
));
5843 while (TREE_CODE (op
) == NOP_EXPR
5844 || TREE_CODE (op
) == CONVERT_EXPR
)
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
)
5854 bitschange
= TYPE_PRECISION (TREE_TYPE (op
))
5855 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op
, 0)));
5857 /* Truncations are many-one so cannot be removed.
5858 Unless we are later going to truncate down even farther. */
5860 && final_prec
> TYPE_PRECISION (TREE_TYPE (op
)))
5863 /* See what's inside this conversion. If we decide to strip it,
5865 op
= TREE_OPERAND (op
, 0);
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. */
5876 if (! uns
|| final_prec
<= TYPE_PRECISION (TREE_TYPE (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. */
5882 || TREE_CODE (op
) == NOP_EXPR
5883 || TREE_CODE (op
) == CONVERT_EXPR
)
5884 && TYPE_UNSIGNED (TREE_TYPE (op
)))
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))
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
);
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. */
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
))
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
);
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. */
5932 get_narrower (tree op
, int *unsignedp_ptr
)
5937 bool integral_p
= INTEGRAL_TYPE_P (TREE_TYPE (op
));
5939 while (TREE_CODE (op
) == NOP_EXPR
)
5942 = (TYPE_PRECISION (TREE_TYPE (op
))
5943 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op
, 0))));
5945 /* Truncations are many-one so cannot be removed. */
5949 /* See what's inside this conversion. If we decide to strip it,
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. */
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
)))
5966 else /* bitschange == 0 */
5968 /* A change in nominal type can always be stripped, but we must
5969 preserve the unsignedness. */
5971 uns
= TYPE_UNSIGNED (TREE_TYPE (op
));
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
)
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))
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
);
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.
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. */
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)))
6010 uns
= DECL_UNSIGNED (TREE_OPERAND (op
, 1));
6011 win
= fold_convert (type
, op
);
6015 *unsignedp_ptr
= uns
;
6019 /* Nonzero if integer constant C has a value that is permissible
6020 for type TYPE (an INTEGER_TYPE). */
6023 int_fits_type_p (tree c
, tree type
)
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
;
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.
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". */
6041 /* Check if C >= type_low_bound. */
6042 if (type_low_bound
&& TREE_CODE (type_low_bound
) == INTEGER_CST
)
6044 if (tree_int_cst_lt (c
, type_low_bound
))
6046 ok_for_low_bound
= true;
6049 ok_for_low_bound
= false;
6051 /* Check if c <= type_high_bound. */
6052 if (type_high_bound
&& TREE_CODE (type_high_bound
) == INTEGER_CST
)
6054 if (tree_int_cst_lt (type_high_bound
, c
))
6056 ok_for_high_bound
= true;
6059 ok_for_high_bound
= false;
6061 /* If the constant fits both bounds, the result is known. */
6062 if (ok_for_low_bound
&& ok_for_high_bound
)
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)
6071 /* Second, narrower types always fit in wider ones. */
6072 if (TYPE_PRECISION (type
) > TYPE_PRECISION (TREE_TYPE (c
)))
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
))
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
));
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
);
6095 /* Subprogram of following function. Called by walk_tree.
6097 Return *TP if it is an automatic variable or parameter of the
6098 function passed in as DATA. */
6101 find_var_from_fn (tree
*tp
, int *walk_subtrees
, void *data
)
6103 tree fn
= (tree
) data
;
6108 else if (DECL_P (*tp
)
6109 && lang_hooks
.tree_inlining
.auto_var_in_fn_p (*tp
, fn
))
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.
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:
6125 struct S { int i[f()]; };
6127 is valid, and other languages may define similar constructs. */
6130 variably_modified_type_p (tree type
, tree fn
)
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)
6142 if (type
== error_mark_node
)
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
));
6149 switch (TREE_CODE (type
))
6152 case REFERENCE_TYPE
:
6154 if (variably_modified_type_p (TREE_TYPE (type
), fn
))
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
))
6170 /* Scalar types are variably modified if their end points
6172 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type
));
6173 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (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
)
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
));
6190 if (TREE_CODE (type
) == QUAL_UNION_TYPE
)
6191 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t
));
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
)));
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
);
6210 #undef RETURN_TRUE_IF_VAR
6213 /* Given a DECL or TYPE, return the scope in which it was declared, or
6214 NULL_TREE if there is no containing scope. */
6217 get_containing_scope (tree t
)
6219 return (TYPE_P (t
) ? TYPE_CONTEXT (t
) : DECL_CONTEXT (t
));
6222 /* Return the innermost context enclosing DECL that is
6223 a FUNCTION_DECL, or zero if none. */
6226 decl_function_context (tree decl
)
6230 if (TREE_CODE (decl
) == ERROR_MARK
)
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'.
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
))
6242 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl
)))));
6244 context
= DECL_CONTEXT (decl
);
6246 while (context
&& TREE_CODE (context
) != FUNCTION_DECL
)
6248 if (TREE_CODE (context
) == BLOCK
)
6249 context
= BLOCK_SUPERCONTEXT (context
);
6251 context
= get_containing_scope (context
);
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. */
6262 decl_type_context (tree decl
)
6264 tree context
= DECL_CONTEXT (decl
);
6267 switch (TREE_CODE (context
))
6269 case NAMESPACE_DECL
:
6270 case TRANSLATION_UNIT_DECL
:
6275 case QUAL_UNION_TYPE
:
6280 context
= DECL_CONTEXT (context
);
6284 context
= BLOCK_SUPERCONTEXT (context
);
6294 /* CALL is a CALL_EXPR. Return the declaration for the function
6295 called, or NULL_TREE if the called function cannot be
6299 get_callee_fndecl (tree call
)
6303 if (call
== error_mark_node
)
6306 /* It's invalid to call this function with anything but a
6308 gcc_assert (TREE_CODE (call
) == CALL_EXPR
);
6310 /* The first operand to the CALL is the address of the function
6312 addr
= CALL_EXPR_FN (call
);
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
);
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);
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
);
6333 /* Print debugging information about tree nodes generated during the compile,
6334 and any language-specific information. */
6337 dump_tree_statistics (void)
6339 #ifdef GATHER_STATISTICS
6341 int total_nodes
, total_bytes
;
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
++)
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
];
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 ();
6362 fprintf (stderr
, "(No per-node statistics)\n");
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 ();
6371 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
6373 /* Generate a crc32 of a string. */
6376 crc32_string (unsigned chksum
, const char *string
)
6380 unsigned value
= *string
<< 24;
6383 for (ix
= 8; ix
--; value
<<= 1)
6387 feedback
= (value
^ chksum
) & 0x80000000 ? 0x04c11db7 : 0;
6396 /* P is a string that will be used in a symbol. Mask out any characters
6397 that are not valid in that context. */
6400 clean_symbol_name (char *p
)
6404 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
6407 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
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,
6419 I - for constructors
6421 N - for C++ anonymous namespaces
6422 F - for DWARF unwind frame information. */
6425 get_file_function_name (const char *type
)
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
)
6439 const char *file
= main_input_filename
;
6441 file
= input_filename
;
6442 /* Just use the file's basename, because the full pathname
6443 might be quite long. */
6444 p
= strrchr (file
, '/');
6449 p
= q
= ASTRDUP (p
);
6450 clean_symbol_name (q
);
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. */
6458 const char *name
= weak_global_object_name
;
6459 const char *file
= main_input_filename
;
6464 file
= input_filename
;
6466 len
= strlen (file
);
6467 q
= alloca (9 * 2 + len
+ 1);
6468 memcpy (q
, file
, len
+ 1);
6469 clean_symbol_name (q
);
6471 sprintf (q
+ len
, "_%08X_%08X", crc32_string (0, name
),
6472 crc32_string (0, flag_random_seed
));
6477 buf
= alloca (sizeof (FILE_FUNCTION_FORMAT
) + strlen (p
) + strlen (type
));
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
6483 sprintf (buf
, FILE_FUNCTION_FORMAT
, type
, p
);
6485 return get_identifier (buf
);
6488 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
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. */
6496 tree_check_failed (const tree node
, const char *file
,
6497 int line
, const char *function
, ...)
6501 unsigned length
= 0;
6504 va_start (args
, function
);
6505 while ((code
= va_arg (args
, int)))
6506 length
+= 4 + strlen (tree_code_name
[code
]);
6510 va_start (args
, function
);
6511 length
+= strlen ("expected ");
6512 buffer
= alloca (length
);
6514 while ((code
= va_arg (args
, int)))
6516 const char *prefix
= length
? " or " : "expected ";
6518 strcpy (buffer
+ length
, prefix
);
6519 length
+= strlen (prefix
);
6520 strcpy (buffer
+ length
, tree_code_name
[code
]);
6521 length
+= strlen (tree_code_name
[code
]);
6526 buffer
= (char *)"unexpected node";
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
);
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
6538 tree_not_check_failed (const tree node
, const char *file
,
6539 int line
, const char *function
, ...)
6543 unsigned length
= 0;
6546 va_start (args
, function
);
6547 while ((code
= va_arg (args
, int)))
6548 length
+= 4 + strlen (tree_code_name
[code
]);
6550 va_start (args
, function
);
6551 buffer
= alloca (length
);
6553 while ((code
= va_arg (args
, int)))
6557 strcpy (buffer
+ length
, " or ");
6560 strcpy (buffer
+ length
, tree_code_name
[code
]);
6561 length
+= strlen (tree_code_name
[code
]);
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
);
6570 /* Similar to tree_check_failed, except that we check for a class of tree
6571 code, given in CL. */
6574 tree_class_check_failed (const tree node
, const enum tree_code_class cl
,
6575 const char *file
, int line
, const char *function
)
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
);
6584 /* Similar to tree_check_failed, except that instead of specifying a
6585 dozen codes, use the knowledge that they're all sequential. */
6588 tree_range_check_failed (const tree node
, const char *file
, int line
,
6589 const char *function
, enum tree_code c1
,
6593 unsigned length
= 0;
6596 for (c
= c1
; c
<= c2
; ++c
)
6597 length
+= 4 + strlen (tree_code_name
[c
]);
6599 length
+= strlen ("expected ");
6600 buffer
= alloca (length
);
6603 for (c
= c1
; c
<= c2
; ++c
)
6605 const char *prefix
= length
? " or " : "expected ";
6607 strcpy (buffer
+ length
, prefix
);
6608 length
+= strlen (prefix
);
6609 strcpy (buffer
+ length
, tree_code_name
[c
]);
6610 length
+= strlen (tree_code_name
[c
]);
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
);
6619 /* Similar to tree_check_failed, except that we check that a tree does
6620 not have the specified code, given in CL. */
6623 tree_not_class_check_failed (const tree node
, const enum tree_code_class cl
,
6624 const char *file
, int line
, const char *function
)
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
);
6634 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
6637 omp_clause_check_failed (const tree node
, const char *file
, int line
,
6638 const char *function
, enum omp_clause_code code
)
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
);
6646 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
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
)
6654 unsigned length
= 0;
6655 enum omp_clause_code c
;
6657 for (c
= c1
; c
<= c2
; ++c
)
6658 length
+= 4 + strlen (omp_clause_code_name
[c
]);
6660 length
+= strlen ("expected ");
6661 buffer
= alloca (length
);
6664 for (c
= c1
; c
<= c2
; ++c
)
6666 const char *prefix
= length
? " or " : "expected ";
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
]);
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
);
6680 #undef DEFTREESTRUCT
6681 #define DEFTREESTRUCT(VAL, NAME) NAME,
6683 static const char *ts_enum_names
[] = {
6684 #include "treestruct.def"
6686 #undef DEFTREESTRUCT
6688 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
6690 /* Similar to tree_class_check_failed, except that we check for
6691 whether CODE contains the tree structure identified by EN. */
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
)
6700 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
6702 tree_code_name
[TREE_CODE (node
)], function
, trim_filename (file
), line
);
6706 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
6707 (dynamically sized) vector. */
6710 tree_vec_elt_check_failed (int idx
, int len
, const char *file
, int line
,
6711 const char *function
)
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
);
6718 /* Similar to above, except that the check is for the bounds of a PHI_NODE's
6719 (dynamically sized) vector. */
6722 phi_node_elt_check_failed (int idx
, int len
, const char *file
, int line
,
6723 const char *function
)
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
);
6730 /* Similar to above, except that the check is for the bounds of the operand
6731 vector of an expression node EXP. */
6734 tree_operand_check_failed (int idx
, tree exp
, const char *file
,
6735 int line
, const char *function
)
6737 int code
= TREE_CODE (exp
);
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
);
6744 /* Similar to above, except that the check is for the number of
6745 operands of an OMP_CLAUSE node. */
6748 omp_clause_operand_check_failed (int idx
, tree t
, const char *file
,
6749 int line
, const char *function
)
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
);
6757 #endif /* ENABLE_TREE_CHECKING */
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. */
6764 make_vector_type (tree innertype
, int nunits
, enum machine_mode mode
)
6767 hashval_t hashcode
= 0;
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
));
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
);
6785 if (TYPE_STRUCTURAL_EQUALITY_P (innertype
))
6786 SET_TYPE_STRUCTURAL_EQUALITY (t
);
6787 else if (TYPE_CANONICAL (innertype
) != innertype
6788 || mode
!= VOIDmode
)
6790 = make_vector_type (TYPE_CANONICAL (innertype
), nunits
, VOIDmode
);
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
);
6799 TYPE_FIELDS (rt
) = build_decl (FIELD_DECL
, get_identifier ("f"), array
);
6800 DECL_CONTEXT (TYPE_FIELDS (rt
)) = 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
6807 TYPE_UID (rt
) = TYPE_UID (t
);
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
);
6817 make_or_reuse_type (unsigned size
, int unsignedp
)
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
);
6832 return make_unsigned_type (size
);
6834 return make_signed_type (size
);
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. */
6842 build_common_tree_nodes (bool signed_char
, bool signed_sizetype
)
6844 error_mark_node
= make_node (ERROR_MARK
);
6845 TREE_TYPE (error_mark_node
) = error_mark_node
;
6847 initialize_sizetypes (signed_sizetype
);
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;
6855 /* Define `char', which is like either `signed char' or `unsigned char'
6856 but not the same as either. */
6859 ? make_signed_type (CHAR_TYPE_SIZE
)
6860 : make_unsigned_type (CHAR_TYPE_SIZE
));
6861 TYPE_STRING_FLAG (char_type_node
) = 1;
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
);
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;
6881 /* Fill in the rest of the sized types. Reuse existing type nodes
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);
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);
6895 access_public_node
= get_identifier ("public");
6896 access_protected_node
= get_identifier ("protected");
6897 access_private_node
= get_identifier ("private");
6900 /* Call this function after calling build_common_tree_nodes and set_sizetype.
6901 It will create several other common tree nodes. */
6904 build_common_tree_nodes_2 (int short_double
)
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);
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
);
6917 boolean_false_node
= TYPE_MIN_VALUE (boolean_type_node
);
6918 boolean_true_node
= TYPE_MAX_VALUE (boolean_type_node
);
6920 void_type_node
= make_node (VOID_TYPE
);
6921 layout_type (void_type_node
);
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;
6928 null_pointer_node
= build_int_cst (build_pointer_type (void_type_node
), 0);
6929 layout_type (TREE_TYPE (null_pointer_node
));
6931 ptr_type_node
= build_pointer_type (void_type_node
);
6933 = build_pointer_type (build_type_variant (void_type_node
, 1, 0));
6934 fileptr_type_node
= ptr_type_node
;
6936 float_type_node
= make_node (REAL_TYPE
);
6937 TYPE_PRECISION (float_type_node
) = FLOAT_TYPE_SIZE
;
6938 layout_type (float_type_node
);
6940 double_type_node
= make_node (REAL_TYPE
);
6942 TYPE_PRECISION (double_type_node
) = FLOAT_TYPE_SIZE
;
6944 TYPE_PRECISION (double_type_node
) = DOUBLE_TYPE_SIZE
;
6945 layout_type (double_type_node
);
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
);
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
);
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);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
6996 tree t
= targetm
.build_builtin_va_list ();
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
);
7006 va_list_type_node
= t
;
7010 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
7013 local_define_builtin (const char *name
, tree type
, enum built_in_function code
,
7014 const char *library_name
, int ecf_flags
)
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;
7031 built_in_decls
[code
] = decl
;
7032 implicit_built_in_decls
[code
] = decl
;
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. */
7040 build_common_builtin_nodes (void)
7044 if (built_in_decls
[BUILT_IN_MEMCPY
] == NULL
7045 || built_in_decls
[BUILT_IN_MEMMOVE
] == NULL
)
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
);
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
);
7060 if (built_in_decls
[BUILT_IN_MEMCMP
] == NULL
)
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
);
7070 if (built_in_decls
[BUILT_IN_MEMSET
] == NULL
)
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
);
7080 if (built_in_decls
[BUILT_IN_ALLOCA
] == NULL
)
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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);
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. */
7152 enum machine_mode mode
;
7154 for (mode
= MIN_MODE_COMPLEX_FLOAT
; mode
<= MAX_MODE_COMPLEX_FLOAT
; ++mode
)
7156 char mode_name_buf
[4], *q
;
7158 enum built_in_function mcode
, dcode
;
7159 tree type
, inner_type
;
7161 type
= lang_hooks
.types
.type_for_mode (mode
, 0);
7164 inner_type
= TREE_TYPE (type
);
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
);
7172 mcode
= BUILT_IN_COMPLEX_MUL_MIN
+ mode
- MIN_MODE_COMPLEX_FLOAT
;
7173 dcode
= BUILT_IN_COMPLEX_DIV_MIN
+ mode
- MIN_MODE_COMPLEX_FLOAT
;
7175 for (p
= GET_MODE_NAME (mode
), q
= mode_name_buf
; *p
; p
++, q
++)
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
);
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
);
7190 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
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.
7197 The argument TYPE is the top of the chain, and BOTTOM is the
7198 new type which we will point to. */
7201 reconstruct_complex_type (tree type
, tree bottom
)
7205 if (POINTER_TYPE_P (type
))
7207 inner
= reconstruct_complex_type (TREE_TYPE (type
), bottom
);
7208 outer
= build_pointer_type (inner
);
7210 else if (TREE_CODE (type
) == ARRAY_TYPE
)
7212 inner
= reconstruct_complex_type (TREE_TYPE (type
), bottom
);
7213 outer
= build_array_type (inner
, TYPE_DOMAIN (type
));
7215 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
7217 inner
= reconstruct_complex_type (TREE_TYPE (type
), bottom
);
7218 outer
= build_function_type (inner
, TYPE_ARG_TYPES (type
));
7220 else if (TREE_CODE (type
) == METHOD_TYPE
)
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
),
7229 TYPE_ARG_TYPES (type
));
7230 TYPE_ARG_TYPES (outer
) = argtypes
;
7235 TYPE_READONLY (outer
) = TYPE_READONLY (type
);
7236 TYPE_VOLATILE (outer
) = TYPE_VOLATILE (type
);
7241 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
7244 build_vector_type_for_mode (tree innertype
, enum machine_mode mode
)
7248 switch (GET_MODE_CLASS (mode
))
7250 case MODE_VECTOR_INT
:
7251 case MODE_VECTOR_FLOAT
:
7252 nunits
= GET_MODE_NUNITS (mode
);
7256 /* Check that there are no leftover bits. */
7257 gcc_assert (GET_MODE_BITSIZE (mode
)
7258 % TREE_INT_CST_LOW (TYPE_SIZE (innertype
)) == 0);
7260 nunits
= GET_MODE_BITSIZE (mode
)
7261 / TREE_INT_CST_LOW (TYPE_SIZE (innertype
));
7268 return make_vector_type (innertype
, nunits
, mode
);
7271 /* Similarly, but takes the inner type and number of units, which must be
7275 build_vector_type (tree innertype
, int nunits
)
7277 return make_vector_type (innertype
, nunits
, VOIDmode
);
7281 /* Build RESX_EXPR with given REGION_NUMBER. */
7283 build_resx (int region_number
)
7286 t
= build1 (RESX_EXPR
, void_type_node
,
7287 build_int_cst (NULL_TREE
, region_number
));
7291 /* Given an initializer INIT, return TRUE if INIT is zero or some
7292 aggregate of zeros. Otherwise return FALSE. */
7294 initializer_zerop (tree init
)
7300 switch (TREE_CODE (init
))
7303 return integer_zerop (init
);
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
));
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
))));
7319 for (elt
= TREE_VECTOR_CST_ELTS (init
); elt
; elt
= TREE_CHAIN (elt
))
7320 if (!initializer_zerop (TREE_VALUE (elt
)))
7326 unsigned HOST_WIDE_INT idx
;
7328 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init
), idx
, elt
)
7329 if (!initializer_zerop (elt
))
7339 /* Build an empty statement. */
7342 build_empty_stmt (void)
7344 return build1 (NOP_EXPR
, void_type_node
, size_zero_node
);
7348 /* Build an OpenMP clause with code CODE. */
7351 build_omp_clause (enum omp_clause_code code
)
7356 length
= omp_clause_num_ops
[code
];
7357 size
= (sizeof (struct tree_omp_clause
) + (length
- 1) * sizeof (tree
));
7359 t
= ggc_alloc (size
);
7360 memset (t
, 0, size
);
7361 TREE_SET_CODE (t
, OMP_CLAUSE
);
7362 OMP_CLAUSE_SET_CODE (t
, code
);
7364 #ifdef GATHER_STATISTICS
7365 tree_node_counts
[(int) omp_clause_kind
]++;
7366 tree_node_sizes
[(int) omp_clause_kind
] += size
;
7372 /* Set various status flags when building a CALL_EXPR object T. */
7375 process_call_operands (tree t
)
7379 side_effects
= TREE_SIDE_EFFECTS (t
);
7383 n
= TREE_OPERAND_LENGTH (t
);
7384 for (i
= 1; i
< n
; i
++)
7386 tree op
= TREE_OPERAND (t
, i
);
7387 if (op
&& TREE_SIDE_EFFECTS (op
))
7398 /* Calls have side-effects, except those to const or
7400 i
= call_expr_flags (t
);
7401 if (!(i
& (ECF_CONST
| ECF_PURE
)))
7404 TREE_SIDE_EFFECTS (t
) = side_effects
;
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. */
7413 build_vl_exp_stat (enum tree_code code
, int len MEM_STAT_DECL
)
7416 int length
= (len
- 1) * sizeof (tree
) + sizeof (struct tree_exp
);
7418 gcc_assert (TREE_CODE_CLASS (code
) == tcc_vl_exp
);
7419 gcc_assert (len
>= 1);
7421 #ifdef GATHER_STATISTICS
7422 tree_node_counts
[(int) e_kind
]++;
7423 tree_node_sizes
[(int) e_kind
] += length
;
7426 t
= ggc_alloc_zone_pass_stat (length
, &tree_zone
);
7428 memset (t
, 0, length
);
7430 TREE_SET_CODE (t
, code
);
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
);
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
7445 build_call_list (tree return_type
, tree fn
, tree arglist
)
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
);
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. */
7465 build_call_nary (tree return_type
, tree fn
, int nargs
, ...)
7469 va_start (args
, nargs
);
7470 ret
= build_call_valist (return_type
, fn
, nargs
, args
);
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. */
7480 build_call_valist (tree return_type
, tree fn
, int nargs
, va_list args
)
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
);
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. */
7500 build_call_array (tree return_type
, tree fn
, int nargs
, tree
*args
)
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
);
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
7521 in_array_bounds_p (tree ref
)
7523 tree idx
= TREE_OPERAND (ref
, 1);
7526 if (TREE_CODE (idx
) != INTEGER_CST
)
7529 min
= array_ref_low_bound (ref
);
7530 max
= array_ref_up_bound (ref
);
7533 || TREE_CODE (min
) != INTEGER_CST
7534 || TREE_CODE (max
) != INTEGER_CST
)
7537 if (tree_int_cst_lt (idx
, min
)
7538 || tree_int_cst_lt (max
, idx
))
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. */
7549 range_in_array_bounds_p (tree ref
)
7551 tree domain_type
= TYPE_DOMAIN (TREE_TYPE (ref
));
7552 tree range_min
, range_max
, min
, max
;
7554 range_min
= TYPE_MIN_VALUE (domain_type
);
7555 range_max
= TYPE_MAX_VALUE (domain_type
);
7558 || TREE_CODE (range_min
) != INTEGER_CST
7559 || TREE_CODE (range_max
) != INTEGER_CST
)
7562 min
= array_ref_low_bound (ref
);
7563 max
= array_ref_up_bound (ref
);
7566 || TREE_CODE (min
) != INTEGER_CST
7567 || TREE_CODE (max
) != INTEGER_CST
)
7570 if (tree_int_cst_lt (range_min
, min
)
7571 || tree_int_cst_lt (max
, range_max
))
7577 /* Return true if T (assumed to be a DECL) is a global variable. */
7580 is_global_var (tree t
)
7583 return (TREE_STATIC (t
) || MTAG_GLOBAL (t
));
7585 return (TREE_STATIC (t
) || DECL_EXTERNAL (t
));
7588 /* Return true if T (assumed to be a DECL) must be assigned a memory
7592 needs_to_live_in_memory (tree t
)
7594 if (TREE_CODE (t
) == SSA_NAME
)
7595 t
= SSA_NAME_VAR (t
);
7597 return (TREE_ADDRESSABLE (t
)
7598 || is_global_var (t
)
7599 || (TREE_CODE (t
) == RESULT_DECL
7600 && aggregate_value_p (t
, current_function_decl
)));
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. */
7608 fields_compatible_p (tree f1
, tree f2
)
7610 if (!operand_equal_p (DECL_FIELD_BIT_OFFSET (f1
),
7611 DECL_FIELD_BIT_OFFSET (f2
), OEP_ONLY_CONST
))
7614 if (!operand_equal_p (DECL_FIELD_OFFSET (f1
),
7615 DECL_FIELD_OFFSET (f2
), OEP_ONLY_CONST
))
7618 if (!lang_hooks
.types_compatible_p (TREE_TYPE (f1
), TREE_TYPE (f2
)))
7624 /* Locate within RECORD a field that is compatible with ORIG_FIELD. */
7627 find_compatible_field (tree record
, tree orig_field
)
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
))
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
))
7642 /* ??? We should abort here, but Java appears to do Bad Things
7643 with inherited fields. */
7647 /* Return value of a constant X. */
7650 int_cst_value (tree x
)
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;
7656 gcc_assert (bits
<= HOST_BITS_PER_WIDE_INT
);
7659 val
|= (~(unsigned HOST_WIDE_INT
) 0) << (bits
- 1) << 1;
7661 val
&= ~((~(unsigned HOST_WIDE_INT
) 0) << (bits
- 1) << 1);
7667 /* Returns unsigned variant of TYPE. */
7670 unsigned_type_for (tree type
)
7672 if (POINTER_TYPE_P (type
))
7673 return lang_hooks
.types
.unsigned_type (size_type_node
);
7674 return lang_hooks
.types
.unsigned_type (type
);
7677 /* Returns signed variant of TYPE. */
7680 signed_type_for (tree type
)
7682 if (POINTER_TYPE_P (type
))
7683 return lang_hooks
.types
.signed_type (size_type_node
);
7684 return lang_hooks
.types
.signed_type (type
);
7687 /* Returns the largest value obtainable by casting something in INNER type to
7691 upper_bound_in_type (tree outer
, tree inner
)
7693 unsigned HOST_WIDE_INT lo
, hi
;
7694 unsigned int det
= 0;
7695 unsigned oprec
= TYPE_PRECISION (outer
);
7696 unsigned iprec
= TYPE_PRECISION (inner
);
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;
7704 /* Determine the exponent to use. */
7709 /* oprec <= iprec, outer: signed, inner: don't care. */
7714 /* oprec <= iprec, outer: unsigned, inner: don't care. */
7718 /* oprec > iprec, outer: signed, inner: signed. */
7722 /* oprec > iprec, outer: signed, inner: unsigned. */
7726 /* oprec > iprec, outer: unsigned, inner: signed. */
7730 /* oprec > iprec, outer: unsigned, inner: unsigned. */
7737 /* Compute 2^^prec - 1. */
7738 if (prec
<= HOST_BITS_PER_WIDE_INT
)
7741 lo
= ((~(unsigned HOST_WIDE_INT
) 0)
7742 >> (HOST_BITS_PER_WIDE_INT
- prec
));
7746 hi
= ((~(unsigned HOST_WIDE_INT
) 0)
7747 >> (2 * HOST_BITS_PER_WIDE_INT
- prec
));
7748 lo
= ~(unsigned HOST_WIDE_INT
) 0;
7751 return build_int_cst_wide (outer
, lo
, hi
);
7754 /* Returns the smallest value obtainable by casting something in INNER type to
7758 lower_bound_in_type (tree outer
, tree inner
)
7760 unsigned HOST_WIDE_INT lo
, hi
;
7761 unsigned oprec
= TYPE_PRECISION (outer
);
7762 unsigned iprec
= TYPE_PRECISION (inner
);
7764 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
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
)))
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
7778 unsigned prec
= oprec
> iprec
? iprec
: oprec
;
7780 if (prec
<= HOST_BITS_PER_WIDE_INT
)
7782 hi
= ~(unsigned HOST_WIDE_INT
) 0;
7783 lo
= (~(unsigned HOST_WIDE_INT
) 0) << (prec
- 1);
7787 hi
= ((~(unsigned HOST_WIDE_INT
) 0)
7788 << (prec
- HOST_BITS_PER_WIDE_INT
- 1));
7793 return build_int_cst_wide (outer
, lo
, hi
);
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. */
7803 operand_equal_for_phi_arg_p (tree arg0
, tree arg1
)
7807 if (TREE_CODE (arg0
) == SSA_NAME
|| TREE_CODE (arg1
) == SSA_NAME
)
7809 return operand_equal_p (arg0
, arg1
, 0);
7812 /* Returns number of zeros at the end of binary representation of X.
7814 ??? Use ffs if available? */
7817 num_ending_zeros (tree x
)
7819 unsigned HOST_WIDE_INT fr
, nfr
;
7820 unsigned num
, abits
;
7821 tree type
= TREE_TYPE (x
);
7823 if (TREE_INT_CST_LOW (x
) == 0)
7825 num
= HOST_BITS_PER_WIDE_INT
;
7826 fr
= TREE_INT_CST_HIGH (x
);
7831 fr
= TREE_INT_CST_LOW (x
);
7834 for (abits
= HOST_BITS_PER_WIDE_INT
/ 2; abits
; abits
/= 2)
7837 if (nfr
<< abits
== fr
)
7844 if (num
> TYPE_PRECISION (type
))
7845 num
= TYPE_PRECISION (type
);
7847 return build_int_cst_type (type
, num
);
7851 #define WALK_SUBTREE(NODE) \
7854 result = walk_tree (&(NODE), func, data, pset); \
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. */
7865 walk_type_fields (tree type
, walk_tree_fn func
, void *data
,
7866 struct pointer_set_t
*pset
)
7868 tree result
= NULL_TREE
;
7870 switch (TREE_CODE (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
))))
7886 result
= walk_tree_without_duplicates (&TREE_TYPE (type
),
7894 /* ... fall through ... */
7897 WALK_SUBTREE (TREE_TYPE (type
));
7901 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type
));
7906 WALK_SUBTREE (TREE_TYPE (type
));
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
));
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
));
7926 WALK_SUBTREE (TREE_TYPE (type
));
7927 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type
));
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. */
7944 walk_tree (tree
*tp
, walk_tree_fn func
, void *data
, struct pointer_set_t
*pset
)
7946 enum tree_code code
;
7950 #define WALK_SUBTREE_TAIL(NODE) \
7954 goto tail_recurse; \
7959 /* Skip empty subtrees. */
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
))
7968 /* Call the function. */
7970 result
= (*func
) (tp
, &walk_subtrees
, data
);
7972 /* If we found something, return it. */
7976 code
= TREE_CODE (*tp
);
7978 /* Even if we didn't, FUNC may have decided that there was nothing
7979 interesting below this point in the tree. */
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
));
7991 result
= lang_hooks
.tree_inlining
.walk_subtrees (tp
, &walk_subtrees
, func
,
7993 if (result
|| !walk_subtrees
)
7999 case IDENTIFIER_NODE
:
8005 case PLACEHOLDER_EXPR
:
8009 /* None of these have subtrees other than those already walked
8014 WALK_SUBTREE (TREE_VALUE (*tp
));
8015 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp
));
8020 int len
= TREE_VEC_LENGTH (*tp
);
8025 /* Walk all elements but the first. */
8027 WALK_SUBTREE (TREE_VEC_ELT (*tp
, len
));
8029 /* Now walk the first one as a tail call. */
8030 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp
, 0));
8034 WALK_SUBTREE (TREE_REALPART (*tp
));
8035 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp
));
8039 unsigned HOST_WIDE_INT idx
;
8040 constructor_elt
*ce
;
8043 VEC_iterate(constructor_elt
, CONSTRUCTOR_ELTS (*tp
), idx
, ce
);
8045 WALK_SUBTREE (ce
->value
);
8050 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp
, 0));
8055 for (decl
= BIND_EXPR_VARS (*tp
); decl
; decl
= TREE_CHAIN (decl
))
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
));
8066 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp
));
8069 case STATEMENT_LIST
:
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
));
8078 switch (OMP_CLAUSE_CODE (*tp
))
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
:
8087 case OMP_CLAUSE_NUM_THREADS
:
8088 case OMP_CLAUSE_SCHEDULE
:
8089 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp
, 0));
8092 case OMP_CLAUSE_NOWAIT
:
8093 case OMP_CLAUSE_ORDERED
:
8094 case OMP_CLAUSE_DEFAULT
:
8095 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp
));
8097 case OMP_CLAUSE_REDUCTION
:
8100 for (i
= 0; i
< 4; i
++)
8101 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp
, i
));
8102 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp
));
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
));
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.
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.
8133 Note that DECLs get walked as part of processing the BIND_EXPR. */
8134 if (TREE_CODE (DECL_EXPR_DECL (*tp
)) == TYPE_DECL
)
8136 tree
*type_p
= &TREE_TYPE (DECL_EXPR_DECL (*tp
));
8137 if (TREE_CODE (*type_p
) == ERROR_MARK
)
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
)
8147 result
= walk_type_fields (*type_p
, func
, data
, pset
);
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
)
8158 for (field
= TYPE_FIELDS (*type_p
); field
;
8159 field
= TREE_CHAIN (field
))
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
8165 if (TREE_CODE (field
) != FIELD_DECL
)
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
));
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
)
8182 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p
));
8183 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p
));
8186 WALK_SUBTREE (TYPE_SIZE (*type_p
));
8187 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p
));
8192 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code
))
8193 || IS_GIMPLE_STMT_CODE_CLASS (TREE_CODE_CLASS (code
)))
8197 /* Walk over all the sub-trees of this operand. */
8198 len
= TREE_OPERAND_LENGTH (*tp
);
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. */
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));
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
);
8215 /* We didn't find what we were looking for. */
8218 #undef WALK_SUBTREE_TAIL
8222 /* Like walk_tree, but does not walk duplicate nodes more than once. */
8225 walk_tree_without_duplicates (tree
*tp
, walk_tree_fn func
, void *data
)
8228 struct pointer_set_t
*pset
;
8230 pset
= pointer_set_create ();
8231 result
= walk_tree (tp
, func
, data
, pset
);
8232 pointer_set_destroy (pset
);
8237 /* Return true if STMT is an empty statement or contains nothing but
8238 empty statements. */
8241 empty_body_p (tree stmt
)
8243 tree_stmt_iterator i
;
8246 if (IS_EMPTY_STMT (stmt
))
8248 else if (TREE_CODE (stmt
) == BIND_EXPR
)
8249 body
= BIND_EXPR_BODY (stmt
);
8250 else if (TREE_CODE (stmt
) == STATEMENT_LIST
)
8255 for (i
= tsi_start (body
); !tsi_end_p (i
); tsi_next (&i
))
8256 if (!empty_body_p (tsi_stmt (i
)))
8265 char const c
= TREE_CODE_CLASS (TREE_CODE (t
));
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
);
8276 generic_tree_operand (tree node
, int i
)
8278 if (GIMPLE_STMT_P (node
))
8279 return &GIMPLE_STMT_OPERAND (node
, i
);
8280 return &TREE_OPERAND (node
, i
);
8284 generic_tree_type (tree node
)
8286 if (GIMPLE_STMT_P (node
))
8287 return &void_type_node
;
8288 return &TREE_TYPE (node
);
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. */
8297 call_expr_arglist (tree exp
)
8299 tree arglist
= NULL_TREE
;
8301 for (i
= call_expr_nargs (exp
) - 1; i
>= 0; i
--)
8302 arglist
= tree_cons (NULL_TREE
, CALL_EXPR_ARG (exp
, i
), arglist
);
8306 #include "gt-tree.h"