re PR c++/5293 (confusing message when binding a temporary to a reference)
[official-gcc.git] / gcc / tree.c
blobd362ec14ff24403220ce500049627a29a727790e
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 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
22 /* This file contains the low level primitives for operating on tree nodes,
23 including allocation, list operations, interning of identifiers,
24 construction of data type nodes and statement nodes,
25 and construction of type conversion nodes. It also contains
26 tables index by tree code that describe how to take apart
27 nodes of that code.
29 It is intended to be language-independent, but occasionally
30 calls language-dependent routines defined (for C) in typecheck.c. */
32 #include "config.h"
33 #include "system.h"
34 #include "coretypes.h"
35 #include "tm.h"
36 #include "flags.h"
37 #include "tree.h"
38 #include "real.h"
39 #include "tm_p.h"
40 #include "function.h"
41 #include "obstack.h"
42 #include "toplev.h"
43 #include "ggc.h"
44 #include "hashtab.h"
45 #include "output.h"
46 #include "target.h"
47 #include "langhooks.h"
49 /* obstack.[ch] explicitly declined to prototype this. */
50 extern int _obstack_allocated_p (struct obstack *h, void *obj);
52 #ifdef GATHER_STATISTICS
53 /* Statistics-gathering stuff. */
55 int tree_node_counts[(int) all_kinds];
56 int tree_node_sizes[(int) all_kinds];
58 /* Keep in sync with tree.h:enum tree_node_kind. */
59 static const char * const tree_node_kind_names[] = {
60 "decls",
61 "types",
62 "blocks",
63 "stmts",
64 "refs",
65 "exprs",
66 "constants",
67 "identifiers",
68 "perm_tree_lists",
69 "temp_tree_lists",
70 "vecs",
71 "random kinds",
72 "lang_decl kinds",
73 "lang_type kinds"
75 #endif /* GATHER_STATISTICS */
77 /* Unique id for next decl created. */
78 static GTY(()) int next_decl_uid;
79 /* Unique id for next type created. */
80 static GTY(()) int next_type_uid = 1;
82 /* Since we cannot rehash a type after it is in the table, we have to
83 keep the hash code. */
85 struct type_hash GTY(())
87 unsigned long hash;
88 tree type;
91 /* Initial size of the hash table (rounded to next prime). */
92 #define TYPE_HASH_INITIAL_SIZE 1000
94 /* Now here is the hash table. When recording a type, it is added to
95 the slot whose index is the hash code. Note that the hash table is
96 used for several kinds of types (function types, array types and
97 array index range types, for now). While all these live in the
98 same table, they are completely independent, and the hash code is
99 computed differently for each of these. */
101 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
102 htab_t type_hash_table;
104 static void set_type_quals (tree, int);
105 static int type_hash_eq (const void *, const void *);
106 static hashval_t type_hash_hash (const void *);
107 static void print_type_hash_statistics (void);
108 static void finish_vector_type (tree);
109 static tree make_vector (enum machine_mode, tree, int);
110 static int type_hash_marked_p (const void *);
112 tree global_trees[TI_MAX];
113 tree integer_types[itk_none];
115 /* Init tree.c. */
117 void
118 init_ttree (void)
120 /* Initialize the hash table of types. */
121 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
122 type_hash_eq, 0);
126 /* The name of the object as the assembler will see it (but before any
127 translations made by ASM_OUTPUT_LABELREF). Often this is the same
128 as DECL_NAME. It is an IDENTIFIER_NODE. */
129 tree
130 decl_assembler_name (tree decl)
132 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
133 (*lang_hooks.set_decl_assembler_name) (decl);
134 return DECL_CHECK (decl)->decl.assembler_name;
137 /* Compute the number of bytes occupied by 'node'. This routine only
138 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
139 size_t
140 tree_size (tree node)
142 enum tree_code code = TREE_CODE (node);
144 switch (TREE_CODE_CLASS (code))
146 case 'd': /* A decl node */
147 return sizeof (struct tree_decl);
149 case 't': /* a type node */
150 return sizeof (struct tree_type);
152 case 'b': /* a lexical block node */
153 return sizeof (struct tree_block);
155 case 'r': /* a reference */
156 case 'e': /* an expression */
157 case 's': /* an expression with side effects */
158 case '<': /* a comparison expression */
159 case '1': /* a unary arithmetic expression */
160 case '2': /* a binary arithmetic expression */
161 return (sizeof (struct tree_exp)
162 + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
164 case 'c': /* a constant */
165 switch (code)
167 case INTEGER_CST: return sizeof (struct tree_int_cst);
168 case REAL_CST: return sizeof (struct tree_real_cst);
169 case COMPLEX_CST: return sizeof (struct tree_complex);
170 case VECTOR_CST: return sizeof (struct tree_vector);
171 case STRING_CST: return sizeof (struct tree_string);
172 default:
173 return (*lang_hooks.tree_size) (code);
176 case 'x': /* something random, like an identifier. */
177 switch (code)
179 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
180 case TREE_LIST: return sizeof (struct tree_list);
181 case TREE_VEC: return (sizeof (struct tree_vec)
182 + TREE_VEC_LENGTH(node) * sizeof(char *)
183 - sizeof (char *));
185 case ERROR_MARK:
186 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
188 default:
189 return (*lang_hooks.tree_size) (code);
192 default:
193 abort ();
197 /* Return a newly allocated node of code CODE.
198 For decl and type nodes, some other fields are initialized.
199 The rest of the node is initialized to zero.
201 Achoo! I got a code in the node. */
203 tree
204 make_node (enum tree_code code)
206 tree t;
207 int type = TREE_CODE_CLASS (code);
208 size_t length;
209 #ifdef GATHER_STATISTICS
210 tree_node_kind kind;
211 #endif
212 struct tree_common ttmp;
214 /* We can't allocate a TREE_VEC without knowing how many elements
215 it will have. */
216 if (code == TREE_VEC)
217 abort ();
219 TREE_SET_CODE ((tree)&ttmp, code);
220 length = tree_size ((tree)&ttmp);
222 #ifdef GATHER_STATISTICS
223 switch (type)
225 case 'd': /* A decl node */
226 kind = d_kind;
227 break;
229 case 't': /* a type node */
230 kind = t_kind;
231 break;
233 case 'b': /* a lexical block */
234 kind = b_kind;
235 break;
237 case 's': /* an expression with side effects */
238 kind = s_kind;
239 break;
241 case 'r': /* a reference */
242 kind = r_kind;
243 break;
245 case 'e': /* an expression */
246 case '<': /* a comparison expression */
247 case '1': /* a unary arithmetic expression */
248 case '2': /* a binary arithmetic expression */
249 kind = e_kind;
250 break;
252 case 'c': /* a constant */
253 kind = c_kind;
254 break;
256 case 'x': /* something random, like an identifier. */
257 if (code == IDENTIFIER_NODE)
258 kind = id_kind;
259 else if (code == TREE_VEC)
260 kind = vec_kind;
261 else
262 kind = x_kind;
263 break;
265 default:
266 abort ();
269 tree_node_counts[(int) kind]++;
270 tree_node_sizes[(int) kind] += length;
271 #endif
273 t = ggc_alloc_tree (length);
275 memset (t, 0, length);
277 TREE_SET_CODE (t, code);
279 switch (type)
281 case 's':
282 TREE_SIDE_EFFECTS (t) = 1;
283 break;
285 case 'd':
286 if (code != FUNCTION_DECL)
287 DECL_ALIGN (t) = 1;
288 DECL_USER_ALIGN (t) = 0;
289 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
290 DECL_SOURCE_LOCATION (t) = input_location;
291 DECL_UID (t) = next_decl_uid++;
293 /* We have not yet computed the alias set for this declaration. */
294 DECL_POINTER_ALIAS_SET (t) = -1;
295 break;
297 case 't':
298 TYPE_UID (t) = next_type_uid++;
299 TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
300 TYPE_USER_ALIGN (t) = 0;
301 TYPE_MAIN_VARIANT (t) = t;
303 /* Default to no attributes for type, but let target change that. */
304 TYPE_ATTRIBUTES (t) = NULL_TREE;
305 (*targetm.set_default_type_attributes) (t);
307 /* We have not yet computed the alias set for this type. */
308 TYPE_ALIAS_SET (t) = -1;
309 break;
311 case 'c':
312 TREE_CONSTANT (t) = 1;
313 break;
315 case 'e':
316 switch (code)
318 case INIT_EXPR:
319 case MODIFY_EXPR:
320 case VA_ARG_EXPR:
321 case RTL_EXPR:
322 case PREDECREMENT_EXPR:
323 case PREINCREMENT_EXPR:
324 case POSTDECREMENT_EXPR:
325 case POSTINCREMENT_EXPR:
326 /* All of these have side-effects, no matter what their
327 operands are. */
328 TREE_SIDE_EFFECTS (t) = 1;
329 break;
331 default:
332 break;
334 break;
337 return t;
340 /* Return a new node with the same contents as NODE except that its
341 TREE_CHAIN is zero and it has a fresh uid. */
343 tree
344 copy_node (tree node)
346 tree t;
347 enum tree_code code = TREE_CODE (node);
348 size_t length;
350 length = tree_size (node);
351 t = ggc_alloc_tree (length);
352 memcpy (t, node, length);
354 TREE_CHAIN (t) = 0;
355 TREE_ASM_WRITTEN (t) = 0;
357 if (TREE_CODE_CLASS (code) == 'd')
358 DECL_UID (t) = next_decl_uid++;
359 else if (TREE_CODE_CLASS (code) == 't')
361 TYPE_UID (t) = next_type_uid++;
362 /* The following is so that the debug code for
363 the copy is different from the original type.
364 The two statements usually duplicate each other
365 (because they clear fields of the same union),
366 but the optimizer should catch that. */
367 TYPE_SYMTAB_POINTER (t) = 0;
368 TYPE_SYMTAB_ADDRESS (t) = 0;
371 return t;
374 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
375 For example, this can copy a list made of TREE_LIST nodes. */
377 tree
378 copy_list (tree list)
380 tree head;
381 tree prev, next;
383 if (list == 0)
384 return 0;
386 head = prev = copy_node (list);
387 next = TREE_CHAIN (list);
388 while (next)
390 TREE_CHAIN (prev) = copy_node (next);
391 prev = TREE_CHAIN (prev);
392 next = TREE_CHAIN (next);
394 return head;
398 /* Return a newly constructed INTEGER_CST node whose constant value
399 is specified by the two ints LOW and HI.
400 The TREE_TYPE is set to `int'.
402 This function should be used via the `build_int_2' macro. */
404 tree
405 build_int_2_wide (unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
407 tree t = make_node (INTEGER_CST);
409 TREE_INT_CST_LOW (t) = low;
410 TREE_INT_CST_HIGH (t) = hi;
411 TREE_TYPE (t) = integer_type_node;
412 return t;
415 /* Return a new VECTOR_CST node whose type is TYPE and whose values
416 are in a list pointed by VALS. */
418 tree
419 build_vector (tree type, tree vals)
421 tree v = make_node (VECTOR_CST);
422 int over1 = 0, over2 = 0;
423 tree link;
425 TREE_VECTOR_CST_ELTS (v) = vals;
426 TREE_TYPE (v) = type;
428 /* Iterate through elements and check for overflow. */
429 for (link = vals; link; link = TREE_CHAIN (link))
431 tree value = TREE_VALUE (link);
433 over1 |= TREE_OVERFLOW (value);
434 over2 |= TREE_CONSTANT_OVERFLOW (value);
437 TREE_OVERFLOW (v) = over1;
438 TREE_CONSTANT_OVERFLOW (v) = over2;
440 return v;
443 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
444 are in a list pointed to by VALS. */
445 tree
446 build_constructor (tree type, tree vals)
448 tree c = make_node (CONSTRUCTOR);
449 TREE_TYPE (c) = type;
450 CONSTRUCTOR_ELTS (c) = vals;
452 /* ??? May not be necessary. Mirrors what build does. */
453 if (vals)
455 TREE_SIDE_EFFECTS (c) = TREE_SIDE_EFFECTS (vals);
456 TREE_READONLY (c) = TREE_READONLY (vals);
457 TREE_CONSTANT (c) = TREE_CONSTANT (vals);
459 else
460 TREE_CONSTANT (c) = 0; /* safe side */
462 return c;
465 /* Return a new REAL_CST node whose type is TYPE and value is D. */
467 tree
468 build_real (tree type, REAL_VALUE_TYPE d)
470 tree v;
471 REAL_VALUE_TYPE *dp;
472 int overflow = 0;
474 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
475 Consider doing it via real_convert now. */
477 v = make_node (REAL_CST);
478 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
479 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
481 TREE_TYPE (v) = type;
482 TREE_REAL_CST_PTR (v) = dp;
483 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
484 return v;
487 /* Return a new REAL_CST node whose type is TYPE
488 and whose value is the integer value of the INTEGER_CST node I. */
490 REAL_VALUE_TYPE
491 real_value_from_int_cst (tree type ATTRIBUTE_UNUSED, tree i)
493 REAL_VALUE_TYPE d;
495 /* Clear all bits of the real value type so that we can later do
496 bitwise comparisons to see if two values are the same. */
497 memset ((char *) &d, 0, sizeof d);
499 if (! TREE_UNSIGNED (TREE_TYPE (i)))
500 REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
501 TYPE_MODE (type));
502 else
503 REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
504 TREE_INT_CST_HIGH (i), TYPE_MODE (type));
505 return d;
508 /* Given a tree representing an integer constant I, return a tree
509 representing the same value as a floating-point constant of type TYPE. */
511 tree
512 build_real_from_int_cst (tree type, tree i)
514 tree v;
515 int overflow = TREE_OVERFLOW (i);
517 v = build_real (type, real_value_from_int_cst (type, i));
519 TREE_OVERFLOW (v) |= overflow;
520 TREE_CONSTANT_OVERFLOW (v) |= overflow;
521 return v;
524 /* Return a newly constructed STRING_CST node whose value is
525 the LEN characters at STR.
526 The TREE_TYPE is not initialized. */
528 tree
529 build_string (int len, const char *str)
531 tree s = make_node (STRING_CST);
533 TREE_STRING_LENGTH (s) = len;
534 TREE_STRING_POINTER (s) = ggc_alloc_string (str, len);
536 return s;
539 /* Return a newly constructed COMPLEX_CST node whose value is
540 specified by the real and imaginary parts REAL and IMAG.
541 Both REAL and IMAG should be constant nodes. TYPE, if specified,
542 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
544 tree
545 build_complex (tree type, tree real, tree imag)
547 tree t = make_node (COMPLEX_CST);
549 TREE_REALPART (t) = real;
550 TREE_IMAGPART (t) = imag;
551 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
552 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
553 TREE_CONSTANT_OVERFLOW (t)
554 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
555 return t;
558 /* Build a newly constructed TREE_VEC node of length LEN. */
560 tree
561 make_tree_vec (int len)
563 tree t;
564 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
566 #ifdef GATHER_STATISTICS
567 tree_node_counts[(int) vec_kind]++;
568 tree_node_sizes[(int) vec_kind] += length;
569 #endif
571 t = ggc_alloc_tree (length);
573 memset (t, 0, length);
574 TREE_SET_CODE (t, TREE_VEC);
575 TREE_VEC_LENGTH (t) = len;
577 return t;
580 /* Return 1 if EXPR is the integer constant zero or a complex constant
581 of zero. */
584 integer_zerop (tree expr)
586 STRIP_NOPS (expr);
588 return ((TREE_CODE (expr) == INTEGER_CST
589 && ! TREE_CONSTANT_OVERFLOW (expr)
590 && TREE_INT_CST_LOW (expr) == 0
591 && TREE_INT_CST_HIGH (expr) == 0)
592 || (TREE_CODE (expr) == COMPLEX_CST
593 && integer_zerop (TREE_REALPART (expr))
594 && integer_zerop (TREE_IMAGPART (expr))));
597 /* Return 1 if EXPR is the integer constant one or the corresponding
598 complex constant. */
601 integer_onep (tree expr)
603 STRIP_NOPS (expr);
605 return ((TREE_CODE (expr) == INTEGER_CST
606 && ! TREE_CONSTANT_OVERFLOW (expr)
607 && TREE_INT_CST_LOW (expr) == 1
608 && TREE_INT_CST_HIGH (expr) == 0)
609 || (TREE_CODE (expr) == COMPLEX_CST
610 && integer_onep (TREE_REALPART (expr))
611 && integer_zerop (TREE_IMAGPART (expr))));
614 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
615 it contains. Likewise for the corresponding complex constant. */
618 integer_all_onesp (tree expr)
620 int prec;
621 int uns;
623 STRIP_NOPS (expr);
625 if (TREE_CODE (expr) == COMPLEX_CST
626 && integer_all_onesp (TREE_REALPART (expr))
627 && integer_zerop (TREE_IMAGPART (expr)))
628 return 1;
630 else if (TREE_CODE (expr) != INTEGER_CST
631 || TREE_CONSTANT_OVERFLOW (expr))
632 return 0;
634 uns = TREE_UNSIGNED (TREE_TYPE (expr));
635 if (!uns)
636 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
637 && TREE_INT_CST_HIGH (expr) == -1);
639 /* Note that using TYPE_PRECISION here is wrong. We care about the
640 actual bits, not the (arbitrary) range of the type. */
641 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
642 if (prec >= HOST_BITS_PER_WIDE_INT)
644 HOST_WIDE_INT high_value;
645 int shift_amount;
647 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
649 if (shift_amount > HOST_BITS_PER_WIDE_INT)
650 /* Can not handle precisions greater than twice the host int size. */
651 abort ();
652 else if (shift_amount == HOST_BITS_PER_WIDE_INT)
653 /* Shifting by the host word size is undefined according to the ANSI
654 standard, so we must handle this as a special case. */
655 high_value = -1;
656 else
657 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
659 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
660 && TREE_INT_CST_HIGH (expr) == high_value);
662 else
663 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
666 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
667 one bit on). */
670 integer_pow2p (tree expr)
672 int prec;
673 HOST_WIDE_INT high, low;
675 STRIP_NOPS (expr);
677 if (TREE_CODE (expr) == COMPLEX_CST
678 && integer_pow2p (TREE_REALPART (expr))
679 && integer_zerop (TREE_IMAGPART (expr)))
680 return 1;
682 if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
683 return 0;
685 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
686 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
687 high = TREE_INT_CST_HIGH (expr);
688 low = TREE_INT_CST_LOW (expr);
690 /* First clear all bits that are beyond the type's precision in case
691 we've been sign extended. */
693 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
695 else if (prec > HOST_BITS_PER_WIDE_INT)
696 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
697 else
699 high = 0;
700 if (prec < HOST_BITS_PER_WIDE_INT)
701 low &= ~((HOST_WIDE_INT) (-1) << prec);
704 if (high == 0 && low == 0)
705 return 0;
707 return ((high == 0 && (low & (low - 1)) == 0)
708 || (low == 0 && (high & (high - 1)) == 0));
711 /* Return 1 if EXPR is an integer constant other than zero or a
712 complex constant other than zero. */
715 integer_nonzerop (tree expr)
717 STRIP_NOPS (expr);
719 return ((TREE_CODE (expr) == INTEGER_CST
720 && ! TREE_CONSTANT_OVERFLOW (expr)
721 && (TREE_INT_CST_LOW (expr) != 0
722 || TREE_INT_CST_HIGH (expr) != 0))
723 || (TREE_CODE (expr) == COMPLEX_CST
724 && (integer_nonzerop (TREE_REALPART (expr))
725 || integer_nonzerop (TREE_IMAGPART (expr)))));
728 /* Return the power of two represented by a tree node known to be a
729 power of two. */
732 tree_log2 (tree expr)
734 int prec;
735 HOST_WIDE_INT high, low;
737 STRIP_NOPS (expr);
739 if (TREE_CODE (expr) == COMPLEX_CST)
740 return tree_log2 (TREE_REALPART (expr));
742 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
743 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
745 high = TREE_INT_CST_HIGH (expr);
746 low = TREE_INT_CST_LOW (expr);
748 /* First clear all bits that are beyond the type's precision in case
749 we've been sign extended. */
751 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
753 else if (prec > HOST_BITS_PER_WIDE_INT)
754 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
755 else
757 high = 0;
758 if (prec < HOST_BITS_PER_WIDE_INT)
759 low &= ~((HOST_WIDE_INT) (-1) << prec);
762 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
763 : exact_log2 (low));
766 /* Similar, but return the largest integer Y such that 2 ** Y is less
767 than or equal to EXPR. */
770 tree_floor_log2 (tree expr)
772 int prec;
773 HOST_WIDE_INT high, low;
775 STRIP_NOPS (expr);
777 if (TREE_CODE (expr) == COMPLEX_CST)
778 return tree_log2 (TREE_REALPART (expr));
780 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
781 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
783 high = TREE_INT_CST_HIGH (expr);
784 low = TREE_INT_CST_LOW (expr);
786 /* First clear all bits that are beyond the type's precision in case
787 we've been sign extended. Ignore if type's precision hasn't been set
788 since what we are doing is setting it. */
790 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
792 else if (prec > HOST_BITS_PER_WIDE_INT)
793 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
794 else
796 high = 0;
797 if (prec < HOST_BITS_PER_WIDE_INT)
798 low &= ~((HOST_WIDE_INT) (-1) << prec);
801 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
802 : floor_log2 (low));
805 /* Return 1 if EXPR is the real constant zero. */
808 real_zerop (tree expr)
810 STRIP_NOPS (expr);
812 return ((TREE_CODE (expr) == REAL_CST
813 && ! TREE_CONSTANT_OVERFLOW (expr)
814 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
815 || (TREE_CODE (expr) == COMPLEX_CST
816 && real_zerop (TREE_REALPART (expr))
817 && real_zerop (TREE_IMAGPART (expr))));
820 /* Return 1 if EXPR is the real constant one in real or complex form. */
823 real_onep (tree expr)
825 STRIP_NOPS (expr);
827 return ((TREE_CODE (expr) == REAL_CST
828 && ! TREE_CONSTANT_OVERFLOW (expr)
829 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
830 || (TREE_CODE (expr) == COMPLEX_CST
831 && real_onep (TREE_REALPART (expr))
832 && real_zerop (TREE_IMAGPART (expr))));
835 /* Return 1 if EXPR is the real constant two. */
838 real_twop (tree expr)
840 STRIP_NOPS (expr);
842 return ((TREE_CODE (expr) == REAL_CST
843 && ! TREE_CONSTANT_OVERFLOW (expr)
844 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
845 || (TREE_CODE (expr) == COMPLEX_CST
846 && real_twop (TREE_REALPART (expr))
847 && real_zerop (TREE_IMAGPART (expr))));
850 /* Return 1 if EXPR is the real constant minus one. */
853 real_minus_onep (tree expr)
855 STRIP_NOPS (expr);
857 return ((TREE_CODE (expr) == REAL_CST
858 && ! TREE_CONSTANT_OVERFLOW (expr)
859 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
860 || (TREE_CODE (expr) == COMPLEX_CST
861 && real_minus_onep (TREE_REALPART (expr))
862 && real_zerop (TREE_IMAGPART (expr))));
865 /* Nonzero if EXP is a constant or a cast of a constant. */
868 really_constant_p (tree exp)
870 /* This is not quite the same as STRIP_NOPS. It does more. */
871 while (TREE_CODE (exp) == NOP_EXPR
872 || TREE_CODE (exp) == CONVERT_EXPR
873 || TREE_CODE (exp) == NON_LVALUE_EXPR)
874 exp = TREE_OPERAND (exp, 0);
875 return TREE_CONSTANT (exp);
878 /* Return first list element whose TREE_VALUE is ELEM.
879 Return 0 if ELEM is not in LIST. */
881 tree
882 value_member (tree elem, tree list)
884 while (list)
886 if (elem == TREE_VALUE (list))
887 return list;
888 list = TREE_CHAIN (list);
890 return NULL_TREE;
893 /* Return first list element whose TREE_PURPOSE is ELEM.
894 Return 0 if ELEM is not in LIST. */
896 tree
897 purpose_member (tree elem, tree list)
899 while (list)
901 if (elem == TREE_PURPOSE (list))
902 return list;
903 list = TREE_CHAIN (list);
905 return NULL_TREE;
908 /* Return first list element whose BINFO_TYPE is ELEM.
909 Return 0 if ELEM is not in LIST. */
911 tree
912 binfo_member (tree elem, tree list)
914 while (list)
916 if (elem == BINFO_TYPE (list))
917 return list;
918 list = TREE_CHAIN (list);
920 return NULL_TREE;
923 /* Return nonzero if ELEM is part of the chain CHAIN. */
926 chain_member (tree elem, tree chain)
928 while (chain)
930 if (elem == chain)
931 return 1;
932 chain = TREE_CHAIN (chain);
935 return 0;
938 /* Return the length of a chain of nodes chained through TREE_CHAIN.
939 We expect a null pointer to mark the end of the chain.
940 This is the Lisp primitive `length'. */
943 list_length (tree t)
945 tree tail;
946 int len = 0;
948 for (tail = t; tail; tail = TREE_CHAIN (tail))
949 len++;
951 return len;
954 /* Returns the number of FIELD_DECLs in TYPE. */
957 fields_length (tree type)
959 tree t = TYPE_FIELDS (type);
960 int count = 0;
962 for (; t; t = TREE_CHAIN (t))
963 if (TREE_CODE (t) == FIELD_DECL)
964 ++count;
966 return count;
969 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
970 by modifying the last node in chain 1 to point to chain 2.
971 This is the Lisp primitive `nconc'. */
973 tree
974 chainon (tree op1, tree op2)
976 tree t1;
978 if (!op1)
979 return op2;
980 if (!op2)
981 return op1;
983 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
984 continue;
985 TREE_CHAIN (t1) = op2;
987 #ifdef ENABLE_TREE_CHECKING
989 tree t2;
990 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
991 if (t2 == t1)
992 abort (); /* Circularity created. */
994 #endif
996 return op1;
999 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1001 tree
1002 tree_last (tree chain)
1004 tree next;
1005 if (chain)
1006 while ((next = TREE_CHAIN (chain)))
1007 chain = next;
1008 return chain;
1011 /* Reverse the order of elements in the chain T,
1012 and return the new head of the chain (old last element). */
1014 tree
1015 nreverse (tree t)
1017 tree prev = 0, decl, next;
1018 for (decl = t; decl; decl = next)
1020 next = TREE_CHAIN (decl);
1021 TREE_CHAIN (decl) = prev;
1022 prev = decl;
1024 return prev;
1027 /* Return a newly created TREE_LIST node whose
1028 purpose and value fields are PARM and VALUE. */
1030 tree
1031 build_tree_list (tree parm, tree value)
1033 tree t = make_node (TREE_LIST);
1034 TREE_PURPOSE (t) = parm;
1035 TREE_VALUE (t) = value;
1036 return t;
1039 /* Return a newly created TREE_LIST node whose
1040 purpose and value fields are PURPOSE and VALUE
1041 and whose TREE_CHAIN is CHAIN. */
1043 tree
1044 tree_cons (tree purpose, tree value, tree chain)
1046 tree node;
1048 node = ggc_alloc_tree (sizeof (struct tree_list));
1050 memset (node, 0, sizeof (struct tree_common));
1052 #ifdef GATHER_STATISTICS
1053 tree_node_counts[(int) x_kind]++;
1054 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
1055 #endif
1057 TREE_SET_CODE (node, TREE_LIST);
1058 TREE_CHAIN (node) = chain;
1059 TREE_PURPOSE (node) = purpose;
1060 TREE_VALUE (node) = value;
1061 return node;
1064 /* Return the first expression in a sequence of COMPOUND_EXPRs. */
1066 tree
1067 expr_first (tree expr)
1069 if (expr == NULL_TREE)
1070 return expr;
1071 while (TREE_CODE (expr) == COMPOUND_EXPR)
1072 expr = TREE_OPERAND (expr, 0);
1073 return expr;
1076 /* Return the last expression in a sequence of COMPOUND_EXPRs. */
1078 tree
1079 expr_last (tree expr)
1081 if (expr == NULL_TREE)
1082 return expr;
1083 while (TREE_CODE (expr) == COMPOUND_EXPR)
1084 expr = TREE_OPERAND (expr, 1);
1085 return expr;
1088 /* Return the number of subexpressions in a sequence of COMPOUND_EXPRs. */
1091 expr_length (tree expr)
1093 int len = 0;
1095 if (expr == NULL_TREE)
1096 return 0;
1097 for (; TREE_CODE (expr) == COMPOUND_EXPR; expr = TREE_OPERAND (expr, 1))
1098 len += expr_length (TREE_OPERAND (expr, 0));
1099 ++len;
1100 return len;
1103 /* Return the size nominally occupied by an object of type TYPE
1104 when it resides in memory. The value is measured in units of bytes,
1105 and its data type is that normally used for type sizes
1106 (which is the first type created by make_signed_type or
1107 make_unsigned_type). */
1109 tree
1110 size_in_bytes (tree type)
1112 tree t;
1114 if (type == error_mark_node)
1115 return integer_zero_node;
1117 type = TYPE_MAIN_VARIANT (type);
1118 t = TYPE_SIZE_UNIT (type);
1120 if (t == 0)
1122 (*lang_hooks.types.incomplete_type_error) (NULL_TREE, type);
1123 return size_zero_node;
1126 if (TREE_CODE (t) == INTEGER_CST)
1127 force_fit_type (t, 0);
1129 return t;
1132 /* Return the size of TYPE (in bytes) as a wide integer
1133 or return -1 if the size can vary or is larger than an integer. */
1135 HOST_WIDE_INT
1136 int_size_in_bytes (tree type)
1138 tree t;
1140 if (type == error_mark_node)
1141 return 0;
1143 type = TYPE_MAIN_VARIANT (type);
1144 t = TYPE_SIZE_UNIT (type);
1145 if (t == 0
1146 || TREE_CODE (t) != INTEGER_CST
1147 || TREE_OVERFLOW (t)
1148 || TREE_INT_CST_HIGH (t) != 0
1149 /* If the result would appear negative, it's too big to represent. */
1150 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
1151 return -1;
1153 return TREE_INT_CST_LOW (t);
1156 /* Return the bit position of FIELD, in bits from the start of the record.
1157 This is a tree of type bitsizetype. */
1159 tree
1160 bit_position (tree field)
1162 return bit_from_pos (DECL_FIELD_OFFSET (field),
1163 DECL_FIELD_BIT_OFFSET (field));
1166 /* Likewise, but return as an integer. Abort if it cannot be represented
1167 in that way (since it could be a signed value, we don't have the option
1168 of returning -1 like int_size_in_byte can. */
1170 HOST_WIDE_INT
1171 int_bit_position (tree field)
1173 return tree_low_cst (bit_position (field), 0);
1176 /* Return the byte position of FIELD, in bytes from the start of the record.
1177 This is a tree of type sizetype. */
1179 tree
1180 byte_position (tree field)
1182 return byte_from_pos (DECL_FIELD_OFFSET (field),
1183 DECL_FIELD_BIT_OFFSET (field));
1186 /* Likewise, but return as an integer. Abort if it cannot be represented
1187 in that way (since it could be a signed value, we don't have the option
1188 of returning -1 like int_size_in_byte can. */
1190 HOST_WIDE_INT
1191 int_byte_position (tree field)
1193 return tree_low_cst (byte_position (field), 0);
1196 /* Return the strictest alignment, in bits, that T is known to have. */
1198 unsigned int
1199 expr_align (tree t)
1201 unsigned int align0, align1;
1203 switch (TREE_CODE (t))
1205 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1206 /* If we have conversions, we know that the alignment of the
1207 object must meet each of the alignments of the types. */
1208 align0 = expr_align (TREE_OPERAND (t, 0));
1209 align1 = TYPE_ALIGN (TREE_TYPE (t));
1210 return MAX (align0, align1);
1212 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1213 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1214 case WITH_RECORD_EXPR: case CLEANUP_POINT_EXPR: case UNSAVE_EXPR:
1215 /* These don't change the alignment of an object. */
1216 return expr_align (TREE_OPERAND (t, 0));
1218 case COND_EXPR:
1219 /* The best we can do is say that the alignment is the least aligned
1220 of the two arms. */
1221 align0 = expr_align (TREE_OPERAND (t, 1));
1222 align1 = expr_align (TREE_OPERAND (t, 2));
1223 return MIN (align0, align1);
1225 case LABEL_DECL: case CONST_DECL:
1226 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1227 if (DECL_ALIGN (t) != 0)
1228 return DECL_ALIGN (t);
1229 break;
1231 case FUNCTION_DECL:
1232 return FUNCTION_BOUNDARY;
1234 default:
1235 break;
1238 /* Otherwise take the alignment from that of the type. */
1239 return TYPE_ALIGN (TREE_TYPE (t));
1242 /* Return, as a tree node, the number of elements for TYPE (which is an
1243 ARRAY_TYPE) minus one. This counts only elements of the top array. */
1245 tree
1246 array_type_nelts (tree type)
1248 tree index_type, min, max;
1250 /* If they did it with unspecified bounds, then we should have already
1251 given an error about it before we got here. */
1252 if (! TYPE_DOMAIN (type))
1253 return error_mark_node;
1255 index_type = TYPE_DOMAIN (type);
1256 min = TYPE_MIN_VALUE (index_type);
1257 max = TYPE_MAX_VALUE (index_type);
1259 return (integer_zerop (min)
1260 ? max
1261 : fold (build (MINUS_EXPR, TREE_TYPE (max), max, min)));
1264 /* Return nonzero if arg is static -- a reference to an object in
1265 static storage. This is not the same as the C meaning of `static'. */
1268 staticp (tree arg)
1270 switch (TREE_CODE (arg))
1272 case FUNCTION_DECL:
1273 /* Nested functions aren't static, since taking their address
1274 involves a trampoline. */
1275 return ((decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
1276 && ! DECL_NON_ADDR_CONST_P (arg));
1278 case VAR_DECL:
1279 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1280 && ! DECL_THREAD_LOCAL (arg)
1281 && ! DECL_NON_ADDR_CONST_P (arg));
1283 case CONSTRUCTOR:
1284 return TREE_STATIC (arg);
1286 case LABEL_DECL:
1287 case STRING_CST:
1288 return 1;
1290 /* If we are referencing a bitfield, we can't evaluate an
1291 ADDR_EXPR at compile time and so it isn't a constant. */
1292 case COMPONENT_REF:
1293 return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
1294 && staticp (TREE_OPERAND (arg, 0)));
1296 case BIT_FIELD_REF:
1297 return 0;
1299 #if 0
1300 /* This case is technically correct, but results in setting
1301 TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
1302 compile time. */
1303 case INDIRECT_REF:
1304 return TREE_CONSTANT (TREE_OPERAND (arg, 0));
1305 #endif
1307 case ARRAY_REF:
1308 case ARRAY_RANGE_REF:
1309 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1310 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1311 return staticp (TREE_OPERAND (arg, 0));
1313 default:
1314 if ((unsigned int) TREE_CODE (arg)
1315 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1316 return (*lang_hooks.staticp) (arg);
1317 else
1318 return 0;
1322 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
1323 Do this to any expression which may be used in more than one place,
1324 but must be evaluated only once.
1326 Normally, expand_expr would reevaluate the expression each time.
1327 Calling save_expr produces something that is evaluated and recorded
1328 the first time expand_expr is called on it. Subsequent calls to
1329 expand_expr just reuse the recorded value.
1331 The call to expand_expr that generates code that actually computes
1332 the value is the first call *at compile time*. Subsequent calls
1333 *at compile time* generate code to use the saved value.
1334 This produces correct result provided that *at run time* control
1335 always flows through the insns made by the first expand_expr
1336 before reaching the other places where the save_expr was evaluated.
1337 You, the caller of save_expr, must make sure this is so.
1339 Constants, and certain read-only nodes, are returned with no
1340 SAVE_EXPR because that is safe. Expressions containing placeholders
1341 are not touched; see tree.def for an explanation of what these
1342 are used for. */
1344 tree
1345 save_expr (tree expr)
1347 tree t = fold (expr);
1348 tree inner;
1350 /* If the tree evaluates to a constant, then we don't want to hide that
1351 fact (i.e. this allows further folding, and direct checks for constants).
1352 However, a read-only object that has side effects cannot be bypassed.
1353 Since it is no problem to reevaluate literals, we just return the
1354 literal node. */
1355 inner = skip_simple_arithmetic (t);
1356 if (TREE_CONSTANT (inner)
1357 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
1358 || TREE_CODE (inner) == SAVE_EXPR
1359 || TREE_CODE (inner) == ERROR_MARK)
1360 return t;
1362 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
1363 it means that the size or offset of some field of an object depends on
1364 the value within another field.
1366 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1367 and some variable since it would then need to be both evaluated once and
1368 evaluated more than once. Front-ends must assure this case cannot
1369 happen by surrounding any such subexpressions in their own SAVE_EXPR
1370 and forcing evaluation at the proper time. */
1371 if (contains_placeholder_p (inner))
1372 return t;
1374 t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
1376 /* This expression might be placed ahead of a jump to ensure that the
1377 value was computed on both sides of the jump. So make sure it isn't
1378 eliminated as dead. */
1379 TREE_SIDE_EFFECTS (t) = 1;
1380 TREE_READONLY (t) = 1;
1381 return t;
1384 /* Look inside EXPR and into any simple arithmetic operations. Return
1385 the innermost non-arithmetic node. */
1387 tree
1388 skip_simple_arithmetic (tree expr)
1390 tree inner;
1392 /* We don't care about whether this can be used as an lvalue in this
1393 context. */
1394 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
1395 expr = TREE_OPERAND (expr, 0);
1397 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
1398 a constant, it will be more efficient to not make another SAVE_EXPR since
1399 it will allow better simplification and GCSE will be able to merge the
1400 computations if they actually occur. */
1401 inner = expr;
1402 while (1)
1404 if (TREE_CODE_CLASS (TREE_CODE (inner)) == '1')
1405 inner = TREE_OPERAND (inner, 0);
1406 else if (TREE_CODE_CLASS (TREE_CODE (inner)) == '2')
1408 if (TREE_CONSTANT (TREE_OPERAND (inner, 1)))
1409 inner = TREE_OPERAND (inner, 0);
1410 else if (TREE_CONSTANT (TREE_OPERAND (inner, 0)))
1411 inner = TREE_OPERAND (inner, 1);
1412 else
1413 break;
1415 else
1416 break;
1419 return inner;
1422 /* Return TRUE if EXPR is a SAVE_EXPR or wraps simple arithmetic around a
1423 SAVE_EXPR. Return FALSE otherwise. */
1425 bool
1426 saved_expr_p (tree expr)
1428 return TREE_CODE (skip_simple_arithmetic (expr)) == SAVE_EXPR;
1431 /* Arrange for an expression to be expanded multiple independent
1432 times. This is useful for cleanup actions, as the backend can
1433 expand them multiple times in different places. */
1435 tree
1436 unsave_expr (tree expr)
1438 tree t;
1440 /* If this is already protected, no sense in protecting it again. */
1441 if (TREE_CODE (expr) == UNSAVE_EXPR)
1442 return expr;
1444 t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
1445 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
1446 return t;
1449 /* Returns the index of the first non-tree operand for CODE, or the number
1450 of operands if all are trees. */
1453 first_rtl_op (enum tree_code code)
1455 switch (code)
1457 case SAVE_EXPR:
1458 return 2;
1459 case GOTO_SUBROUTINE_EXPR:
1460 case RTL_EXPR:
1461 return 0;
1462 case WITH_CLEANUP_EXPR:
1463 return 2;
1464 case METHOD_CALL_EXPR:
1465 return 3;
1466 default:
1467 return TREE_CODE_LENGTH (code);
1471 /* Return which tree structure is used by T. */
1473 enum tree_node_structure_enum
1474 tree_node_structure (tree t)
1476 enum tree_code code = TREE_CODE (t);
1478 switch (TREE_CODE_CLASS (code))
1480 case 'd': return TS_DECL;
1481 case 't': return TS_TYPE;
1482 case 'b': return TS_BLOCK;
1483 case 'r': case '<': case '1': case '2': case 'e': case 's':
1484 return TS_EXP;
1485 default: /* 'c' and 'x' */
1486 break;
1488 switch (code)
1490 /* 'c' cases. */
1491 case INTEGER_CST: return TS_INT_CST;
1492 case REAL_CST: return TS_REAL_CST;
1493 case COMPLEX_CST: return TS_COMPLEX;
1494 case VECTOR_CST: return TS_VECTOR;
1495 case STRING_CST: return TS_STRING;
1496 /* 'x' cases. */
1497 case ERROR_MARK: return TS_COMMON;
1498 case IDENTIFIER_NODE: return TS_IDENTIFIER;
1499 case TREE_LIST: return TS_LIST;
1500 case TREE_VEC: return TS_VEC;
1501 case PLACEHOLDER_EXPR: return TS_COMMON;
1503 default:
1504 abort ();
1508 /* Perform any modifications to EXPR required when it is unsaved. Does
1509 not recurse into EXPR's subtrees. */
1511 void
1512 unsave_expr_1 (tree expr)
1514 switch (TREE_CODE (expr))
1516 case SAVE_EXPR:
1517 if (! SAVE_EXPR_PERSISTENT_P (expr))
1518 SAVE_EXPR_RTL (expr) = 0;
1519 break;
1521 case TARGET_EXPR:
1522 /* Don't mess with a TARGET_EXPR that hasn't been expanded.
1523 It's OK for this to happen if it was part of a subtree that
1524 isn't immediately expanded, such as operand 2 of another
1525 TARGET_EXPR. */
1526 if (TREE_OPERAND (expr, 1))
1527 break;
1529 TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
1530 TREE_OPERAND (expr, 3) = NULL_TREE;
1531 break;
1533 case RTL_EXPR:
1534 /* I don't yet know how to emit a sequence multiple times. */
1535 if (RTL_EXPR_SEQUENCE (expr) != 0)
1536 abort ();
1537 break;
1539 default:
1540 break;
1544 /* Default lang hook for "unsave_expr_now". */
1546 tree
1547 lhd_unsave_expr_now (tree expr)
1549 enum tree_code code;
1551 /* There's nothing to do for NULL_TREE. */
1552 if (expr == 0)
1553 return expr;
1555 unsave_expr_1 (expr);
1557 code = TREE_CODE (expr);
1558 switch (TREE_CODE_CLASS (code))
1560 case 'c': /* a constant */
1561 case 't': /* a type node */
1562 case 'd': /* A decl node */
1563 case 'b': /* A block node */
1564 break;
1566 case 'x': /* miscellaneous: e.g., identifier, TREE_LIST or ERROR_MARK. */
1567 if (code == TREE_LIST)
1569 lhd_unsave_expr_now (TREE_VALUE (expr));
1570 lhd_unsave_expr_now (TREE_CHAIN (expr));
1572 break;
1574 case 'e': /* an expression */
1575 case 'r': /* a reference */
1576 case 's': /* an expression with side effects */
1577 case '<': /* a comparison expression */
1578 case '2': /* a binary arithmetic expression */
1579 case '1': /* a unary arithmetic expression */
1581 int i;
1583 for (i = first_rtl_op (code) - 1; i >= 0; i--)
1584 lhd_unsave_expr_now (TREE_OPERAND (expr, i));
1586 break;
1588 default:
1589 abort ();
1592 return expr;
1595 /* Return 0 if it is safe to evaluate EXPR multiple times,
1596 return 1 if it is safe if EXPR is unsaved afterward, or
1597 return 2 if it is completely unsafe.
1599 This assumes that CALL_EXPRs and TARGET_EXPRs are never replicated in
1600 an expression tree, so that it safe to unsave them and the surrounding
1601 context will be correct.
1603 SAVE_EXPRs basically *only* appear replicated in an expression tree,
1604 occasionally across the whole of a function. It is therefore only
1605 safe to unsave a SAVE_EXPR if you know that all occurrences appear
1606 below the UNSAVE_EXPR.
1608 RTL_EXPRs consume their rtl during evaluation. It is therefore
1609 never possible to unsave them. */
1612 unsafe_for_reeval (tree expr)
1614 int unsafeness = 0;
1615 enum tree_code code;
1616 int i, tmp, tmp2;
1617 tree exp;
1618 int first_rtl;
1620 if (expr == NULL_TREE)
1621 return 1;
1623 code = TREE_CODE (expr);
1624 first_rtl = first_rtl_op (code);
1626 switch (code)
1628 case SAVE_EXPR:
1629 case RTL_EXPR:
1630 return 2;
1632 case TREE_LIST:
1633 for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
1635 tmp = unsafe_for_reeval (TREE_VALUE (exp));
1636 unsafeness = MAX (tmp, unsafeness);
1639 return unsafeness;
1641 case CALL_EXPR:
1642 tmp2 = unsafe_for_reeval (TREE_OPERAND (expr, 0));
1643 tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
1644 return MAX (MAX (tmp, 1), tmp2);
1646 case TARGET_EXPR:
1647 unsafeness = 1;
1648 break;
1650 default:
1651 tmp = (*lang_hooks.unsafe_for_reeval) (expr);
1652 if (tmp >= 0)
1653 return tmp;
1654 break;
1657 switch (TREE_CODE_CLASS (code))
1659 case 'c': /* a constant */
1660 case 't': /* a type node */
1661 case 'x': /* something random, like an identifier or an ERROR_MARK. */
1662 case 'd': /* A decl node */
1663 case 'b': /* A block node */
1664 return 0;
1666 case 'e': /* an expression */
1667 case 'r': /* a reference */
1668 case 's': /* an expression with side effects */
1669 case '<': /* a comparison expression */
1670 case '2': /* a binary arithmetic expression */
1671 case '1': /* a unary arithmetic expression */
1672 for (i = first_rtl - 1; i >= 0; i--)
1674 tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
1675 unsafeness = MAX (tmp, unsafeness);
1678 return unsafeness;
1680 default:
1681 return 2;
1685 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
1686 or offset that depends on a field within a record. */
1688 bool
1689 contains_placeholder_p (tree exp)
1691 enum tree_code code;
1692 int result;
1694 if (!exp)
1695 return 0;
1697 /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
1698 in it since it is supplying a value for it. */
1699 code = TREE_CODE (exp);
1700 if (code == WITH_RECORD_EXPR)
1701 return 0;
1702 else if (code == PLACEHOLDER_EXPR)
1703 return 1;
1705 switch (TREE_CODE_CLASS (code))
1707 case 'r':
1708 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
1709 position computations since they will be converted into a
1710 WITH_RECORD_EXPR involving the reference, which will assume
1711 here will be valid. */
1712 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1714 case 'x':
1715 if (code == TREE_LIST)
1716 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
1717 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
1718 break;
1720 case '1':
1721 case '2': case '<':
1722 case 'e':
1723 switch (code)
1725 case COMPOUND_EXPR:
1726 /* Ignoring the first operand isn't quite right, but works best. */
1727 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1729 case RTL_EXPR:
1730 case CONSTRUCTOR:
1731 return 0;
1733 case COND_EXPR:
1734 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1735 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
1736 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
1738 case SAVE_EXPR:
1739 /* If we already know this doesn't have a placeholder, don't
1740 check again. */
1741 if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
1742 return 0;
1744 SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
1745 result = CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1746 if (result)
1747 SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
1749 return result;
1751 case CALL_EXPR:
1752 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1754 default:
1755 break;
1758 switch (TREE_CODE_LENGTH (code))
1760 case 1:
1761 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1762 case 2:
1763 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1764 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
1765 default:
1766 return 0;
1769 default:
1770 return 0;
1772 return 0;
1775 /* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
1776 This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
1777 positions. */
1779 bool
1780 type_contains_placeholder_p (tree type)
1782 /* If the size contains a placeholder or the parent type (component type in
1783 the case of arrays) type involves a placeholder, this type does. */
1784 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
1785 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
1786 || (TREE_TYPE (type) != 0
1787 && type_contains_placeholder_p (TREE_TYPE (type))))
1788 return 1;
1790 /* Now do type-specific checks. Note that the last part of the check above
1791 greatly limits what we have to do below. */
1792 switch (TREE_CODE (type))
1794 case VOID_TYPE:
1795 case COMPLEX_TYPE:
1796 case VECTOR_TYPE:
1797 case ENUMERAL_TYPE:
1798 case BOOLEAN_TYPE:
1799 case CHAR_TYPE:
1800 case POINTER_TYPE:
1801 case OFFSET_TYPE:
1802 case REFERENCE_TYPE:
1803 case METHOD_TYPE:
1804 case FILE_TYPE:
1805 case FUNCTION_TYPE:
1806 return 0;
1808 case INTEGER_TYPE:
1809 case REAL_TYPE:
1810 /* Here we just check the bounds. */
1811 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
1812 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
1814 case ARRAY_TYPE:
1815 case SET_TYPE:
1816 /* We're already checked the component type (TREE_TYPE), so just check
1817 the index type. */
1818 return type_contains_placeholder_p (TYPE_DOMAIN (type));
1820 case RECORD_TYPE:
1821 case UNION_TYPE:
1822 case QUAL_UNION_TYPE:
1824 static tree seen_types = 0;
1825 tree field;
1826 bool ret = 0;
1828 /* We have to be careful here that we don't end up in infinite
1829 recursions due to a field of a type being a pointer to that type
1830 or to a mutually-recursive type. So we store a list of record
1831 types that we've seen and see if this type is in them. To save
1832 memory, we don't use a list for just one type. Here we check
1833 whether we've seen this type before and store it if not. */
1834 if (seen_types == 0)
1835 seen_types = type;
1836 else if (TREE_CODE (seen_types) != TREE_LIST)
1838 if (seen_types == type)
1839 return 0;
1841 seen_types = tree_cons (NULL_TREE, type,
1842 build_tree_list (NULL_TREE, seen_types));
1844 else
1846 if (value_member (type, seen_types) != 0)
1847 return 0;
1849 seen_types = tree_cons (NULL_TREE, type, seen_types);
1852 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1853 if (TREE_CODE (field) == FIELD_DECL
1854 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
1855 || (TREE_CODE (type) == QUAL_UNION_TYPE
1856 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
1857 || type_contains_placeholder_p (TREE_TYPE (field))))
1859 ret = true;
1860 break;
1863 /* Now remove us from seen_types and return the result. */
1864 if (seen_types == type)
1865 seen_types = 0;
1866 else
1867 seen_types = TREE_CHAIN (seen_types);
1869 return ret;
1872 default:
1873 abort ();
1877 /* Return 1 if EXP contains any expressions that produce cleanups for an
1878 outer scope to deal with. Used by fold. */
1881 has_cleanups (tree exp)
1883 int i, nops, cmp;
1885 if (! TREE_SIDE_EFFECTS (exp))
1886 return 0;
1888 switch (TREE_CODE (exp))
1890 case TARGET_EXPR:
1891 case GOTO_SUBROUTINE_EXPR:
1892 case WITH_CLEANUP_EXPR:
1893 return 1;
1895 case CLEANUP_POINT_EXPR:
1896 return 0;
1898 case CALL_EXPR:
1899 for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
1901 cmp = has_cleanups (TREE_VALUE (exp));
1902 if (cmp)
1903 return cmp;
1905 return 0;
1907 default:
1908 break;
1911 /* This general rule works for most tree codes. All exceptions should be
1912 handled above. If this is a language-specific tree code, we can't
1913 trust what might be in the operand, so say we don't know
1914 the situation. */
1915 if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
1916 return -1;
1918 nops = first_rtl_op (TREE_CODE (exp));
1919 for (i = 0; i < nops; i++)
1920 if (TREE_OPERAND (exp, i) != 0)
1922 int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
1923 if (type == 'e' || type == '<' || type == '1' || type == '2'
1924 || type == 'r' || type == 's')
1926 cmp = has_cleanups (TREE_OPERAND (exp, i));
1927 if (cmp)
1928 return cmp;
1932 return 0;
1935 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
1936 return a tree with all occurrences of references to F in a
1937 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
1938 contains only arithmetic expressions or a CALL_EXPR with a
1939 PLACEHOLDER_EXPR occurring only in its arglist. */
1941 tree
1942 substitute_in_expr (tree exp, tree f, tree r)
1944 enum tree_code code = TREE_CODE (exp);
1945 tree op0, op1, op2;
1946 tree new;
1947 tree inner;
1949 switch (TREE_CODE_CLASS (code))
1951 case 'c':
1952 case 'd':
1953 return exp;
1955 case 'x':
1956 if (code == PLACEHOLDER_EXPR)
1957 return exp;
1958 else if (code == TREE_LIST)
1960 op0 = (TREE_CHAIN (exp) == 0
1961 ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
1962 op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
1963 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
1964 return exp;
1966 return tree_cons (TREE_PURPOSE (exp), op1, op0);
1969 abort ();
1971 case '1':
1972 case '2':
1973 case '<':
1974 case 'e':
1975 switch (TREE_CODE_LENGTH (code))
1977 case 1:
1978 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
1979 if (op0 == TREE_OPERAND (exp, 0))
1980 return exp;
1982 if (code == NON_LVALUE_EXPR)
1983 return op0;
1985 new = fold (build1 (code, TREE_TYPE (exp), op0));
1986 break;
1988 case 2:
1989 /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
1990 could, but we don't support it. */
1991 if (code == RTL_EXPR)
1992 return exp;
1993 else if (code == CONSTRUCTOR)
1994 abort ();
1996 op0 = TREE_OPERAND (exp, 0);
1997 op1 = TREE_OPERAND (exp, 1);
1998 if (CONTAINS_PLACEHOLDER_P (op0))
1999 op0 = substitute_in_expr (op0, f, r);
2000 if (CONTAINS_PLACEHOLDER_P (op1))
2001 op1 = substitute_in_expr (op1, f, r);
2003 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2004 return exp;
2006 new = fold (build (code, TREE_TYPE (exp), op0, op1));
2007 break;
2009 case 3:
2010 /* It cannot be that anything inside a SAVE_EXPR contains a
2011 PLACEHOLDER_EXPR. */
2012 if (code == SAVE_EXPR)
2013 return exp;
2015 else if (code == CALL_EXPR)
2017 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2018 if (op1 == TREE_OPERAND (exp, 1))
2019 return exp;
2021 return build (code, TREE_TYPE (exp),
2022 TREE_OPERAND (exp, 0), op1, NULL_TREE);
2025 else if (code != COND_EXPR)
2026 abort ();
2028 op0 = TREE_OPERAND (exp, 0);
2029 op1 = TREE_OPERAND (exp, 1);
2030 op2 = TREE_OPERAND (exp, 2);
2032 if (CONTAINS_PLACEHOLDER_P (op0))
2033 op0 = substitute_in_expr (op0, f, r);
2034 if (CONTAINS_PLACEHOLDER_P (op1))
2035 op1 = substitute_in_expr (op1, f, r);
2036 if (CONTAINS_PLACEHOLDER_P (op2))
2037 op2 = substitute_in_expr (op2, f, r);
2039 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2040 && op2 == TREE_OPERAND (exp, 2))
2041 return exp;
2043 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2044 break;
2046 default:
2047 abort ();
2050 break;
2052 case 'r':
2053 switch (code)
2055 case COMPONENT_REF:
2056 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2057 and it is the right field, replace it with R. */
2058 for (inner = TREE_OPERAND (exp, 0);
2059 TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2060 inner = TREE_OPERAND (inner, 0))
2062 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2063 && TREE_OPERAND (exp, 1) == f)
2064 return r;
2066 /* If this expression hasn't been completed let, leave it
2067 alone. */
2068 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2069 && TREE_TYPE (inner) == 0)
2070 return exp;
2072 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2073 if (op0 == TREE_OPERAND (exp, 0))
2074 return exp;
2076 new = fold (build (code, TREE_TYPE (exp), op0,
2077 TREE_OPERAND (exp, 1)));
2078 break;
2080 case BIT_FIELD_REF:
2081 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2082 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2083 op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2084 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2085 && op2 == TREE_OPERAND (exp, 2))
2086 return exp;
2088 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2089 break;
2091 case INDIRECT_REF:
2092 case BUFFER_REF:
2093 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2094 if (op0 == TREE_OPERAND (exp, 0))
2095 return exp;
2097 new = fold (build1 (code, TREE_TYPE (exp), op0));
2098 break;
2100 default:
2101 abort ();
2103 break;
2105 default:
2106 abort ();
2109 TREE_READONLY (new) = TREE_READONLY (exp);
2110 return new;
2113 /* Stabilize a reference so that we can use it any number of times
2114 without causing its operands to be evaluated more than once.
2115 Returns the stabilized reference. This works by means of save_expr,
2116 so see the caveats in the comments about save_expr.
2118 Also allows conversion expressions whose operands are references.
2119 Any other kind of expression is returned unchanged. */
2121 tree
2122 stabilize_reference (tree ref)
2124 tree result;
2125 enum tree_code code = TREE_CODE (ref);
2127 switch (code)
2129 case VAR_DECL:
2130 case PARM_DECL:
2131 case RESULT_DECL:
2132 /* No action is needed in this case. */
2133 return ref;
2135 case NOP_EXPR:
2136 case CONVERT_EXPR:
2137 case FLOAT_EXPR:
2138 case FIX_TRUNC_EXPR:
2139 case FIX_FLOOR_EXPR:
2140 case FIX_ROUND_EXPR:
2141 case FIX_CEIL_EXPR:
2142 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2143 break;
2145 case INDIRECT_REF:
2146 result = build_nt (INDIRECT_REF,
2147 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2148 break;
2150 case COMPONENT_REF:
2151 result = build_nt (COMPONENT_REF,
2152 stabilize_reference (TREE_OPERAND (ref, 0)),
2153 TREE_OPERAND (ref, 1));
2154 break;
2156 case BIT_FIELD_REF:
2157 result = build_nt (BIT_FIELD_REF,
2158 stabilize_reference (TREE_OPERAND (ref, 0)),
2159 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2160 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2161 break;
2163 case ARRAY_REF:
2164 result = build_nt (ARRAY_REF,
2165 stabilize_reference (TREE_OPERAND (ref, 0)),
2166 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2167 break;
2169 case ARRAY_RANGE_REF:
2170 result = build_nt (ARRAY_RANGE_REF,
2171 stabilize_reference (TREE_OPERAND (ref, 0)),
2172 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2173 break;
2175 case COMPOUND_EXPR:
2176 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2177 it wouldn't be ignored. This matters when dealing with
2178 volatiles. */
2179 return stabilize_reference_1 (ref);
2181 case RTL_EXPR:
2182 result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2183 save_expr (build1 (ADDR_EXPR,
2184 build_pointer_type (TREE_TYPE (ref)),
2185 ref)));
2186 break;
2188 /* If arg isn't a kind of lvalue we recognize, make no change.
2189 Caller should recognize the error for an invalid lvalue. */
2190 default:
2191 return ref;
2193 case ERROR_MARK:
2194 return error_mark_node;
2197 TREE_TYPE (result) = TREE_TYPE (ref);
2198 TREE_READONLY (result) = TREE_READONLY (ref);
2199 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2200 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2202 return result;
2205 /* Subroutine of stabilize_reference; this is called for subtrees of
2206 references. Any expression with side-effects must be put in a SAVE_EXPR
2207 to ensure that it is only evaluated once.
2209 We don't put SAVE_EXPR nodes around everything, because assigning very
2210 simple expressions to temporaries causes us to miss good opportunities
2211 for optimizations. Among other things, the opportunity to fold in the
2212 addition of a constant into an addressing mode often gets lost, e.g.
2213 "y[i+1] += x;". In general, we take the approach that we should not make
2214 an assignment unless we are forced into it - i.e., that any non-side effect
2215 operator should be allowed, and that cse should take care of coalescing
2216 multiple utterances of the same expression should that prove fruitful. */
2218 tree
2219 stabilize_reference_1 (tree e)
2221 tree result;
2222 enum tree_code code = TREE_CODE (e);
2224 /* We cannot ignore const expressions because it might be a reference
2225 to a const array but whose index contains side-effects. But we can
2226 ignore things that are actual constant or that already have been
2227 handled by this function. */
2229 if (TREE_CONSTANT (e) || code == SAVE_EXPR)
2230 return e;
2232 switch (TREE_CODE_CLASS (code))
2234 case 'x':
2235 case 't':
2236 case 'd':
2237 case 'b':
2238 case '<':
2239 case 's':
2240 case 'e':
2241 case 'r':
2242 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2243 so that it will only be evaluated once. */
2244 /* The reference (r) and comparison (<) classes could be handled as
2245 below, but it is generally faster to only evaluate them once. */
2246 if (TREE_SIDE_EFFECTS (e))
2247 return save_expr (e);
2248 return e;
2250 case 'c':
2251 /* Constants need no processing. In fact, we should never reach
2252 here. */
2253 return e;
2255 case '2':
2256 /* Division is slow and tends to be compiled with jumps,
2257 especially the division by powers of 2 that is often
2258 found inside of an array reference. So do it just once. */
2259 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2260 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2261 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2262 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2263 return save_expr (e);
2264 /* Recursively stabilize each operand. */
2265 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2266 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2267 break;
2269 case '1':
2270 /* Recursively stabilize each operand. */
2271 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2272 break;
2274 default:
2275 abort ();
2278 TREE_TYPE (result) = TREE_TYPE (e);
2279 TREE_READONLY (result) = TREE_READONLY (e);
2280 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2281 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2283 return result;
2286 /* Low-level constructors for expressions. */
2288 /* Build an expression of code CODE, data type TYPE,
2289 and operands as specified by the arguments ARG1 and following arguments.
2290 Expressions and reference nodes can be created this way.
2291 Constants, decls, types and misc nodes cannot be. */
2293 tree
2294 build (enum tree_code code, tree tt, ...)
2296 tree t;
2297 int length;
2298 int i;
2299 int fro;
2300 int constant;
2301 va_list p;
2303 va_start (p, tt);
2305 t = make_node (code);
2306 length = TREE_CODE_LENGTH (code);
2307 TREE_TYPE (t) = tt;
2309 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2310 result based on those same flags for the arguments. But if the
2311 arguments aren't really even `tree' expressions, we shouldn't be trying
2312 to do this. */
2313 fro = first_rtl_op (code);
2315 /* Expressions without side effects may be constant if their
2316 arguments are as well. */
2317 constant = (TREE_CODE_CLASS (code) == '<'
2318 || TREE_CODE_CLASS (code) == '1'
2319 || TREE_CODE_CLASS (code) == '2'
2320 || TREE_CODE_CLASS (code) == 'c');
2322 if (length == 2)
2324 /* This is equivalent to the loop below, but faster. */
2325 tree arg0 = va_arg (p, tree);
2326 tree arg1 = va_arg (p, tree);
2328 TREE_OPERAND (t, 0) = arg0;
2329 TREE_OPERAND (t, 1) = arg1;
2330 TREE_READONLY (t) = 1;
2331 if (arg0 && fro > 0)
2333 if (TREE_SIDE_EFFECTS (arg0))
2334 TREE_SIDE_EFFECTS (t) = 1;
2335 if (!TREE_READONLY (arg0))
2336 TREE_READONLY (t) = 0;
2337 if (!TREE_CONSTANT (arg0))
2338 constant = 0;
2341 if (arg1 && fro > 1)
2343 if (TREE_SIDE_EFFECTS (arg1))
2344 TREE_SIDE_EFFECTS (t) = 1;
2345 if (!TREE_READONLY (arg1))
2346 TREE_READONLY (t) = 0;
2347 if (!TREE_CONSTANT (arg1))
2348 constant = 0;
2351 else if (length == 1)
2353 tree arg0 = va_arg (p, tree);
2355 /* The only one-operand cases we handle here are those with side-effects.
2356 Others are handled with build1. So don't bother checked if the
2357 arg has side-effects since we'll already have set it.
2359 ??? This really should use build1 too. */
2360 if (TREE_CODE_CLASS (code) != 's')
2361 abort ();
2362 TREE_OPERAND (t, 0) = arg0;
2364 else
2366 for (i = 0; i < length; i++)
2368 tree operand = va_arg (p, tree);
2370 TREE_OPERAND (t, i) = operand;
2371 if (operand && fro > i)
2373 if (TREE_SIDE_EFFECTS (operand))
2374 TREE_SIDE_EFFECTS (t) = 1;
2375 if (!TREE_CONSTANT (operand))
2376 constant = 0;
2380 va_end (p);
2382 TREE_CONSTANT (t) = constant;
2383 return t;
2386 /* Same as above, but only builds for unary operators.
2387 Saves lions share of calls to `build'; cuts down use
2388 of varargs, which is expensive for RISC machines. */
2390 tree
2391 build1 (enum tree_code code, tree type, tree node)
2393 int length = sizeof (struct tree_exp);
2394 #ifdef GATHER_STATISTICS
2395 tree_node_kind kind;
2396 #endif
2397 tree t;
2399 #ifdef GATHER_STATISTICS
2400 switch (TREE_CODE_CLASS (code))
2402 case 's': /* an expression with side effects */
2403 kind = s_kind;
2404 break;
2405 case 'r': /* a reference */
2406 kind = r_kind;
2407 break;
2408 default:
2409 kind = e_kind;
2410 break;
2413 tree_node_counts[(int) kind]++;
2414 tree_node_sizes[(int) kind] += length;
2415 #endif
2417 #ifdef ENABLE_CHECKING
2418 if (TREE_CODE_CLASS (code) == '2'
2419 || TREE_CODE_CLASS (code) == '<'
2420 || TREE_CODE_LENGTH (code) != 1)
2421 abort ();
2422 #endif /* ENABLE_CHECKING */
2424 t = ggc_alloc_tree (length);
2426 memset (t, 0, sizeof (struct tree_common));
2428 TREE_SET_CODE (t, code);
2430 TREE_TYPE (t) = type;
2431 TREE_COMPLEXITY (t) = 0;
2432 TREE_OPERAND (t, 0) = node;
2433 if (node && first_rtl_op (code) != 0)
2435 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2436 TREE_READONLY (t) = TREE_READONLY (node);
2439 if (TREE_CODE_CLASS (code) == 's')
2440 TREE_SIDE_EFFECTS (t) = 1;
2441 else switch (code)
2443 case INIT_EXPR:
2444 case MODIFY_EXPR:
2445 case VA_ARG_EXPR:
2446 case RTL_EXPR:
2447 case PREDECREMENT_EXPR:
2448 case PREINCREMENT_EXPR:
2449 case POSTDECREMENT_EXPR:
2450 case POSTINCREMENT_EXPR:
2451 /* All of these have side-effects, no matter what their
2452 operands are. */
2453 TREE_SIDE_EFFECTS (t) = 1;
2454 TREE_READONLY (t) = 0;
2455 break;
2457 case INDIRECT_REF:
2458 /* Whether a dereference is readonly has nothing to do with whether
2459 its operand is readonly. */
2460 TREE_READONLY (t) = 0;
2461 break;
2463 default:
2464 if (TREE_CODE_CLASS (code) == '1' && node && TREE_CONSTANT (node))
2465 TREE_CONSTANT (t) = 1;
2466 break;
2469 return t;
2472 /* Similar except don't specify the TREE_TYPE
2473 and leave the TREE_SIDE_EFFECTS as 0.
2474 It is permissible for arguments to be null,
2475 or even garbage if their values do not matter. */
2477 tree
2478 build_nt (enum tree_code code, ...)
2480 tree t;
2481 int length;
2482 int i;
2483 va_list p;
2485 va_start (p, code);
2487 t = make_node (code);
2488 length = TREE_CODE_LENGTH (code);
2490 for (i = 0; i < length; i++)
2491 TREE_OPERAND (t, i) = va_arg (p, tree);
2493 va_end (p);
2494 return t;
2497 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2498 We do NOT enter this node in any sort of symbol table.
2500 layout_decl is used to set up the decl's storage layout.
2501 Other slots are initialized to 0 or null pointers. */
2503 tree
2504 build_decl (enum tree_code code, tree name, tree type)
2506 tree t;
2508 t = make_node (code);
2510 /* if (type == error_mark_node)
2511 type = integer_type_node; */
2512 /* That is not done, deliberately, so that having error_mark_node
2513 as the type can suppress useless errors in the use of this variable. */
2515 DECL_NAME (t) = name;
2516 TREE_TYPE (t) = type;
2518 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2519 layout_decl (t, 0);
2520 else if (code == FUNCTION_DECL)
2521 DECL_MODE (t) = FUNCTION_MODE;
2523 return t;
2526 /* BLOCK nodes are used to represent the structure of binding contours
2527 and declarations, once those contours have been exited and their contents
2528 compiled. This information is used for outputting debugging info. */
2530 tree
2531 build_block (tree vars, tree tags ATTRIBUTE_UNUSED, tree subblocks,
2532 tree supercontext, tree chain)
2534 tree block = make_node (BLOCK);
2536 BLOCK_VARS (block) = vars;
2537 BLOCK_SUBBLOCKS (block) = subblocks;
2538 BLOCK_SUPERCONTEXT (block) = supercontext;
2539 BLOCK_CHAIN (block) = chain;
2540 return block;
2543 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
2544 location where an expression or an identifier were encountered. It
2545 is necessary for languages where the frontend parser will handle
2546 recursively more than one file (Java is one of them). */
2548 tree
2549 build_expr_wfl (tree node, const char *file, int line, int col)
2551 static const char *last_file = 0;
2552 static tree last_filenode = NULL_TREE;
2553 tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
2555 EXPR_WFL_NODE (wfl) = node;
2556 EXPR_WFL_SET_LINECOL (wfl, line, col);
2557 if (file != last_file)
2559 last_file = file;
2560 last_filenode = file ? get_identifier (file) : NULL_TREE;
2563 EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
2564 if (node)
2566 TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
2567 TREE_TYPE (wfl) = TREE_TYPE (node);
2570 return wfl;
2573 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
2574 is ATTRIBUTE. */
2576 tree
2577 build_decl_attribute_variant (tree ddecl, tree attribute)
2579 DECL_ATTRIBUTES (ddecl) = attribute;
2580 return ddecl;
2583 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2584 is ATTRIBUTE.
2586 Record such modified types already made so we don't make duplicates. */
2588 tree
2589 build_type_attribute_variant (tree ttype, tree attribute)
2591 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
2593 unsigned int hashcode;
2594 tree ntype;
2596 ntype = copy_node (ttype);
2598 TYPE_POINTER_TO (ntype) = 0;
2599 TYPE_REFERENCE_TO (ntype) = 0;
2600 TYPE_ATTRIBUTES (ntype) = attribute;
2602 /* Create a new main variant of TYPE. */
2603 TYPE_MAIN_VARIANT (ntype) = ntype;
2604 TYPE_NEXT_VARIANT (ntype) = 0;
2605 set_type_quals (ntype, TYPE_UNQUALIFIED);
2607 hashcode = (TYPE_HASH (TREE_CODE (ntype))
2608 + TYPE_HASH (TREE_TYPE (ntype))
2609 + attribute_hash_list (attribute));
2611 switch (TREE_CODE (ntype))
2613 case FUNCTION_TYPE:
2614 hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
2615 break;
2616 case ARRAY_TYPE:
2617 hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
2618 break;
2619 case INTEGER_TYPE:
2620 hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
2621 break;
2622 case REAL_TYPE:
2623 hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
2624 break;
2625 default:
2626 break;
2629 ntype = type_hash_canon (hashcode, ntype);
2630 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
2633 return ttype;
2636 /* Return nonzero if IDENT is a valid name for attribute ATTR,
2637 or zero if not.
2639 We try both `text' and `__text__', ATTR may be either one. */
2640 /* ??? It might be a reasonable simplification to require ATTR to be only
2641 `text'. One might then also require attribute lists to be stored in
2642 their canonicalized form. */
2645 is_attribute_p (const char *attr, tree ident)
2647 int ident_len, attr_len;
2648 const char *p;
2650 if (TREE_CODE (ident) != IDENTIFIER_NODE)
2651 return 0;
2653 if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
2654 return 1;
2656 p = IDENTIFIER_POINTER (ident);
2657 ident_len = strlen (p);
2658 attr_len = strlen (attr);
2660 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
2661 if (attr[0] == '_')
2663 if (attr[1] != '_'
2664 || attr[attr_len - 2] != '_'
2665 || attr[attr_len - 1] != '_')
2666 abort ();
2667 if (ident_len == attr_len - 4
2668 && strncmp (attr + 2, p, attr_len - 4) == 0)
2669 return 1;
2671 else
2673 if (ident_len == attr_len + 4
2674 && p[0] == '_' && p[1] == '_'
2675 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
2676 && strncmp (attr, p + 2, attr_len) == 0)
2677 return 1;
2680 return 0;
2683 /* Given an attribute name and a list of attributes, return a pointer to the
2684 attribute's list element if the attribute is part of the list, or NULL_TREE
2685 if not found. If the attribute appears more than once, this only
2686 returns the first occurrence; the TREE_CHAIN of the return value should
2687 be passed back in if further occurrences are wanted. */
2689 tree
2690 lookup_attribute (const char *attr_name, tree list)
2692 tree l;
2694 for (l = list; l; l = TREE_CHAIN (l))
2696 if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
2697 abort ();
2698 if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
2699 return l;
2702 return NULL_TREE;
2705 /* Return an attribute list that is the union of a1 and a2. */
2707 tree
2708 merge_attributes (tree a1, tree a2)
2710 tree attributes;
2712 /* Either one unset? Take the set one. */
2714 if ((attributes = a1) == 0)
2715 attributes = a2;
2717 /* One that completely contains the other? Take it. */
2719 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
2721 if (attribute_list_contained (a2, a1))
2722 attributes = a2;
2723 else
2725 /* Pick the longest list, and hang on the other list. */
2727 if (list_length (a1) < list_length (a2))
2728 attributes = a2, a2 = a1;
2730 for (; a2 != 0; a2 = TREE_CHAIN (a2))
2732 tree a;
2733 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2734 attributes);
2735 a != NULL_TREE;
2736 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2737 TREE_CHAIN (a)))
2739 if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
2740 break;
2742 if (a == NULL_TREE)
2744 a1 = copy_node (a2);
2745 TREE_CHAIN (a1) = attributes;
2746 attributes = a1;
2751 return attributes;
2754 /* Given types T1 and T2, merge their attributes and return
2755 the result. */
2757 tree
2758 merge_type_attributes (tree t1, tree t2)
2760 return merge_attributes (TYPE_ATTRIBUTES (t1),
2761 TYPE_ATTRIBUTES (t2));
2764 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
2765 the result. */
2767 tree
2768 merge_decl_attributes (tree olddecl, tree newdecl)
2770 return merge_attributes (DECL_ATTRIBUTES (olddecl),
2771 DECL_ATTRIBUTES (newdecl));
2774 #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
2776 /* Specialization of merge_decl_attributes for various Windows targets.
2778 This handles the following situation:
2780 __declspec (dllimport) int foo;
2781 int foo;
2783 The second instance of `foo' nullifies the dllimport. */
2785 tree
2786 merge_dllimport_decl_attributes (tree old, tree new)
2788 tree a;
2789 int delete_dllimport_p;
2791 old = DECL_ATTRIBUTES (old);
2792 new = DECL_ATTRIBUTES (new);
2794 /* What we need to do here is remove from `old' dllimport if it doesn't
2795 appear in `new'. dllimport behaves like extern: if a declaration is
2796 marked dllimport and a definition appears later, then the object
2797 is not dllimport'd. */
2798 if (lookup_attribute ("dllimport", old) != NULL_TREE
2799 && lookup_attribute ("dllimport", new) == NULL_TREE)
2800 delete_dllimport_p = 1;
2801 else
2802 delete_dllimport_p = 0;
2804 a = merge_attributes (old, new);
2806 if (delete_dllimport_p)
2808 tree prev, t;
2810 /* Scan the list for dllimport and delete it. */
2811 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
2813 if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
2815 if (prev == NULL_TREE)
2816 a = TREE_CHAIN (a);
2817 else
2818 TREE_CHAIN (prev) = TREE_CHAIN (t);
2819 break;
2824 return a;
2827 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
2829 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
2830 of the various TYPE_QUAL values. */
2832 static void
2833 set_type_quals (tree type, int type_quals)
2835 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
2836 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
2837 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
2840 /* Return a version of the TYPE, qualified as indicated by the
2841 TYPE_QUALS, if one exists. If no qualified version exists yet,
2842 return NULL_TREE. */
2844 tree
2845 get_qualified_type (tree type, int type_quals)
2847 tree t;
2849 /* Search the chain of variants to see if there is already one there just
2850 like the one we need to have. If so, use that existing one. We must
2851 preserve the TYPE_NAME, since there is code that depends on this. */
2852 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2853 if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type)
2854 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
2855 return t;
2857 return NULL_TREE;
2860 /* Like get_qualified_type, but creates the type if it does not
2861 exist. This function never returns NULL_TREE. */
2863 tree
2864 build_qualified_type (tree type, int type_quals)
2866 tree t;
2868 /* See if we already have the appropriate qualified variant. */
2869 t = get_qualified_type (type, type_quals);
2871 /* If not, build it. */
2872 if (!t)
2874 t = build_type_copy (type);
2875 set_type_quals (t, type_quals);
2878 return t;
2881 /* Create a new variant of TYPE, equivalent but distinct.
2882 This is so the caller can modify it. */
2884 tree
2885 build_type_copy (tree type)
2887 tree t, m = TYPE_MAIN_VARIANT (type);
2889 t = copy_node (type);
2891 TYPE_POINTER_TO (t) = 0;
2892 TYPE_REFERENCE_TO (t) = 0;
2894 /* Add this type to the chain of variants of TYPE. */
2895 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
2896 TYPE_NEXT_VARIANT (m) = t;
2898 return t;
2901 /* Hashing of types so that we don't make duplicates.
2902 The entry point is `type_hash_canon'. */
2904 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
2905 with types in the TREE_VALUE slots), by adding the hash codes
2906 of the individual types. */
2908 unsigned int
2909 type_hash_list (tree list)
2911 unsigned int hashcode;
2912 tree tail;
2914 for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
2915 hashcode += TYPE_HASH (TREE_VALUE (tail));
2917 return hashcode;
2920 /* These are the Hashtable callback functions. */
2922 /* Returns true if the types are equal. */
2924 static int
2925 type_hash_eq (const void *va, const void *vb)
2927 const struct type_hash *a = va, *b = vb;
2928 if (a->hash == b->hash
2929 && TREE_CODE (a->type) == TREE_CODE (b->type)
2930 && TREE_TYPE (a->type) == TREE_TYPE (b->type)
2931 && attribute_list_equal (TYPE_ATTRIBUTES (a->type),
2932 TYPE_ATTRIBUTES (b->type))
2933 && TYPE_ALIGN (a->type) == TYPE_ALIGN (b->type)
2934 && (TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
2935 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
2936 TYPE_MAX_VALUE (b->type)))
2937 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
2938 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
2939 TYPE_MIN_VALUE (b->type)))
2940 /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE. */
2941 && (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
2942 || (TYPE_DOMAIN (a->type)
2943 && TREE_CODE (TYPE_DOMAIN (a->type)) == TREE_LIST
2944 && TYPE_DOMAIN (b->type)
2945 && TREE_CODE (TYPE_DOMAIN (b->type)) == TREE_LIST
2946 && type_list_equal (TYPE_DOMAIN (a->type),
2947 TYPE_DOMAIN (b->type)))))
2948 return 1;
2949 return 0;
2952 /* Return the cached hash value. */
2954 static hashval_t
2955 type_hash_hash (const void *item)
2957 return ((const struct type_hash *) item)->hash;
2960 /* Look in the type hash table for a type isomorphic to TYPE.
2961 If one is found, return it. Otherwise return 0. */
2963 tree
2964 type_hash_lookup (unsigned int hashcode, tree type)
2966 struct type_hash *h, in;
2968 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
2969 must call that routine before comparing TYPE_ALIGNs. */
2970 layout_type (type);
2972 in.hash = hashcode;
2973 in.type = type;
2975 h = htab_find_with_hash (type_hash_table, &in, hashcode);
2976 if (h)
2977 return h->type;
2978 return NULL_TREE;
2981 /* Add an entry to the type-hash-table
2982 for a type TYPE whose hash code is HASHCODE. */
2984 void
2985 type_hash_add (unsigned int hashcode, tree type)
2987 struct type_hash *h;
2988 void **loc;
2990 h = (struct type_hash *) ggc_alloc (sizeof (struct type_hash));
2991 h->hash = hashcode;
2992 h->type = type;
2993 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
2994 *(struct type_hash **) loc = h;
2997 /* Given TYPE, and HASHCODE its hash code, return the canonical
2998 object for an identical type if one already exists.
2999 Otherwise, return TYPE, and record it as the canonical object
3000 if it is a permanent object.
3002 To use this function, first create a type of the sort you want.
3003 Then compute its hash code from the fields of the type that
3004 make it different from other similar types.
3005 Then call this function and use the value.
3006 This function frees the type you pass in if it is a duplicate. */
3008 /* Set to 1 to debug without canonicalization. Never set by program. */
3009 int debug_no_type_hash = 0;
3011 tree
3012 type_hash_canon (unsigned int hashcode, tree type)
3014 tree t1;
3016 if (debug_no_type_hash)
3017 return type;
3019 /* See if the type is in the hash table already. If so, return it.
3020 Otherwise, add the type. */
3021 t1 = type_hash_lookup (hashcode, type);
3022 if (t1 != 0)
3024 #ifdef GATHER_STATISTICS
3025 tree_node_counts[(int) t_kind]--;
3026 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
3027 #endif
3028 return t1;
3030 else
3032 type_hash_add (hashcode, type);
3033 return type;
3037 /* See if the data pointed to by the type hash table is marked. We consider
3038 it marked if the type is marked or if a debug type number or symbol
3039 table entry has been made for the type. This reduces the amount of
3040 debugging output and eliminates that dependency of the debug output on
3041 the number of garbage collections. */
3043 static int
3044 type_hash_marked_p (const void *p)
3046 tree type = ((struct type_hash *) p)->type;
3048 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
3051 static void
3052 print_type_hash_statistics (void)
3054 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3055 (long) htab_size (type_hash_table),
3056 (long) htab_elements (type_hash_table),
3057 htab_collisions (type_hash_table));
3060 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3061 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3062 by adding the hash codes of the individual attributes. */
3064 unsigned int
3065 attribute_hash_list (tree list)
3067 unsigned int hashcode;
3068 tree tail;
3070 for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3071 /* ??? Do we want to add in TREE_VALUE too? */
3072 hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3073 return hashcode;
3076 /* Given two lists of attributes, return true if list l2 is
3077 equivalent to l1. */
3080 attribute_list_equal (tree l1, tree l2)
3082 return attribute_list_contained (l1, l2)
3083 && attribute_list_contained (l2, l1);
3086 /* Given two lists of attributes, return true if list L2 is
3087 completely contained within L1. */
3088 /* ??? This would be faster if attribute names were stored in a canonicalized
3089 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3090 must be used to show these elements are equivalent (which they are). */
3091 /* ??? It's not clear that attributes with arguments will always be handled
3092 correctly. */
3095 attribute_list_contained (tree l1, tree l2)
3097 tree t1, t2;
3099 /* First check the obvious, maybe the lists are identical. */
3100 if (l1 == l2)
3101 return 1;
3103 /* Maybe the lists are similar. */
3104 for (t1 = l1, t2 = l2;
3105 t1 != 0 && t2 != 0
3106 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3107 && TREE_VALUE (t1) == TREE_VALUE (t2);
3108 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3110 /* Maybe the lists are equal. */
3111 if (t1 == 0 && t2 == 0)
3112 return 1;
3114 for (; t2 != 0; t2 = TREE_CHAIN (t2))
3116 tree attr;
3117 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3118 attr != NULL_TREE;
3119 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3120 TREE_CHAIN (attr)))
3122 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3123 break;
3126 if (attr == 0)
3127 return 0;
3129 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3130 return 0;
3133 return 1;
3136 /* Given two lists of types
3137 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3138 return 1 if the lists contain the same types in the same order.
3139 Also, the TREE_PURPOSEs must match. */
3142 type_list_equal (tree l1, tree l2)
3144 tree t1, t2;
3146 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3147 if (TREE_VALUE (t1) != TREE_VALUE (t2)
3148 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3149 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3150 && (TREE_TYPE (TREE_PURPOSE (t1))
3151 == TREE_TYPE (TREE_PURPOSE (t2))))))
3152 return 0;
3154 return t1 == t2;
3157 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3158 given by TYPE. If the argument list accepts variable arguments,
3159 then this function counts only the ordinary arguments. */
3162 type_num_arguments (tree type)
3164 int i = 0;
3165 tree t;
3167 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3168 /* If the function does not take a variable number of arguments,
3169 the last element in the list will have type `void'. */
3170 if (VOID_TYPE_P (TREE_VALUE (t)))
3171 break;
3172 else
3173 ++i;
3175 return i;
3178 /* Nonzero if integer constants T1 and T2
3179 represent the same constant value. */
3182 tree_int_cst_equal (tree t1, tree t2)
3184 if (t1 == t2)
3185 return 1;
3187 if (t1 == 0 || t2 == 0)
3188 return 0;
3190 if (TREE_CODE (t1) == INTEGER_CST
3191 && TREE_CODE (t2) == INTEGER_CST
3192 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3193 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3194 return 1;
3196 return 0;
3199 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3200 The precise way of comparison depends on their data type. */
3203 tree_int_cst_lt (tree t1, tree t2)
3205 if (t1 == t2)
3206 return 0;
3208 if (TREE_UNSIGNED (TREE_TYPE (t1)) != TREE_UNSIGNED (TREE_TYPE (t2)))
3210 int t1_sgn = tree_int_cst_sgn (t1);
3211 int t2_sgn = tree_int_cst_sgn (t2);
3213 if (t1_sgn < t2_sgn)
3214 return 1;
3215 else if (t1_sgn > t2_sgn)
3216 return 0;
3217 /* Otherwise, both are non-negative, so we compare them as
3218 unsigned just in case one of them would overflow a signed
3219 type. */
3221 else if (! TREE_UNSIGNED (TREE_TYPE (t1)))
3222 return INT_CST_LT (t1, t2);
3224 return INT_CST_LT_UNSIGNED (t1, t2);
3227 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
3230 tree_int_cst_compare (tree t1, tree t2)
3232 if (tree_int_cst_lt (t1, t2))
3233 return -1;
3234 else if (tree_int_cst_lt (t2, t1))
3235 return 1;
3236 else
3237 return 0;
3240 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
3241 the host. If POS is zero, the value can be represented in a single
3242 HOST_WIDE_INT. If POS is nonzero, the value must be positive and can
3243 be represented in a single unsigned HOST_WIDE_INT. */
3246 host_integerp (tree t, int pos)
3248 return (TREE_CODE (t) == INTEGER_CST
3249 && ! TREE_OVERFLOW (t)
3250 && ((TREE_INT_CST_HIGH (t) == 0
3251 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
3252 || (! pos && TREE_INT_CST_HIGH (t) == -1
3253 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
3254 && ! TREE_UNSIGNED (TREE_TYPE (t)))
3255 || (pos && TREE_INT_CST_HIGH (t) == 0)));
3258 /* Return the HOST_WIDE_INT least significant bits of T if it is an
3259 INTEGER_CST and there is no overflow. POS is nonzero if the result must
3260 be positive. Abort if we cannot satisfy the above conditions. */
3262 HOST_WIDE_INT
3263 tree_low_cst (tree t, int pos)
3265 if (host_integerp (t, pos))
3266 return TREE_INT_CST_LOW (t);
3267 else
3268 abort ();
3271 /* Return the most significant bit of the integer constant T. */
3274 tree_int_cst_msb (tree t)
3276 int prec;
3277 HOST_WIDE_INT h;
3278 unsigned HOST_WIDE_INT l;
3280 /* Note that using TYPE_PRECISION here is wrong. We care about the
3281 actual bits, not the (arbitrary) range of the type. */
3282 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
3283 rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
3284 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
3285 return (l & 1) == 1;
3288 /* Return an indication of the sign of the integer constant T.
3289 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3290 Note that -1 will never be returned it T's type is unsigned. */
3293 tree_int_cst_sgn (tree t)
3295 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3296 return 0;
3297 else if (TREE_UNSIGNED (TREE_TYPE (t)))
3298 return 1;
3299 else if (TREE_INT_CST_HIGH (t) < 0)
3300 return -1;
3301 else
3302 return 1;
3305 /* Compare two constructor-element-type constants. Return 1 if the lists
3306 are known to be equal; otherwise return 0. */
3309 simple_cst_list_equal (tree l1, tree l2)
3311 while (l1 != NULL_TREE && l2 != NULL_TREE)
3313 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
3314 return 0;
3316 l1 = TREE_CHAIN (l1);
3317 l2 = TREE_CHAIN (l2);
3320 return l1 == l2;
3323 /* Return truthvalue of whether T1 is the same tree structure as T2.
3324 Return 1 if they are the same.
3325 Return 0 if they are understandably different.
3326 Return -1 if either contains tree structure not understood by
3327 this function. */
3330 simple_cst_equal (tree t1, tree t2)
3332 enum tree_code code1, code2;
3333 int cmp;
3334 int i;
3336 if (t1 == t2)
3337 return 1;
3338 if (t1 == 0 || t2 == 0)
3339 return 0;
3341 code1 = TREE_CODE (t1);
3342 code2 = TREE_CODE (t2);
3344 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
3346 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3347 || code2 == NON_LVALUE_EXPR)
3348 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3349 else
3350 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3353 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3354 || code2 == NON_LVALUE_EXPR)
3355 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3357 if (code1 != code2)
3358 return 0;
3360 switch (code1)
3362 case INTEGER_CST:
3363 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3364 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
3366 case REAL_CST:
3367 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
3369 case STRING_CST:
3370 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3371 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3372 TREE_STRING_LENGTH (t1)));
3374 case CONSTRUCTOR:
3375 if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
3376 return 1;
3377 else
3378 abort ();
3380 case SAVE_EXPR:
3381 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3383 case CALL_EXPR:
3384 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3385 if (cmp <= 0)
3386 return cmp;
3387 return
3388 simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3390 case TARGET_EXPR:
3391 /* Special case: if either target is an unallocated VAR_DECL,
3392 it means that it's going to be unified with whatever the
3393 TARGET_EXPR is really supposed to initialize, so treat it
3394 as being equivalent to anything. */
3395 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
3396 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
3397 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
3398 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
3399 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
3400 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
3401 cmp = 1;
3402 else
3403 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3405 if (cmp <= 0)
3406 return cmp;
3408 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3410 case WITH_CLEANUP_EXPR:
3411 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3412 if (cmp <= 0)
3413 return cmp;
3415 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
3417 case COMPONENT_REF:
3418 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
3419 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3421 return 0;
3423 case VAR_DECL:
3424 case PARM_DECL:
3425 case CONST_DECL:
3426 case FUNCTION_DECL:
3427 return 0;
3429 default:
3430 break;
3433 /* This general rule works for most tree codes. All exceptions should be
3434 handled above. If this is a language-specific tree code, we can't
3435 trust what might be in the operand, so say we don't know
3436 the situation. */
3437 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
3438 return -1;
3440 switch (TREE_CODE_CLASS (code1))
3442 case '1':
3443 case '2':
3444 case '<':
3445 case 'e':
3446 case 'r':
3447 case 's':
3448 cmp = 1;
3449 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
3451 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
3452 if (cmp <= 0)
3453 return cmp;
3456 return cmp;
3458 default:
3459 return -1;
3463 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
3464 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
3465 than U, respectively. */
3468 compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
3470 if (tree_int_cst_sgn (t) < 0)
3471 return -1;
3472 else if (TREE_INT_CST_HIGH (t) != 0)
3473 return 1;
3474 else if (TREE_INT_CST_LOW (t) == u)
3475 return 0;
3476 else if (TREE_INT_CST_LOW (t) < u)
3477 return -1;
3478 else
3479 return 1;
3482 /* Generate a hash value for an expression. This can be used iteratively
3483 by passing a previous result as the "val" argument.
3485 This function is intended to produce the same hash for expressions which
3486 would compare equal using operand_equal_p. */
3488 hashval_t
3489 iterative_hash_expr (tree t, hashval_t val)
3491 int i;
3492 enum tree_code code;
3493 char class;
3495 if (t == NULL_TREE)
3496 return iterative_hash_object (t, val);
3498 code = TREE_CODE (t);
3499 class = TREE_CODE_CLASS (code);
3501 if (class == 'd')
3503 /* Decls we can just compare by pointer. */
3504 val = iterative_hash_object (t, val);
3506 else if (class == 'c')
3508 /* Alas, constants aren't shared, so we can't rely on pointer
3509 identity. */
3510 if (code == INTEGER_CST)
3512 val = iterative_hash_object (TREE_INT_CST_LOW (t), val);
3513 val = iterative_hash_object (TREE_INT_CST_HIGH (t), val);
3515 else if (code == REAL_CST)
3516 val = iterative_hash (TREE_REAL_CST_PTR (t),
3517 sizeof (REAL_VALUE_TYPE), val);
3518 else if (code == STRING_CST)
3519 val = iterative_hash (TREE_STRING_POINTER (t),
3520 TREE_STRING_LENGTH (t), val);
3521 else if (code == COMPLEX_CST)
3523 val = iterative_hash_expr (TREE_REALPART (t), val);
3524 val = iterative_hash_expr (TREE_IMAGPART (t), val);
3526 else if (code == VECTOR_CST)
3527 val = iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
3528 else
3529 abort ();
3531 else if (IS_EXPR_CODE_CLASS (class) || class == 'r')
3533 val = iterative_hash_object (code, val);
3535 if (code == NOP_EXPR || code == CONVERT_EXPR
3536 || code == NON_LVALUE_EXPR)
3537 val = iterative_hash_object (TREE_TYPE (t), val);
3539 if (code == PLUS_EXPR || code == MULT_EXPR || code == MIN_EXPR
3540 || code == MAX_EXPR || code == BIT_IOR_EXPR || code == BIT_XOR_EXPR
3541 || code == BIT_AND_EXPR || code == NE_EXPR || code == EQ_EXPR)
3543 /* It's a commutative expression. We want to hash it the same
3544 however it appears. We do this by first hashing both operands
3545 and then rehashing based on the order of their independent
3546 hashes. */
3547 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
3548 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
3549 hashval_t t;
3551 if (one > two)
3552 t = one, one = two, two = t;
3554 val = iterative_hash_object (one, val);
3555 val = iterative_hash_object (two, val);
3557 else
3558 for (i = first_rtl_op (code) - 1; i >= 0; --i)
3559 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
3561 else if (code == TREE_LIST)
3563 /* A list of expressions, for a CALL_EXPR or as the elements of a
3564 VECTOR_CST. */
3565 for (; t; t = TREE_CHAIN (t))
3566 val = iterative_hash_expr (TREE_VALUE (t), val);
3568 else
3569 abort ();
3571 return val;
3574 /* Constructors for pointer, array and function types.
3575 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
3576 constructed by language-dependent code, not here.) */
3578 /* Construct, lay out and return the type of pointers to TO_TYPE
3579 with mode MODE. If such a type has already been constructed,
3580 reuse it. */
3582 tree
3583 build_pointer_type_for_mode (tree to_type, enum machine_mode mode)
3585 tree t = TYPE_POINTER_TO (to_type);
3587 /* First, if we already have a type for pointers to TO_TYPE, use it. */
3588 if (t != 0 && mode == ptr_mode)
3589 return t;
3591 t = make_node (POINTER_TYPE);
3593 TREE_TYPE (t) = to_type;
3594 TYPE_MODE (t) = mode;
3596 /* Record this type as the pointer to TO_TYPE. */
3597 if (mode == ptr_mode)
3598 TYPE_POINTER_TO (to_type) = t;
3600 /* Lay out the type. This function has many callers that are concerned
3601 with expression-construction, and this simplifies them all.
3602 Also, it guarantees the TYPE_SIZE is in the same obstack as the type. */
3603 layout_type (t);
3605 return t;
3608 /* By default build pointers in ptr_mode. */
3610 tree
3611 build_pointer_type (tree to_type)
3613 return build_pointer_type_for_mode (to_type, ptr_mode);
3616 /* Construct, lay out and return the type of references to TO_TYPE
3617 with mode MODE. If such a type has already been constructed,
3618 reuse it. */
3620 tree
3621 build_reference_type_for_mode (tree to_type, enum machine_mode mode)
3623 tree t = TYPE_REFERENCE_TO (to_type);
3625 /* First, if we already have a type for pointers to TO_TYPE, use it. */
3626 if (t != 0 && mode == ptr_mode)
3627 return t;
3629 t = make_node (REFERENCE_TYPE);
3631 TREE_TYPE (t) = to_type;
3632 TYPE_MODE (t) = mode;
3634 /* Record this type as the pointer to TO_TYPE. */
3635 if (mode == ptr_mode)
3636 TYPE_REFERENCE_TO (to_type) = t;
3638 layout_type (t);
3640 return t;
3644 /* Build the node for the type of references-to-TO_TYPE by default
3645 in ptr_mode. */
3647 tree
3648 build_reference_type (tree to_type)
3650 return build_reference_type_for_mode (to_type, ptr_mode);
3653 /* Build a type that is compatible with t but has no cv quals anywhere
3654 in its type, thus
3656 const char *const *const * -> char ***. */
3658 tree
3659 build_type_no_quals (tree t)
3661 switch (TREE_CODE (t))
3663 case POINTER_TYPE:
3664 return build_pointer_type (build_type_no_quals (TREE_TYPE (t)));
3665 case REFERENCE_TYPE:
3666 return build_reference_type (build_type_no_quals (TREE_TYPE (t)));
3667 default:
3668 return TYPE_MAIN_VARIANT (t);
3672 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
3673 MAXVAL should be the maximum value in the domain
3674 (one less than the length of the array).
3676 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
3677 We don't enforce this limit, that is up to caller (e.g. language front end).
3678 The limit exists because the result is a signed type and we don't handle
3679 sizes that use more than one HOST_WIDE_INT. */
3681 tree
3682 build_index_type (tree maxval)
3684 tree itype = make_node (INTEGER_TYPE);
3686 TREE_TYPE (itype) = sizetype;
3687 TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
3688 TYPE_MIN_VALUE (itype) = size_zero_node;
3689 TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
3690 TYPE_MODE (itype) = TYPE_MODE (sizetype);
3691 TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
3692 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
3693 TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
3694 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
3696 if (host_integerp (maxval, 1))
3697 return type_hash_canon (tree_low_cst (maxval, 1), itype);
3698 else
3699 return itype;
3702 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
3703 ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
3704 low bound LOWVAL and high bound HIGHVAL.
3705 if TYPE==NULL_TREE, sizetype is used. */
3707 tree
3708 build_range_type (tree type, tree lowval, tree highval)
3710 tree itype = make_node (INTEGER_TYPE);
3712 TREE_TYPE (itype) = type;
3713 if (type == NULL_TREE)
3714 type = sizetype;
3716 TYPE_MIN_VALUE (itype) = convert (type, lowval);
3717 TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
3719 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
3720 TYPE_MODE (itype) = TYPE_MODE (type);
3721 TYPE_SIZE (itype) = TYPE_SIZE (type);
3722 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
3723 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
3724 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
3726 if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
3727 return type_hash_canon (tree_low_cst (highval, 0)
3728 - tree_low_cst (lowval, 0),
3729 itype);
3730 else
3731 return itype;
3734 /* Just like build_index_type, but takes lowval and highval instead
3735 of just highval (maxval). */
3737 tree
3738 build_index_2_type (tree lowval, tree highval)
3740 return build_range_type (sizetype, lowval, highval);
3743 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
3744 and number of elements specified by the range of values of INDEX_TYPE.
3745 If such a type has already been constructed, reuse it. */
3747 tree
3748 build_array_type (tree elt_type, tree index_type)
3750 tree t;
3751 unsigned int hashcode;
3753 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
3755 error ("arrays of functions are not meaningful");
3756 elt_type = integer_type_node;
3759 /* Make sure TYPE_POINTER_TO (elt_type) is filled in. */
3760 build_pointer_type (elt_type);
3762 /* Allocate the array after the pointer type,
3763 in case we free it in type_hash_canon. */
3764 t = make_node (ARRAY_TYPE);
3765 TREE_TYPE (t) = elt_type;
3766 TYPE_DOMAIN (t) = index_type;
3768 if (index_type == 0)
3770 return t;
3773 hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
3774 t = type_hash_canon (hashcode, t);
3776 if (!COMPLETE_TYPE_P (t))
3777 layout_type (t);
3778 return t;
3781 /* Return the TYPE of the elements comprising
3782 the innermost dimension of ARRAY. */
3784 tree
3785 get_inner_array_type (tree array)
3787 tree type = TREE_TYPE (array);
3789 while (TREE_CODE (type) == ARRAY_TYPE)
3790 type = TREE_TYPE (type);
3792 return type;
3795 /* Construct, lay out and return
3796 the type of functions returning type VALUE_TYPE
3797 given arguments of types ARG_TYPES.
3798 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
3799 are data type nodes for the arguments of the function.
3800 If such a type has already been constructed, reuse it. */
3802 tree
3803 build_function_type (tree value_type, tree arg_types)
3805 tree t;
3806 unsigned int hashcode;
3808 if (TREE_CODE (value_type) == FUNCTION_TYPE)
3810 error ("function return type cannot be function");
3811 value_type = integer_type_node;
3814 /* Make a node of the sort we want. */
3815 t = make_node (FUNCTION_TYPE);
3816 TREE_TYPE (t) = value_type;
3817 TYPE_ARG_TYPES (t) = arg_types;
3819 /* If we already have such a type, use the old one and free this one. */
3820 hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
3821 t = type_hash_canon (hashcode, t);
3823 if (!COMPLETE_TYPE_P (t))
3824 layout_type (t);
3825 return t;
3828 /* Build a function type. The RETURN_TYPE is the type retured by the
3829 function. If additional arguments are provided, they are
3830 additional argument types. The list of argument types must always
3831 be terminated by NULL_TREE. */
3833 tree
3834 build_function_type_list (tree return_type, ...)
3836 tree t, args, last;
3837 va_list p;
3839 va_start (p, return_type);
3841 t = va_arg (p, tree);
3842 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
3843 args = tree_cons (NULL_TREE, t, args);
3845 last = args;
3846 args = nreverse (args);
3847 TREE_CHAIN (last) = void_list_node;
3848 args = build_function_type (return_type, args);
3850 va_end (p);
3851 return args;
3854 /* Construct, lay out and return the type of methods belonging to class
3855 BASETYPE and whose arguments and values are described by TYPE.
3856 If that type exists already, reuse it.
3857 TYPE must be a FUNCTION_TYPE node. */
3859 tree
3860 build_method_type (tree basetype, tree type)
3862 tree t;
3863 unsigned int hashcode;
3865 /* Make a node of the sort we want. */
3866 t = make_node (METHOD_TYPE);
3868 if (TREE_CODE (type) != FUNCTION_TYPE)
3869 abort ();
3871 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
3872 TREE_TYPE (t) = TREE_TYPE (type);
3874 /* The actual arglist for this function includes a "hidden" argument
3875 which is "this". Put it into the list of argument types. */
3877 TYPE_ARG_TYPES (t)
3878 = tree_cons (NULL_TREE,
3879 build_pointer_type (basetype), TYPE_ARG_TYPES (type));
3881 /* If we already have such a type, use the old one and free this one. */
3882 hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
3883 t = type_hash_canon (hashcode, t);
3885 if (!COMPLETE_TYPE_P (t))
3886 layout_type (t);
3888 return t;
3891 /* Construct, lay out and return the type of offsets to a value
3892 of type TYPE, within an object of type BASETYPE.
3893 If a suitable offset type exists already, reuse it. */
3895 tree
3896 build_offset_type (tree basetype, tree type)
3898 tree t;
3899 unsigned int hashcode;
3901 /* Make a node of the sort we want. */
3902 t = make_node (OFFSET_TYPE);
3904 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
3905 TREE_TYPE (t) = type;
3907 /* If we already have such a type, use the old one and free this one. */
3908 hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
3909 t = type_hash_canon (hashcode, t);
3911 if (!COMPLETE_TYPE_P (t))
3912 layout_type (t);
3914 return t;
3917 /* Create a complex type whose components are COMPONENT_TYPE. */
3919 tree
3920 build_complex_type (tree component_type)
3922 tree t;
3923 unsigned int hashcode;
3925 /* Make a node of the sort we want. */
3926 t = make_node (COMPLEX_TYPE);
3928 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
3929 set_type_quals (t, TYPE_QUALS (component_type));
3931 /* If we already have such a type, use the old one and free this one. */
3932 hashcode = TYPE_HASH (component_type);
3933 t = type_hash_canon (hashcode, t);
3935 if (!COMPLETE_TYPE_P (t))
3936 layout_type (t);
3938 /* If we are writing Dwarf2 output we need to create a name,
3939 since complex is a fundamental type. */
3940 if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
3941 && ! TYPE_NAME (t))
3943 const char *name;
3944 if (component_type == char_type_node)
3945 name = "complex char";
3946 else if (component_type == signed_char_type_node)
3947 name = "complex signed char";
3948 else if (component_type == unsigned_char_type_node)
3949 name = "complex unsigned char";
3950 else if (component_type == short_integer_type_node)
3951 name = "complex short int";
3952 else if (component_type == short_unsigned_type_node)
3953 name = "complex short unsigned int";
3954 else if (component_type == integer_type_node)
3955 name = "complex int";
3956 else if (component_type == unsigned_type_node)
3957 name = "complex unsigned int";
3958 else if (component_type == long_integer_type_node)
3959 name = "complex long int";
3960 else if (component_type == long_unsigned_type_node)
3961 name = "complex long unsigned int";
3962 else if (component_type == long_long_integer_type_node)
3963 name = "complex long long int";
3964 else if (component_type == long_long_unsigned_type_node)
3965 name = "complex long long unsigned int";
3966 else
3967 name = 0;
3969 if (name != 0)
3970 TYPE_NAME (t) = get_identifier (name);
3973 return t;
3976 /* Return OP, stripped of any conversions to wider types as much as is safe.
3977 Converting the value back to OP's type makes a value equivalent to OP.
3979 If FOR_TYPE is nonzero, we return a value which, if converted to
3980 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
3982 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
3983 narrowest type that can hold the value, even if they don't exactly fit.
3984 Otherwise, bit-field references are changed to a narrower type
3985 only if they can be fetched directly from memory in that type.
3987 OP must have integer, real or enumeral type. Pointers are not allowed!
3989 There are some cases where the obvious value we could return
3990 would regenerate to OP if converted to OP's type,
3991 but would not extend like OP to wider types.
3992 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
3993 For example, if OP is (unsigned short)(signed char)-1,
3994 we avoid returning (signed char)-1 if FOR_TYPE is int,
3995 even though extending that to an unsigned short would regenerate OP,
3996 since the result of extending (signed char)-1 to (int)
3997 is different from (int) OP. */
3999 tree
4000 get_unwidened (tree op, tree for_type)
4002 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
4003 tree type = TREE_TYPE (op);
4004 unsigned final_prec
4005 = TYPE_PRECISION (for_type != 0 ? for_type : type);
4006 int uns
4007 = (for_type != 0 && for_type != type
4008 && final_prec > TYPE_PRECISION (type)
4009 && TREE_UNSIGNED (type));
4010 tree win = op;
4012 while (TREE_CODE (op) == NOP_EXPR)
4014 int bitschange
4015 = TYPE_PRECISION (TREE_TYPE (op))
4016 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4018 /* Truncations are many-one so cannot be removed.
4019 Unless we are later going to truncate down even farther. */
4020 if (bitschange < 0
4021 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4022 break;
4024 /* See what's inside this conversion. If we decide to strip it,
4025 we will set WIN. */
4026 op = TREE_OPERAND (op, 0);
4028 /* If we have not stripped any zero-extensions (uns is 0),
4029 we can strip any kind of extension.
4030 If we have previously stripped a zero-extension,
4031 only zero-extensions can safely be stripped.
4032 Any extension can be stripped if the bits it would produce
4033 are all going to be discarded later by truncating to FOR_TYPE. */
4035 if (bitschange > 0)
4037 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4038 win = op;
4039 /* TREE_UNSIGNED says whether this is a zero-extension.
4040 Let's avoid computing it if it does not affect WIN
4041 and if UNS will not be needed again. */
4042 if ((uns || TREE_CODE (op) == NOP_EXPR)
4043 && TREE_UNSIGNED (TREE_TYPE (op)))
4045 uns = 1;
4046 win = op;
4051 if (TREE_CODE (op) == COMPONENT_REF
4052 /* Since type_for_size always gives an integer type. */
4053 && TREE_CODE (type) != REAL_TYPE
4054 /* Don't crash if field not laid out yet. */
4055 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
4056 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
4058 unsigned int innerprec
4059 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4060 int unsignedp = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4061 type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);
4063 /* We can get this structure field in the narrowest type it fits in.
4064 If FOR_TYPE is 0, do this only for a field that matches the
4065 narrower type exactly and is aligned for it
4066 The resulting extension to its nominal type (a fullword type)
4067 must fit the same conditions as for other extensions. */
4069 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4070 && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4071 && (! uns || final_prec <= innerprec || unsignedp)
4072 && type != 0)
4074 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4075 TREE_OPERAND (op, 1));
4076 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4077 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4081 return win;
4084 /* Return OP or a simpler expression for a narrower value
4085 which can be sign-extended or zero-extended to give back OP.
4086 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4087 or 0 if the value should be sign-extended. */
4089 tree
4090 get_narrower (tree op, int *unsignedp_ptr)
4092 int uns = 0;
4093 int first = 1;
4094 tree win = op;
4096 while (TREE_CODE (op) == NOP_EXPR)
4098 int bitschange
4099 = (TYPE_PRECISION (TREE_TYPE (op))
4100 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
4102 /* Truncations are many-one so cannot be removed. */
4103 if (bitschange < 0)
4104 break;
4106 /* See what's inside this conversion. If we decide to strip it,
4107 we will set WIN. */
4109 if (bitschange > 0)
4111 op = TREE_OPERAND (op, 0);
4112 /* An extension: the outermost one can be stripped,
4113 but remember whether it is zero or sign extension. */
4114 if (first)
4115 uns = TREE_UNSIGNED (TREE_TYPE (op));
4116 /* Otherwise, if a sign extension has been stripped,
4117 only sign extensions can now be stripped;
4118 if a zero extension has been stripped, only zero-extensions. */
4119 else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4120 break;
4121 first = 0;
4123 else /* bitschange == 0 */
4125 /* A change in nominal type can always be stripped, but we must
4126 preserve the unsignedness. */
4127 if (first)
4128 uns = TREE_UNSIGNED (TREE_TYPE (op));
4129 first = 0;
4130 op = TREE_OPERAND (op, 0);
4133 win = op;
4136 if (TREE_CODE (op) == COMPONENT_REF
4137 /* Since type_for_size always gives an integer type. */
4138 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
4139 /* Ensure field is laid out already. */
4140 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4142 unsigned HOST_WIDE_INT innerprec
4143 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4144 tree type = (*lang_hooks.types.type_for_size) (innerprec,
4145 TREE_UNSIGNED (op));
4147 /* We can get this structure field in a narrower type that fits it,
4148 but the resulting extension to its nominal type (a fullword type)
4149 must satisfy the same conditions as for other extensions.
4151 Do this only for fields that are aligned (not bit-fields),
4152 because when bit-field insns will be used there is no
4153 advantage in doing this. */
4155 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4156 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4157 && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4158 && type != 0)
4160 if (first)
4161 uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4162 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4163 TREE_OPERAND (op, 1));
4164 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4165 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4168 *unsignedp_ptr = uns;
4169 return win;
4172 /* Nonzero if integer constant C has a value that is permissible
4173 for type TYPE (an INTEGER_TYPE). */
4176 int_fits_type_p (tree c, tree type)
4178 tree type_low_bound = TYPE_MIN_VALUE (type);
4179 tree type_high_bound = TYPE_MAX_VALUE (type);
4180 int ok_for_low_bound, ok_for_high_bound;
4182 /* Perform some generic filtering first, which may allow making a decision
4183 even if the bounds are not constant. First, negative integers never fit
4184 in unsigned types, */
4185 if ((TREE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
4186 /* Also, unsigned integers with top bit set never fit signed types. */
4187 || (! TREE_UNSIGNED (type)
4188 && TREE_UNSIGNED (TREE_TYPE (c)) && tree_int_cst_msb (c)))
4189 return 0;
4191 /* If at least one bound of the type is a constant integer, we can check
4192 ourselves and maybe make a decision. If no such decision is possible, but
4193 this type is a subtype, try checking against that. Otherwise, use
4194 force_fit_type, which checks against the precision.
4196 Compute the status for each possibly constant bound, and return if we see
4197 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
4198 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
4199 for "constant known to fit". */
4201 ok_for_low_bound = -1;
4202 ok_for_high_bound = -1;
4204 /* Check if C >= type_low_bound. */
4205 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
4207 ok_for_low_bound = ! tree_int_cst_lt (c, type_low_bound);
4208 if (! ok_for_low_bound)
4209 return 0;
4212 /* Check if c <= type_high_bound. */
4213 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
4215 ok_for_high_bound = ! tree_int_cst_lt (type_high_bound, c);
4216 if (! ok_for_high_bound)
4217 return 0;
4220 /* If the constant fits both bounds, the result is known. */
4221 if (ok_for_low_bound == 1 && ok_for_high_bound == 1)
4222 return 1;
4224 /* If we haven't been able to decide at this point, there nothing more we
4225 can check ourselves here. Look at the base type if we have one. */
4226 else if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0)
4227 return int_fits_type_p (c, TREE_TYPE (type));
4229 /* Or to force_fit_type, if nothing else. */
4230 else
4232 c = copy_node (c);
4233 TREE_TYPE (c) = type;
4234 return !force_fit_type (c, 0);
4238 /* Returns true if T is, contains, or refers to a type with variable
4239 size. This concept is more general than that of C99 'variably
4240 modified types': in C99, a struct type is never variably modified
4241 because a VLA may not appear as a structure member. However, in
4242 GNU C code like:
4244 struct S { int i[f()]; };
4246 is valid, and other languages may define similar constructs. */
4248 bool
4249 variably_modified_type_p (tree type)
4251 if (type == error_mark_node)
4252 return false;
4254 /* If TYPE itself has variable size, it is variably modified.
4256 We do not yet have a representation of the C99 '[*]' syntax.
4257 When a representation is chosen, this function should be modified
4258 to test for that case as well. */
4259 if (TYPE_SIZE (type)
4260 && TYPE_SIZE (type) != error_mark_node
4261 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4262 return true;
4264 /* If TYPE is a pointer or reference, it is variably modified if
4265 the type pointed to is variably modified. */
4266 if ((TREE_CODE (type) == POINTER_TYPE
4267 || TREE_CODE (type) == REFERENCE_TYPE)
4268 && variably_modified_type_p (TREE_TYPE (type)))
4269 return true;
4271 /* If TYPE is an array, it is variably modified if the array
4272 elements are. (Note that the VLA case has already been checked
4273 above.) */
4274 if (TREE_CODE (type) == ARRAY_TYPE
4275 && variably_modified_type_p (TREE_TYPE (type)))
4276 return true;
4278 /* If TYPE is a function type, it is variably modified if any of the
4279 parameters or the return type are variably modified. */
4280 if (TREE_CODE (type) == FUNCTION_TYPE
4281 || TREE_CODE (type) == METHOD_TYPE)
4283 tree parm;
4285 if (variably_modified_type_p (TREE_TYPE (type)))
4286 return true;
4287 for (parm = TYPE_ARG_TYPES (type);
4288 parm && parm != void_list_node;
4289 parm = TREE_CHAIN (parm))
4290 if (variably_modified_type_p (TREE_VALUE (parm)))
4291 return true;
4294 /* The current language may have other cases to check, but in general,
4295 all other types are not variably modified. */
4296 return (*lang_hooks.tree_inlining.var_mod_type_p) (type);
4299 /* Given a DECL or TYPE, return the scope in which it was declared, or
4300 NULL_TREE if there is no containing scope. */
4302 tree
4303 get_containing_scope (tree t)
4305 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
4308 /* Return the innermost context enclosing DECL that is
4309 a FUNCTION_DECL, or zero if none. */
4311 tree
4312 decl_function_context (tree decl)
4314 tree context;
4316 if (TREE_CODE (decl) == ERROR_MARK)
4317 return 0;
4319 if (TREE_CODE (decl) == SAVE_EXPR)
4320 context = SAVE_EXPR_CONTEXT (decl);
4322 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
4323 where we look up the function at runtime. Such functions always take
4324 a first argument of type 'pointer to real context'.
4326 C++ should really be fixed to use DECL_CONTEXT for the real context,
4327 and use something else for the "virtual context". */
4328 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
4329 context
4330 = TYPE_MAIN_VARIANT
4331 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4332 else
4333 context = DECL_CONTEXT (decl);
4335 while (context && TREE_CODE (context) != FUNCTION_DECL)
4337 if (TREE_CODE (context) == BLOCK)
4338 context = BLOCK_SUPERCONTEXT (context);
4339 else
4340 context = get_containing_scope (context);
4343 return context;
4346 /* Return the innermost context enclosing DECL that is
4347 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4348 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
4350 tree
4351 decl_type_context (tree decl)
4353 tree context = DECL_CONTEXT (decl);
4355 while (context)
4356 switch (TREE_CODE (context))
4358 case NAMESPACE_DECL:
4359 case TRANSLATION_UNIT_DECL:
4360 return NULL_TREE;
4362 case RECORD_TYPE:
4363 case UNION_TYPE:
4364 case QUAL_UNION_TYPE:
4365 return context;
4367 case TYPE_DECL:
4368 case FUNCTION_DECL:
4369 context = DECL_CONTEXT (context);
4370 break;
4372 case BLOCK:
4373 context = BLOCK_SUPERCONTEXT (context);
4374 break;
4376 default:
4377 abort ();
4380 return NULL_TREE;
4383 /* CALL is a CALL_EXPR. Return the declaration for the function
4384 called, or NULL_TREE if the called function cannot be
4385 determined. */
4387 tree
4388 get_callee_fndecl (tree call)
4390 tree addr;
4392 /* It's invalid to call this function with anything but a
4393 CALL_EXPR. */
4394 if (TREE_CODE (call) != CALL_EXPR)
4395 abort ();
4397 /* The first operand to the CALL is the address of the function
4398 called. */
4399 addr = TREE_OPERAND (call, 0);
4401 STRIP_NOPS (addr);
4403 /* If this is a readonly function pointer, extract its initial value. */
4404 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
4405 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
4406 && DECL_INITIAL (addr))
4407 addr = DECL_INITIAL (addr);
4409 /* If the address is just `&f' for some function `f', then we know
4410 that `f' is being called. */
4411 if (TREE_CODE (addr) == ADDR_EXPR
4412 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
4413 return TREE_OPERAND (addr, 0);
4415 /* We couldn't figure out what was being called. */
4416 return NULL_TREE;
4419 /* Print debugging information about tree nodes generated during the compile,
4420 and any language-specific information. */
4422 void
4423 dump_tree_statistics (void)
4425 #ifdef GATHER_STATISTICS
4426 int i;
4427 int total_nodes, total_bytes;
4428 #endif
4430 fprintf (stderr, "\n??? tree nodes created\n\n");
4431 #ifdef GATHER_STATISTICS
4432 fprintf (stderr, "Kind Nodes Bytes\n");
4433 fprintf (stderr, "---------------------------------------\n");
4434 total_nodes = total_bytes = 0;
4435 for (i = 0; i < (int) all_kinds; i++)
4437 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
4438 tree_node_counts[i], tree_node_sizes[i]);
4439 total_nodes += tree_node_counts[i];
4440 total_bytes += tree_node_sizes[i];
4442 fprintf (stderr, "---------------------------------------\n");
4443 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
4444 fprintf (stderr, "---------------------------------------\n");
4445 #else
4446 fprintf (stderr, "(No per-node statistics)\n");
4447 #endif
4448 print_type_hash_statistics ();
4449 (*lang_hooks.print_statistics) ();
4452 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
4454 /* Generate a crc32 of a string. */
4456 unsigned
4457 crc32_string (unsigned chksum, const char *string)
4461 unsigned value = *string << 24;
4462 unsigned ix;
4464 for (ix = 8; ix--; value <<= 1)
4466 unsigned feedback;
4468 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
4469 chksum <<= 1;
4470 chksum ^= feedback;
4473 while (*string++);
4474 return chksum;
4477 /* P is a string that will be used in a symbol. Mask out any characters
4478 that are not valid in that context. */
4480 void
4481 clean_symbol_name (char *p)
4483 for (; *p; p++)
4484 if (! (ISALNUM (*p)
4485 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
4486 || *p == '$'
4487 #endif
4488 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
4489 || *p == '.'
4490 #endif
4492 *p = '_';
4495 /* Generate a name for a function unique to this translation unit.
4496 TYPE is some string to identify the purpose of this function to the
4497 linker or collect2. */
4499 tree
4500 get_file_function_name_long (const char *type)
4502 char *buf;
4503 const char *p;
4504 char *q;
4506 if (first_global_object_name)
4507 p = first_global_object_name;
4508 else
4510 /* We don't have anything that we know to be unique to this translation
4511 unit, so use what we do have and throw in some randomness. */
4512 unsigned len;
4513 const char *name = weak_global_object_name;
4514 const char *file = main_input_filename;
4516 if (! name)
4517 name = "";
4518 if (! file)
4519 file = input_filename;
4521 len = strlen (file);
4522 q = (char *) alloca (9 * 2 + len);
4523 memcpy (q, file, len + 1);
4524 clean_symbol_name (q);
4526 sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
4527 crc32_string (0, flag_random_seed));
4529 p = q;
4532 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
4533 + strlen (type));
4535 /* Set up the name of the file-level functions we may need.
4536 Use a global object (which is already required to be unique over
4537 the program) rather than the file name (which imposes extra
4538 constraints). */
4539 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
4541 return get_identifier (buf);
4544 /* If KIND=='I', return a suitable global initializer (constructor) name.
4545 If KIND=='D', return a suitable global clean-up (destructor) name. */
4547 tree
4548 get_file_function_name (int kind)
4550 char p[2];
4552 p[0] = kind;
4553 p[1] = 0;
4555 return get_file_function_name_long (p);
4558 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4559 The result is placed in BUFFER (which has length BIT_SIZE),
4560 with one bit in each char ('\000' or '\001').
4562 If the constructor is constant, NULL_TREE is returned.
4563 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
4565 tree
4566 get_set_constructor_bits (tree init, char *buffer, int bit_size)
4568 int i;
4569 tree vals;
4570 HOST_WIDE_INT domain_min
4571 = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))), 0);
4572 tree non_const_bits = NULL_TREE;
4574 for (i = 0; i < bit_size; i++)
4575 buffer[i] = 0;
4577 for (vals = TREE_OPERAND (init, 1);
4578 vals != NULL_TREE; vals = TREE_CHAIN (vals))
4580 if (!host_integerp (TREE_VALUE (vals), 0)
4581 || (TREE_PURPOSE (vals) != NULL_TREE
4582 && !host_integerp (TREE_PURPOSE (vals), 0)))
4583 non_const_bits
4584 = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
4585 else if (TREE_PURPOSE (vals) != NULL_TREE)
4587 /* Set a range of bits to ones. */
4588 HOST_WIDE_INT lo_index
4589 = tree_low_cst (TREE_PURPOSE (vals), 0) - domain_min;
4590 HOST_WIDE_INT hi_index
4591 = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
4593 if (lo_index < 0 || lo_index >= bit_size
4594 || hi_index < 0 || hi_index >= bit_size)
4595 abort ();
4596 for (; lo_index <= hi_index; lo_index++)
4597 buffer[lo_index] = 1;
4599 else
4601 /* Set a single bit to one. */
4602 HOST_WIDE_INT index
4603 = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
4604 if (index < 0 || index >= bit_size)
4606 error ("invalid initializer for bit string");
4607 return NULL_TREE;
4609 buffer[index] = 1;
4612 return non_const_bits;
4615 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4616 The result is placed in BUFFER (which is an array of bytes).
4617 If the constructor is constant, NULL_TREE is returned.
4618 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
4620 tree
4621 get_set_constructor_bytes (tree init, unsigned char *buffer, int wd_size)
4623 int i;
4624 int set_word_size = BITS_PER_UNIT;
4625 int bit_size = wd_size * set_word_size;
4626 int bit_pos = 0;
4627 unsigned char *bytep = buffer;
4628 char *bit_buffer = (char *) alloca (bit_size);
4629 tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
4631 for (i = 0; i < wd_size; i++)
4632 buffer[i] = 0;
4634 for (i = 0; i < bit_size; i++)
4636 if (bit_buffer[i])
4638 if (BYTES_BIG_ENDIAN)
4639 *bytep |= (1 << (set_word_size - 1 - bit_pos));
4640 else
4641 *bytep |= 1 << bit_pos;
4643 bit_pos++;
4644 if (bit_pos >= set_word_size)
4645 bit_pos = 0, bytep++;
4647 return non_const_bits;
4650 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4651 /* Complain that the tree code of NODE does not match the expected CODE.
4652 FILE, LINE, and FUNCTION are of the caller. */
4654 void
4655 tree_check_failed (const tree node, enum tree_code code, const char *file,
4656 int line, const char *function)
4658 internal_error ("tree check: expected %s, have %s in %s, at %s:%d",
4659 tree_code_name[code], tree_code_name[TREE_CODE (node)],
4660 function, trim_filename (file), line);
4663 /* Similar to above, except that we check for a class of tree
4664 code, given in CL. */
4666 void
4667 tree_class_check_failed (const tree node, int cl, const char *file,
4668 int line, const char *function)
4670 internal_error
4671 ("tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d",
4672 cl, TREE_CODE_CLASS (TREE_CODE (node)),
4673 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
4676 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
4677 (dynamically sized) vector. */
4679 void
4680 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
4681 const char *function)
4683 internal_error
4684 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
4685 idx + 1, len, function, trim_filename (file), line);
4688 /* Similar to above, except that the check is for the bounds of the operand
4689 vector of an expression node. */
4691 void
4692 tree_operand_check_failed (int idx, enum tree_code code, const char *file,
4693 int line, const char *function)
4695 internal_error
4696 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
4697 idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
4698 function, trim_filename (file), line);
4700 #endif /* ENABLE_TREE_CHECKING */
4702 /* For a new vector type node T, build the information necessary for
4703 debugging output. */
4705 static void
4706 finish_vector_type (tree t)
4708 layout_type (t);
4711 tree index = build_int_2 (TYPE_VECTOR_SUBPARTS (t) - 1, 0);
4712 tree array = build_array_type (TREE_TYPE (t),
4713 build_index_type (index));
4714 tree rt = make_node (RECORD_TYPE);
4716 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
4717 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
4718 layout_type (rt);
4719 TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
4720 /* In dwarfout.c, type lookup uses TYPE_UID numbers. We want to output
4721 the representation type, and we want to find that die when looking up
4722 the vector type. This is most easily achieved by making the TYPE_UID
4723 numbers equal. */
4724 TYPE_UID (rt) = TYPE_UID (t);
4728 /* Create nodes for all integer types (and error_mark_node) using the sizes
4729 of C datatypes. The caller should call set_sizetype soon after calling
4730 this function to select one of the types as sizetype. */
4732 void
4733 build_common_tree_nodes (int signed_char)
4735 error_mark_node = make_node (ERROR_MARK);
4736 TREE_TYPE (error_mark_node) = error_mark_node;
4738 initialize_sizetypes ();
4740 /* Define both `signed char' and `unsigned char'. */
4741 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
4742 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
4744 /* Define `char', which is like either `signed char' or `unsigned char'
4745 but not the same as either. */
4746 char_type_node
4747 = (signed_char
4748 ? make_signed_type (CHAR_TYPE_SIZE)
4749 : make_unsigned_type (CHAR_TYPE_SIZE));
4751 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
4752 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
4753 integer_type_node = make_signed_type (INT_TYPE_SIZE);
4754 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
4755 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
4756 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
4757 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
4758 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
4760 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
4761 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
4762 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
4763 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
4764 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
4766 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
4767 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
4768 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
4769 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
4770 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
4773 /* Call this function after calling build_common_tree_nodes and set_sizetype.
4774 It will create several other common tree nodes. */
4776 void
4777 build_common_tree_nodes_2 (int short_double)
4779 /* Define these next since types below may used them. */
4780 integer_zero_node = build_int_2 (0, 0);
4781 integer_one_node = build_int_2 (1, 0);
4782 integer_minus_one_node = build_int_2 (-1, -1);
4784 size_zero_node = size_int (0);
4785 size_one_node = size_int (1);
4786 bitsize_zero_node = bitsize_int (0);
4787 bitsize_one_node = bitsize_int (1);
4788 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
4790 void_type_node = make_node (VOID_TYPE);
4791 layout_type (void_type_node);
4793 /* We are not going to have real types in C with less than byte alignment,
4794 so we might as well not have any types that claim to have it. */
4795 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
4796 TYPE_USER_ALIGN (void_type_node) = 0;
4798 null_pointer_node = build_int_2 (0, 0);
4799 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
4800 layout_type (TREE_TYPE (null_pointer_node));
4802 ptr_type_node = build_pointer_type (void_type_node);
4803 const_ptr_type_node
4804 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
4806 float_type_node = make_node (REAL_TYPE);
4807 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
4808 layout_type (float_type_node);
4810 double_type_node = make_node (REAL_TYPE);
4811 if (short_double)
4812 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
4813 else
4814 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
4815 layout_type (double_type_node);
4817 long_double_type_node = make_node (REAL_TYPE);
4818 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
4819 layout_type (long_double_type_node);
4821 complex_integer_type_node = make_node (COMPLEX_TYPE);
4822 TREE_TYPE (complex_integer_type_node) = integer_type_node;
4823 layout_type (complex_integer_type_node);
4825 complex_float_type_node = make_node (COMPLEX_TYPE);
4826 TREE_TYPE (complex_float_type_node) = float_type_node;
4827 layout_type (complex_float_type_node);
4829 complex_double_type_node = make_node (COMPLEX_TYPE);
4830 TREE_TYPE (complex_double_type_node) = double_type_node;
4831 layout_type (complex_double_type_node);
4833 complex_long_double_type_node = make_node (COMPLEX_TYPE);
4834 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
4835 layout_type (complex_long_double_type_node);
4838 tree t;
4839 BUILD_VA_LIST_TYPE (t);
4841 /* Many back-ends define record types without setting TYPE_NAME.
4842 If we copied the record type here, we'd keep the original
4843 record type without a name. This breaks name mangling. So,
4844 don't copy record types and let c_common_nodes_and_builtins()
4845 declare the type to be __builtin_va_list. */
4846 if (TREE_CODE (t) != RECORD_TYPE)
4847 t = build_type_copy (t);
4849 va_list_type_node = t;
4852 unsigned_V4SI_type_node
4853 = make_vector (V4SImode, unsigned_intSI_type_node, 1);
4854 unsigned_V2HI_type_node
4855 = make_vector (V2HImode, unsigned_intHI_type_node, 1);
4856 unsigned_V2SI_type_node
4857 = make_vector (V2SImode, unsigned_intSI_type_node, 1);
4858 unsigned_V2DI_type_node
4859 = make_vector (V2DImode, unsigned_intDI_type_node, 1);
4860 unsigned_V4HI_type_node
4861 = make_vector (V4HImode, unsigned_intHI_type_node, 1);
4862 unsigned_V8QI_type_node
4863 = make_vector (V8QImode, unsigned_intQI_type_node, 1);
4864 unsigned_V8HI_type_node
4865 = make_vector (V8HImode, unsigned_intHI_type_node, 1);
4866 unsigned_V16QI_type_node
4867 = make_vector (V16QImode, unsigned_intQI_type_node, 1);
4868 unsigned_V1DI_type_node
4869 = make_vector (V1DImode, unsigned_intDI_type_node, 1);
4871 V16SF_type_node = make_vector (V16SFmode, float_type_node, 0);
4872 V4SF_type_node = make_vector (V4SFmode, float_type_node, 0);
4873 V4SI_type_node = make_vector (V4SImode, intSI_type_node, 0);
4874 V2HI_type_node = make_vector (V2HImode, intHI_type_node, 0);
4875 V2SI_type_node = make_vector (V2SImode, intSI_type_node, 0);
4876 V2DI_type_node = make_vector (V2DImode, intDI_type_node, 0);
4877 V4HI_type_node = make_vector (V4HImode, intHI_type_node, 0);
4878 V8QI_type_node = make_vector (V8QImode, intQI_type_node, 0);
4879 V8HI_type_node = make_vector (V8HImode, intHI_type_node, 0);
4880 V2SF_type_node = make_vector (V2SFmode, float_type_node, 0);
4881 V2DF_type_node = make_vector (V2DFmode, double_type_node, 0);
4882 V16QI_type_node = make_vector (V16QImode, intQI_type_node, 0);
4883 V1DI_type_node = make_vector (V1DImode, intDI_type_node, 0);
4886 /* Returns a vector tree node given a vector mode, the inner type, and
4887 the signness. */
4889 static tree
4890 make_vector (enum machine_mode mode, tree innertype, int unsignedp)
4892 tree t;
4894 t = make_node (VECTOR_TYPE);
4895 TREE_TYPE (t) = innertype;
4896 TYPE_MODE (t) = mode;
4897 TREE_UNSIGNED (TREE_TYPE (t)) = unsignedp;
4898 finish_vector_type (t);
4900 return t;
4903 /* Given an initializer INIT, return TRUE if INIT is zero or some
4904 aggregate of zeros. Otherwise return FALSE. */
4906 bool
4907 initializer_zerop (tree init)
4909 STRIP_NOPS (init);
4911 switch (TREE_CODE (init))
4913 case INTEGER_CST:
4914 return integer_zerop (init);
4915 case REAL_CST:
4916 return real_zerop (init)
4917 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
4918 case COMPLEX_CST:
4919 return integer_zerop (init)
4920 || (real_zerop (init)
4921 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
4922 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
4923 case CONSTRUCTOR:
4925 if (AGGREGATE_TYPE_P (TREE_TYPE (init)))
4927 tree aggr_init = CONSTRUCTOR_ELTS (init);
4929 while (aggr_init)
4931 if (! initializer_zerop (TREE_VALUE (aggr_init)))
4932 return false;
4933 aggr_init = TREE_CHAIN (aggr_init);
4935 return true;
4937 return false;
4939 default:
4940 return false;
4944 #include "gt-tree.h"