]> gcc.gnu.org Git - gcc.git/blame - gcc/tree.c
decl.c, [...]: Don't use the PTR macro.
[gcc.git] / gcc / tree.c
CommitLineData
c6a1db6c 1/* Language-independent node constructors for parse phase of GNU compiler.
06ceef4e 2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
d479d37f 3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
c6a1db6c 4
1322177d 5This file is part of GCC.
c6a1db6c 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
c6a1db6c 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
c6a1db6c
RS
16
17You should have received a copy of the GNU General Public License
1322177d
LB
18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA. */
c6a1db6c 21
c6a1db6c
RS
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.
28
29 It is intended to be language-independent, but occasionally
6d9f628e 30 calls language-dependent routines defined (for C) in typecheck.c. */
c6a1db6c
RS
31
32#include "config.h"
670ee920 33#include "system.h"
4977bab6
ZW
34#include "coretypes.h"
35#include "tm.h"
c6a1db6c 36#include "flags.h"
c6a1db6c 37#include "tree.h"
11ad4784 38#include "real.h"
6baf1cc8 39#include "tm_p.h"
d69c4bd1 40#include "function.h"
c6a1db6c 41#include "obstack.h"
10f0ad3d 42#include "toplev.h"
87ff9c8e 43#include "ggc.h"
d88f311b 44#include "hashtab.h"
3b304f5b 45#include "output.h"
672a6f42 46#include "target.h"
5d69f816 47#include "langhooks.h"
956d6950 48
dc478a5d 49/* obstack.[ch] explicitly declined to prototype this. */
fad205ff 50extern int _obstack_allocated_p PARAMS ((struct obstack *h, void *obj));
c6a1db6c 51
3e16bfe2 52#ifdef GATHER_STATISTICS
c6a1db6c
RS
53/* Statistics-gathering stuff. */
54typedef enum
55{
03646189
RS
56 d_kind,
57 t_kind,
58 b_kind,
59 s_kind,
60 r_kind,
61 e_kind,
62 c_kind,
63 id_kind,
03646189
RS
64 perm_list_kind,
65 temp_list_kind,
66 vec_kind,
67 x_kind,
68 lang_decl,
69 lang_type,
70 all_kinds
c6a1db6c 71} tree_node_kind;
03646189 72
dc478a5d
KH
73int tree_node_counts[(int) all_kinds];
74int tree_node_sizes[(int) all_kinds];
03646189 75
341a243e 76static const char * const tree_node_kind_names[] = {
03646189
RS
77 "decls",
78 "types",
79 "blocks",
80 "stmts",
81 "refs",
82 "exprs",
83 "constants",
84 "identifiers",
03646189
RS
85 "perm_tree_lists",
86 "temp_tree_lists",
87 "vecs",
88 "random kinds",
89 "lang_decl kinds",
90 "lang_type kinds"
91};
3e16bfe2 92#endif /* GATHER_STATISTICS */
c6a1db6c 93
0e77444b 94/* Unique id for next decl created. */
03907fbd 95static GTY(()) int next_decl_uid;
579f50b6 96/* Unique id for next type created. */
03907fbd 97static GTY(()) int next_type_uid = 1;
0e77444b 98
d88f311b
ML
99/* Since we cannot rehash a type after it is in the table, we have to
100 keep the hash code. */
87ff9c8e 101
e2500fed 102struct type_hash GTY(())
87ff9c8e 103{
d88f311b
ML
104 unsigned long hash;
105 tree type;
87ff9c8e
RH
106};
107
dc478a5d 108/* Initial size of the hash table (rounded to next prime). */
d88f311b 109#define TYPE_HASH_INITIAL_SIZE 1000
87ff9c8e 110
d88f311b
ML
111/* Now here is the hash table. When recording a type, it is added to
112 the slot whose index is the hash code. Note that the hash table is
113 used for several kinds of types (function types, array types and
114 array index range types, for now). While all these live in the
115 same table, they are completely independent, and the hash code is
116 computed differently for each of these. */
117
e2500fed
GK
118static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
119 htab_t type_hash_table;
87ff9c8e 120
58782098
KG
121static void set_type_quals PARAMS ((tree, int));
122static void append_random_chars PARAMS ((char *));
3b03c671 123static int type_hash_eq PARAMS ((const void *, const void *));
fb7e6024 124static hashval_t type_hash_hash PARAMS ((const void *));
d88f311b 125static void print_type_hash_statistics PARAMS((void));
20217ac1 126static void finish_vector_type PARAMS((tree));
0afeef64 127static tree make_vector PARAMS ((enum machine_mode, tree, int));
4c160717 128static int type_hash_marked_p PARAMS ((const void *));
0a818f84 129
81b3411c 130tree global_trees[TI_MAX];
7145ef21 131tree integer_types[itk_none];
81b3411c 132\f
6d9f628e 133/* Init tree.c. */
c6a1db6c
RS
134
135void
6d9f628e 136init_ttree ()
c6a1db6c 137{
d4b60170 138 /* Initialize the hash table of types. */
17211ab5
GK
139 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
140 type_hash_eq, 0);
c6a1db6c
RS
141}
142
c6a1db6c 143\f
599bba86
NB
144/* The name of the object as the assembler will see it (but before any
145 translations made by ASM_OUTPUT_LABELREF). Often this is the same
146 as DECL_NAME. It is an IDENTIFIER_NODE. */
147tree
148decl_assembler_name (decl)
149 tree decl;
150{
151 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
152 (*lang_hooks.set_decl_assembler_name) (decl);
153 return DECL_CHECK (decl)->decl.assembler_name;
154}
155
c5620996
GK
156/* Compute the number of bytes occupied by 'node'. This routine only
157 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
158size_t
159tree_size (node)
160 tree node;
161{
162 enum tree_code code = TREE_CODE (node);
163
164 switch (TREE_CODE_CLASS (code))
165 {
166 case 'd': /* A decl node */
167 return sizeof (struct tree_decl);
168
169 case 't': /* a type node */
170 return sizeof (struct tree_type);
171
172 case 'b': /* a lexical block node */
173 return sizeof (struct tree_block);
174
175 case 'r': /* a reference */
176 case 'e': /* an expression */
177 case 's': /* an expression with side effects */
178 case '<': /* a comparison expression */
179 case '1': /* a unary arithmetic expression */
180 case '2': /* a binary arithmetic expression */
181 return (sizeof (struct tree_exp)
a0bed689 182 + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
c5620996
GK
183
184 case 'c': /* a constant */
d78e771d
ZW
185 switch (code)
186 {
187 case INTEGER_CST: return sizeof (struct tree_int_cst);
188 case REAL_CST: return sizeof (struct tree_real_cst);
189 case COMPLEX_CST: return sizeof (struct tree_complex);
190 case VECTOR_CST: return sizeof (struct tree_vector);
191 case STRING_CST: return sizeof (struct tree_string);
192 default:
193 return (*lang_hooks.tree_size) (code);
194 }
c5620996
GK
195
196 case 'x': /* something random, like an identifier. */
d78e771d
ZW
197 switch (code)
198 {
199 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
200 case TREE_LIST: return sizeof (struct tree_list);
201 case TREE_VEC: return (sizeof (struct tree_vec)
202 + TREE_VEC_LENGTH(node) * sizeof(char *)
203 - sizeof (char *));
204
205 case ERROR_MARK:
206 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
207
208 default:
209 return (*lang_hooks.tree_size) (code);
210 }
c5620996
GK
211
212 default:
213 abort ();
214 }
215}
216
c6a1db6c 217/* Return a newly allocated node of code CODE.
c6a1db6c
RS
218 For decl and type nodes, some other fields are initialized.
219 The rest of the node is initialized to zero.
220
221 Achoo! I got a code in the node. */
222
223tree
224make_node (code)
225 enum tree_code code;
226{
b3694847
SS
227 tree t;
228 int type = TREE_CODE_CLASS (code);
229 size_t length;
5e9defae 230#ifdef GATHER_STATISTICS
b3694847 231 tree_node_kind kind;
5e9defae 232#endif
c5620996 233 struct tree_common ttmp;
3b03c671 234
c5620996
GK
235 /* We can't allocate a TREE_VEC without knowing how many elements
236 it will have. */
237 if (code == TREE_VEC)
238 abort ();
3b03c671 239
c5620996
GK
240 TREE_SET_CODE ((tree)&ttmp, code);
241 length = tree_size ((tree)&ttmp);
c6a1db6c 242
c5620996 243#ifdef GATHER_STATISTICS
c6a1db6c
RS
244 switch (type)
245 {
246 case 'd': /* A decl node */
c6a1db6c 247 kind = d_kind;
c6a1db6c
RS
248 break;
249
250 case 't': /* a type node */
c6a1db6c 251 kind = t_kind;
c6a1db6c
RS
252 break;
253
03646189 254 case 'b': /* a lexical block */
03646189 255 kind = b_kind;
03646189
RS
256 break;
257
c6a1db6c 258 case 's': /* an expression with side effects */
c6a1db6c 259 kind = s_kind;
c5620996
GK
260 break;
261
c6a1db6c 262 case 'r': /* a reference */
c6a1db6c 263 kind = r_kind;
c5620996
GK
264 break;
265
c6a1db6c
RS
266 case 'e': /* an expression */
267 case '<': /* a comparison expression */
268 case '1': /* a unary arithmetic expression */
269 case '2': /* a binary arithmetic expression */
c6a1db6c 270 kind = e_kind;
c6a1db6c
RS
271 break;
272
273 case 'c': /* a constant */
c6a1db6c 274 kind = c_kind;
66212c2f 275 break;
c6a1db6c
RS
276
277 case 'x': /* something random, like an identifier. */
c6a1db6c
RS
278 if (code == IDENTIFIER_NODE)
279 kind = id_kind;
c6a1db6c
RS
280 else if (code == TREE_VEC)
281 kind = vec_kind;
282 else
283 kind = x_kind;
a7fcb968
RK
284 break;
285
286 default:
287 abort ();
c6a1db6c
RS
288 }
289
dc478a5d
KH
290 tree_node_counts[(int) kind]++;
291 tree_node_sizes[(int) kind] += length;
c6a1db6c
RS
292#endif
293
c5620996
GK
294 t = ggc_alloc_tree (length);
295
fad205ff 296 memset (t, 0, length);
c5620996 297
c6a1db6c 298 TREE_SET_CODE (t, code);
c6a1db6c
RS
299
300 switch (type)
301 {
302 case 's':
303 TREE_SIDE_EFFECTS (t) = 1;
c6a1db6c
RS
304 break;
305
306 case 'd':
c0920bf9 307 if (code != FUNCTION_DECL)
c7ee7249 308 DECL_ALIGN (t) = 1;
11cf4d18 309 DECL_USER_ALIGN (t) = 0;
23dfa477 310 DECL_IN_SYSTEM_HEADER (t) = in_system_header;
d479d37f 311 DECL_SOURCE_LINE (t) = input_line;
dc478a5d 312 DECL_SOURCE_FILE (t) =
a8a05998 313 (input_filename) ? input_filename : "<built-in>";
0e77444b 314 DECL_UID (t) = next_decl_uid++;
128e8aa9
RK
315
316 /* We have not yet computed the alias set for this declaration. */
3932261a 317 DECL_POINTER_ALIAS_SET (t) = -1;
c6a1db6c
RS
318 break;
319
320 case 't':
579f50b6 321 TYPE_UID (t) = next_type_uid++;
13c6f0d5 322 TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
11cf4d18 323 TYPE_USER_ALIGN (t) = 0;
c6a1db6c 324 TYPE_MAIN_VARIANT (t) = t;
128e8aa9
RK
325
326 /* Default to no attributes for type, but let target change that. */
91e97eb8 327 TYPE_ATTRIBUTES (t) = NULL_TREE;
f6897b10 328 (*targetm.set_default_type_attributes) (t);
128e8aa9
RK
329
330 /* We have not yet computed the alias set for this type. */
41472af8 331 TYPE_ALIAS_SET (t) = -1;
c6a1db6c
RS
332 break;
333
334 case 'c':
335 TREE_CONSTANT (t) = 1;
336 break;
783feeb0
MM
337
338 case 'e':
339 switch (code)
340 {
341 case INIT_EXPR:
342 case MODIFY_EXPR:
343 case VA_ARG_EXPR:
344 case RTL_EXPR:
345 case PREDECREMENT_EXPR:
346 case PREINCREMENT_EXPR:
347 case POSTDECREMENT_EXPR:
348 case POSTINCREMENT_EXPR:
349 /* All of these have side-effects, no matter what their
350 operands are. */
351 TREE_SIDE_EFFECTS (t) = 1;
352 break;
dc478a5d 353
783feeb0
MM
354 default:
355 break;
356 }
357 break;
c6a1db6c
RS
358 }
359
360 return t;
361}
362\f
c3da6f12 363/* Return a new node with the same contents as NODE except that its
3af4c257 364 TREE_CHAIN is zero and it has a fresh uid. */
c6a1db6c
RS
365
366tree
367copy_node (node)
368 tree node;
369{
b3694847
SS
370 tree t;
371 enum tree_code code = TREE_CODE (node);
372 size_t length;
c6a1db6c 373
c5620996 374 length = tree_size (node);
1f8f4a0b 375 t = ggc_alloc_tree (length);
2e28f042 376 memcpy (t, node, length);
c6a1db6c 377
1e54d32b 378 TREE_CHAIN (t) = 0;
69b7087e 379 TREE_ASM_WRITTEN (t) = 0;
c6a1db6c 380
579f50b6
RK
381 if (TREE_CODE_CLASS (code) == 'd')
382 DECL_UID (t) = next_decl_uid++;
383 else if (TREE_CODE_CLASS (code) == 't')
d9cbc259
RK
384 {
385 TYPE_UID (t) = next_type_uid++;
28238567
PB
386 /* The following is so that the debug code for
387 the copy is different from the original type.
388 The two statements usually duplicate each other
389 (because they clear fields of the same union),
0f41302f 390 but the optimizer should catch that. */
28238567
PB
391 TYPE_SYMTAB_POINTER (t) = 0;
392 TYPE_SYMTAB_ADDRESS (t) = 0;
d9cbc259 393 }
579f50b6 394
c6a1db6c
RS
395 return t;
396}
397
398/* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
399 For example, this can copy a list made of TREE_LIST nodes. */
400
401tree
402copy_list (list)
403 tree list;
404{
405 tree head;
b3694847 406 tree prev, next;
c6a1db6c
RS
407
408 if (list == 0)
409 return 0;
410
411 head = prev = copy_node (list);
412 next = TREE_CHAIN (list);
413 while (next)
414 {
415 TREE_CHAIN (prev) = copy_node (next);
416 prev = TREE_CHAIN (prev);
417 next = TREE_CHAIN (next);
418 }
419 return head;
420}
a94dbf2c 421
c6a1db6c
RS
422\f
423/* Return a newly constructed INTEGER_CST node whose constant value
424 is specified by the two ints LOW and HI.
dc478a5d 425 The TREE_TYPE is set to `int'.
37366632
RK
426
427 This function should be used via the `build_int_2' macro. */
c6a1db6c
RS
428
429tree
37366632 430build_int_2_wide (low, hi)
f9e158c3
JM
431 unsigned HOST_WIDE_INT low;
432 HOST_WIDE_INT hi;
c6a1db6c 433{
b3694847 434 tree t = make_node (INTEGER_CST);
d4b60170 435
c6a1db6c
RS
436 TREE_INT_CST_LOW (t) = low;
437 TREE_INT_CST_HIGH (t) = hi;
438 TREE_TYPE (t) = integer_type_node;
439 return t;
440}
441
69ef87e2
AH
442/* Return a new VECTOR_CST node whose type is TYPE and whose values
443 are in a list pointed by VALS. */
444
445tree
446build_vector (type, vals)
447 tree type, vals;
448{
449 tree v = make_node (VECTOR_CST);
450 int over1 = 0, over2 = 0;
451 tree link;
452
453 TREE_VECTOR_CST_ELTS (v) = vals;
454 TREE_TYPE (v) = type;
455
456 /* Iterate through elements and check for overflow. */
457 for (link = vals; link; link = TREE_CHAIN (link))
458 {
459 tree value = TREE_VALUE (link);
460
461 over1 |= TREE_OVERFLOW (value);
462 over2 |= TREE_CONSTANT_OVERFLOW (value);
463 }
3b03c671 464
69ef87e2
AH
465 TREE_OVERFLOW (v) = over1;
466 TREE_CONSTANT_OVERFLOW (v) = over2;
467
468 return v;
469}
470
dcf92453
ZW
471/* Return a new CONSTRUCTOR node whose type is TYPE and whose values
472 are in a list pointed to by VALS. */
473tree
474build_constructor (type, vals)
475 tree type, vals;
476{
477 tree c = make_node (CONSTRUCTOR);
478 TREE_TYPE (c) = type;
479 CONSTRUCTOR_ELTS (c) = vals;
480
481 /* ??? May not be necessary. Mirrors what build does. */
482 if (vals)
483 {
484 TREE_SIDE_EFFECTS (c) = TREE_SIDE_EFFECTS (vals);
485 TREE_READONLY (c) = TREE_READONLY (vals);
486 TREE_CONSTANT (c) = TREE_CONSTANT (vals);
487 }
488 else
489 TREE_CONSTANT (c) = 0; /* safe side */
490
491 return c;
492}
493
c6a1db6c
RS
494/* Return a new REAL_CST node whose type is TYPE and value is D. */
495
496tree
497build_real (type, d)
498 tree type;
499 REAL_VALUE_TYPE d;
500{
501 tree v;
11ad4784 502 REAL_VALUE_TYPE *dp;
0afbe93d 503 int overflow = 0;
c6a1db6c 504
efdc7e19
RH
505 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
506 Consider doing it via real_convert now. */
c6a1db6c
RS
507
508 v = make_node (REAL_CST);
11ad4784
ZW
509 dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
510 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
41077ce4 511
c6a1db6c 512 TREE_TYPE (v) = type;
11ad4784 513 TREE_REAL_CST_PTR (v) = dp;
0afbe93d 514 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
c6a1db6c
RS
515 return v;
516}
517
518/* Return a new REAL_CST node whose type is TYPE
519 and whose value is the integer value of the INTEGER_CST node I. */
520
c6a1db6c 521REAL_VALUE_TYPE
84c7be4b 522real_value_from_int_cst (type, i)
7bdb32b9 523 tree type ATTRIBUTE_UNUSED, i;
c6a1db6c
RS
524{
525 REAL_VALUE_TYPE d;
2026444a 526
e545d37f
RK
527 /* Clear all bits of the real value type so that we can later do
528 bitwise comparisons to see if two values are the same. */
da61dec9 529 memset ((char *) &d, 0, sizeof d);
e545d37f 530
15c76378 531 if (! TREE_UNSIGNED (TREE_TYPE (i)))
84c7be4b
RK
532 REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
533 TYPE_MODE (type));
15c76378 534 else
84c7be4b
RK
535 REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
536 TREE_INT_CST_HIGH (i), TYPE_MODE (type));
c6a1db6c
RS
537 return d;
538}
539
d4b60170 540/* Given a tree representing an integer constant I, return a tree
15e5ad76 541 representing the same value as a floating-point constant of type TYPE. */
c6a1db6c
RS
542
543tree
544build_real_from_int_cst (type, i)
545 tree type;
546 tree i;
547{
548 tree v;
53d74c3c 549 int overflow = TREE_OVERFLOW (i);
c6a1db6c 550
11ad4784 551 v = build_real (type, real_value_from_int_cst (type, i));
c6a1db6c 552
11ad4784
ZW
553 TREE_OVERFLOW (v) |= overflow;
554 TREE_CONSTANT_OVERFLOW (v) |= overflow;
c6a1db6c
RS
555 return v;
556}
557
c6a1db6c
RS
558/* Return a newly constructed STRING_CST node whose value is
559 the LEN characters at STR.
560 The TREE_TYPE is not initialized. */
561
562tree
563build_string (len, str)
564 int len;
37b37199 565 const char *str;
c6a1db6c 566{
b3694847 567 tree s = make_node (STRING_CST);
d4b60170 568
c6a1db6c 569 TREE_STRING_LENGTH (s) = len;
1f8f4a0b 570 TREE_STRING_POINTER (s) = ggc_alloc_string (str, len);
d4b60170 571
c6a1db6c
RS
572 return s;
573}
574
575/* Return a newly constructed COMPLEX_CST node whose value is
576 specified by the real and imaginary parts REAL and IMAG.
b217d7fe
RK
577 Both REAL and IMAG should be constant nodes. TYPE, if specified,
578 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
c6a1db6c
RS
579
580tree
b217d7fe
RK
581build_complex (type, real, imag)
582 tree type;
c6a1db6c
RS
583 tree real, imag;
584{
b3694847 585 tree t = make_node (COMPLEX_CST);
53d74c3c 586
c6a1db6c
RS
587 TREE_REALPART (t) = real;
588 TREE_IMAGPART (t) = imag;
b217d7fe 589 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
53d74c3c
RK
590 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
591 TREE_CONSTANT_OVERFLOW (t)
592 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
c6a1db6c
RS
593 return t;
594}
595
596/* Build a newly constructed TREE_VEC node of length LEN. */
0f41302f 597
c6a1db6c
RS
598tree
599make_tree_vec (len)
600 int len;
601{
b3694847 602 tree t;
3b03c671 603 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
c6a1db6c
RS
604
605#ifdef GATHER_STATISTICS
3b03c671
KH
606 tree_node_counts[(int) vec_kind]++;
607 tree_node_sizes[(int) vec_kind] += length;
c6a1db6c
RS
608#endif
609
1f8f4a0b 610 t = ggc_alloc_tree (length);
508f8149 611
fad205ff 612 memset (t, 0, length);
c6a1db6c
RS
613 TREE_SET_CODE (t, TREE_VEC);
614 TREE_VEC_LENGTH (t) = len;
c6a1db6c
RS
615
616 return t;
617}
618\f
9ad265b0
RK
619/* Return 1 if EXPR is the integer constant zero or a complex constant
620 of zero. */
c6a1db6c
RS
621
622int
623integer_zerop (expr)
624 tree expr;
625{
d964285c 626 STRIP_NOPS (expr);
c6a1db6c 627
9ad265b0 628 return ((TREE_CODE (expr) == INTEGER_CST
1ac876be 629 && ! TREE_CONSTANT_OVERFLOW (expr)
9ad265b0
RK
630 && TREE_INT_CST_LOW (expr) == 0
631 && TREE_INT_CST_HIGH (expr) == 0)
632 || (TREE_CODE (expr) == COMPLEX_CST
633 && integer_zerop (TREE_REALPART (expr))
634 && integer_zerop (TREE_IMAGPART (expr))));
c6a1db6c
RS
635}
636
9ad265b0
RK
637/* Return 1 if EXPR is the integer constant one or the corresponding
638 complex constant. */
c6a1db6c
RS
639
640int
641integer_onep (expr)
642 tree expr;
643{
d964285c 644 STRIP_NOPS (expr);
c6a1db6c 645
9ad265b0 646 return ((TREE_CODE (expr) == INTEGER_CST
1ac876be 647 && ! TREE_CONSTANT_OVERFLOW (expr)
9ad265b0
RK
648 && TREE_INT_CST_LOW (expr) == 1
649 && TREE_INT_CST_HIGH (expr) == 0)
650 || (TREE_CODE (expr) == COMPLEX_CST
651 && integer_onep (TREE_REALPART (expr))
652 && integer_zerop (TREE_IMAGPART (expr))));
c6a1db6c
RS
653}
654
9ad265b0
RK
655/* Return 1 if EXPR is an integer containing all 1's in as much precision as
656 it contains. Likewise for the corresponding complex constant. */
c6a1db6c
RS
657
658int
659integer_all_onesp (expr)
660 tree expr;
661{
b3694847
SS
662 int prec;
663 int uns;
c6a1db6c 664
d964285c 665 STRIP_NOPS (expr);
c6a1db6c 666
9ad265b0
RK
667 if (TREE_CODE (expr) == COMPLEX_CST
668 && integer_all_onesp (TREE_REALPART (expr))
669 && integer_zerop (TREE_IMAGPART (expr)))
670 return 1;
671
1ac876be
RK
672 else if (TREE_CODE (expr) != INTEGER_CST
673 || TREE_CONSTANT_OVERFLOW (expr))
c6a1db6c
RS
674 return 0;
675
676 uns = TREE_UNSIGNED (TREE_TYPE (expr));
677 if (!uns)
dc478a5d 678 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
05bccae2 679 && TREE_INT_CST_HIGH (expr) == -1);
c6a1db6c 680
8980b5a3
RK
681 /* Note that using TYPE_PRECISION here is wrong. We care about the
682 actual bits, not the (arbitrary) range of the type. */
683 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
37366632 684 if (prec >= HOST_BITS_PER_WIDE_INT)
c6a1db6c 685 {
05bccae2
RK
686 HOST_WIDE_INT high_value;
687 int shift_amount;
c6a1db6c 688
37366632 689 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
c6a1db6c 690
37366632 691 if (shift_amount > HOST_BITS_PER_WIDE_INT)
c6a1db6c
RS
692 /* Can not handle precisions greater than twice the host int size. */
693 abort ();
37366632 694 else if (shift_amount == HOST_BITS_PER_WIDE_INT)
c6a1db6c
RS
695 /* Shifting by the host word size is undefined according to the ANSI
696 standard, so we must handle this as a special case. */
697 high_value = -1;
698 else
37366632 699 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
c6a1db6c 700
dc478a5d 701 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
05bccae2 702 && TREE_INT_CST_HIGH (expr) == high_value);
c6a1db6c
RS
703 }
704 else
05bccae2 705 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
c6a1db6c
RS
706}
707
708/* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
709 one bit on). */
710
711int
712integer_pow2p (expr)
713 tree expr;
714{
5cb1f2fa 715 int prec;
37366632 716 HOST_WIDE_INT high, low;
c6a1db6c 717
d964285c 718 STRIP_NOPS (expr);
c6a1db6c 719
9ad265b0
RK
720 if (TREE_CODE (expr) == COMPLEX_CST
721 && integer_pow2p (TREE_REALPART (expr))
722 && integer_zerop (TREE_IMAGPART (expr)))
723 return 1;
724
1ac876be 725 if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
c6a1db6c
RS
726 return 0;
727
e5e809f4 728 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
5cb1f2fa 729 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
c6a1db6c
RS
730 high = TREE_INT_CST_HIGH (expr);
731 low = TREE_INT_CST_LOW (expr);
732
5cb1f2fa
RK
733 /* First clear all bits that are beyond the type's precision in case
734 we've been sign extended. */
735
736 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
737 ;
738 else if (prec > HOST_BITS_PER_WIDE_INT)
739 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
740 else
741 {
742 high = 0;
743 if (prec < HOST_BITS_PER_WIDE_INT)
744 low &= ~((HOST_WIDE_INT) (-1) << prec);
745 }
746
c6a1db6c
RS
747 if (high == 0 && low == 0)
748 return 0;
749
750 return ((high == 0 && (low & (low - 1)) == 0)
751 || (low == 0 && (high & (high - 1)) == 0));
752}
753
4977bab6
ZW
754/* Return 1 if EXPR is an integer constant other than zero or a
755 complex constant other than zero. */
756
757int
758integer_nonzerop (expr)
759 tree expr;
760{
761 STRIP_NOPS (expr);
762
763 return ((TREE_CODE (expr) == INTEGER_CST
764 && ! TREE_CONSTANT_OVERFLOW (expr)
765 && (TREE_INT_CST_LOW (expr) != 0
766 || TREE_INT_CST_HIGH (expr) != 0))
767 || (TREE_CODE (expr) == COMPLEX_CST
768 && (integer_nonzerop (TREE_REALPART (expr))
769 || integer_nonzerop (TREE_IMAGPART (expr)))));
770}
771
5cb1f2fa
RK
772/* Return the power of two represented by a tree node known to be a
773 power of two. */
774
775int
776tree_log2 (expr)
777 tree expr;
778{
779 int prec;
780 HOST_WIDE_INT high, low;
781
782 STRIP_NOPS (expr);
783
784 if (TREE_CODE (expr) == COMPLEX_CST)
785 return tree_log2 (TREE_REALPART (expr));
786
e5e809f4 787 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
5cb1f2fa
RK
788 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
789
790 high = TREE_INT_CST_HIGH (expr);
791 low = TREE_INT_CST_LOW (expr);
792
793 /* First clear all bits that are beyond the type's precision in case
794 we've been sign extended. */
795
796 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
797 ;
798 else if (prec > HOST_BITS_PER_WIDE_INT)
799 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
800 else
801 {
802 high = 0;
803 if (prec < HOST_BITS_PER_WIDE_INT)
804 low &= ~((HOST_WIDE_INT) (-1) << prec);
805 }
806
807 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
dc478a5d 808 : exact_log2 (low));
5cb1f2fa
RK
809}
810
05bccae2
RK
811/* Similar, but return the largest integer Y such that 2 ** Y is less
812 than or equal to EXPR. */
813
814int
815tree_floor_log2 (expr)
816 tree expr;
817{
818 int prec;
819 HOST_WIDE_INT high, low;
820
821 STRIP_NOPS (expr);
822
823 if (TREE_CODE (expr) == COMPLEX_CST)
824 return tree_log2 (TREE_REALPART (expr));
825
826 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
827 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
828
829 high = TREE_INT_CST_HIGH (expr);
830 low = TREE_INT_CST_LOW (expr);
831
832 /* First clear all bits that are beyond the type's precision in case
833 we've been sign extended. Ignore if type's precision hasn't been set
834 since what we are doing is setting it. */
835
836 if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
837 ;
838 else if (prec > HOST_BITS_PER_WIDE_INT)
839 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
840 else
841 {
842 high = 0;
843 if (prec < HOST_BITS_PER_WIDE_INT)
844 low &= ~((HOST_WIDE_INT) (-1) << prec);
845 }
846
847 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
848 : floor_log2 (low));
849}
850
c6a1db6c
RS
851/* Return 1 if EXPR is the real constant zero. */
852
853int
854real_zerop (expr)
855 tree expr;
856{
d964285c 857 STRIP_NOPS (expr);
c6a1db6c 858
9ad265b0 859 return ((TREE_CODE (expr) == REAL_CST
1ac876be 860 && ! TREE_CONSTANT_OVERFLOW (expr)
9ad265b0
RK
861 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
862 || (TREE_CODE (expr) == COMPLEX_CST
863 && real_zerop (TREE_REALPART (expr))
864 && real_zerop (TREE_IMAGPART (expr))));
c6a1db6c
RS
865}
866
9ad265b0 867/* Return 1 if EXPR is the real constant one in real or complex form. */
c6a1db6c
RS
868
869int
870real_onep (expr)
871 tree expr;
872{
d964285c 873 STRIP_NOPS (expr);
c6a1db6c 874
9ad265b0 875 return ((TREE_CODE (expr) == REAL_CST
1ac876be 876 && ! TREE_CONSTANT_OVERFLOW (expr)
9ad265b0
RK
877 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
878 || (TREE_CODE (expr) == COMPLEX_CST
879 && real_onep (TREE_REALPART (expr))
880 && real_zerop (TREE_IMAGPART (expr))));
c6a1db6c
RS
881}
882
883/* Return 1 if EXPR is the real constant two. */
884
885int
886real_twop (expr)
887 tree expr;
888{
d964285c 889 STRIP_NOPS (expr);
c6a1db6c 890
9ad265b0 891 return ((TREE_CODE (expr) == REAL_CST
1ac876be 892 && ! TREE_CONSTANT_OVERFLOW (expr)
9ad265b0
RK
893 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
894 || (TREE_CODE (expr) == COMPLEX_CST
895 && real_twop (TREE_REALPART (expr))
896 && real_zerop (TREE_IMAGPART (expr))));
c6a1db6c
RS
897}
898
378393da
RS
899/* Return 1 if EXPR is the real constant minus one. */
900
901int
902real_minus_onep (expr)
903 tree expr;
904{
905 STRIP_NOPS (expr);
906
907 return ((TREE_CODE (expr) == REAL_CST
908 && ! TREE_CONSTANT_OVERFLOW (expr)
909 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1))
910 || (TREE_CODE (expr) == COMPLEX_CST
911 && real_minus_onep (TREE_REALPART (expr))
912 && real_zerop (TREE_IMAGPART (expr))));
913}
914
c6a1db6c 915/* Nonzero if EXP is a constant or a cast of a constant. */
dc478a5d 916
c6a1db6c
RS
917int
918really_constant_p (exp)
919 tree exp;
920{
d964285c 921 /* This is not quite the same as STRIP_NOPS. It does more. */
c6a1db6c
RS
922 while (TREE_CODE (exp) == NOP_EXPR
923 || TREE_CODE (exp) == CONVERT_EXPR
924 || TREE_CODE (exp) == NON_LVALUE_EXPR)
925 exp = TREE_OPERAND (exp, 0);
926 return TREE_CONSTANT (exp);
927}
928\f
929/* Return first list element whose TREE_VALUE is ELEM.
2a3c15b5 930 Return 0 if ELEM is not in LIST. */
c6a1db6c
RS
931
932tree
933value_member (elem, list)
934 tree elem, list;
935{
936 while (list)
937 {
938 if (elem == TREE_VALUE (list))
939 return list;
940 list = TREE_CHAIN (list);
941 }
942 return NULL_TREE;
943}
944
945/* Return first list element whose TREE_PURPOSE is ELEM.
2a3c15b5 946 Return 0 if ELEM is not in LIST. */
c6a1db6c
RS
947
948tree
949purpose_member (elem, list)
950 tree elem, list;
951{
952 while (list)
953 {
954 if (elem == TREE_PURPOSE (list))
955 return list;
956 list = TREE_CHAIN (list);
957 }
958 return NULL_TREE;
959}
960
961/* Return first list element whose BINFO_TYPE is ELEM.
2a3c15b5 962 Return 0 if ELEM is not in LIST. */
c6a1db6c
RS
963
964tree
965binfo_member (elem, list)
966 tree elem, list;
967{
968 while (list)
969 {
970 if (elem == BINFO_TYPE (list))
971 return list;
972 list = TREE_CHAIN (list);
973 }
974 return NULL_TREE;
975}
976
0f41302f 977/* Return nonzero if ELEM is part of the chain CHAIN. */
c6a1db6c
RS
978
979int
980chain_member (elem, chain)
981 tree elem, chain;
982{
983 while (chain)
984 {
985 if (elem == chain)
986 return 1;
987 chain = TREE_CHAIN (chain);
988 }
989
990 return 0;
991}
992
993/* Return the length of a chain of nodes chained through TREE_CHAIN.
994 We expect a null pointer to mark the end of the chain.
995 This is the Lisp primitive `length'. */
996
997int
998list_length (t)
999 tree t;
1000{
b3694847
SS
1001 tree tail;
1002 int len = 0;
c6a1db6c
RS
1003
1004 for (tail = t; tail; tail = TREE_CHAIN (tail))
1005 len++;
1006
1007 return len;
1008}
1009
c3b247b4
JM
1010/* Returns the number of FIELD_DECLs in TYPE. */
1011
1012int
1013fields_length (type)
1014 tree type;
1015{
1016 tree t = TYPE_FIELDS (type);
1017 int count = 0;
1018
1019 for (; t; t = TREE_CHAIN (t))
1020 if (TREE_CODE (t) == FIELD_DECL)
1021 ++count;
1022
1023 return count;
1024}
1025
c6a1db6c
RS
1026/* Concatenate two chains of nodes (chained through TREE_CHAIN)
1027 by modifying the last node in chain 1 to point to chain 2.
1028 This is the Lisp primitive `nconc'. */
1029
1030tree
1031chainon (op1, op2)
1032 tree op1, op2;
1033{
66ea6f4c 1034 tree t1;
c6a1db6c 1035
66ea6f4c
RH
1036 if (!op1)
1037 return op2;
1038 if (!op2)
1039 return op1;
1040
1041 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1042 continue;
1043 TREE_CHAIN (t1) = op2;
1810c3fa 1044
f4524c9e 1045#ifdef ENABLE_TREE_CHECKING
66ea6f4c
RH
1046 {
1047 tree t2;
1048 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1049 if (t2 == t1)
1050 abort (); /* Circularity created. */
1051 }
0f4668ef 1052#endif
66ea6f4c
RH
1053
1054 return op1;
c6a1db6c
RS
1055}
1056
1057/* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1058
1059tree
1060tree_last (chain)
b3694847 1061 tree chain;
c6a1db6c 1062{
b3694847 1063 tree next;
c6a1db6c 1064 if (chain)
5e9defae 1065 while ((next = TREE_CHAIN (chain)))
c6a1db6c
RS
1066 chain = next;
1067 return chain;
1068}
1069
1070/* Reverse the order of elements in the chain T,
1071 and return the new head of the chain (old last element). */
1072
1073tree
1074nreverse (t)
1075 tree t;
1076{
b3694847 1077 tree prev = 0, decl, next;
c6a1db6c
RS
1078 for (decl = t; decl; decl = next)
1079 {
1080 next = TREE_CHAIN (decl);
1081 TREE_CHAIN (decl) = prev;
1082 prev = decl;
1083 }
1084 return prev;
1085}
c6a1db6c
RS
1086\f
1087/* Return a newly created TREE_LIST node whose
1088 purpose and value fields are PARM and VALUE. */
1089
1090tree
1091build_tree_list (parm, value)
1092 tree parm, value;
1093{
b3694847 1094 tree t = make_node (TREE_LIST);
c6a1db6c
RS
1095 TREE_PURPOSE (t) = parm;
1096 TREE_VALUE (t) = value;
1097 return t;
1098}
1099
c6a1db6c 1100/* Return a newly created TREE_LIST node whose
411e2759 1101 purpose and value fields are PURPOSE and VALUE
c6a1db6c
RS
1102 and whose TREE_CHAIN is CHAIN. */
1103
1104tree
1105tree_cons (purpose, value, chain)
1106 tree purpose, value, chain;
1107{
b3694847 1108 tree node;
a3770a81 1109
1f8f4a0b 1110 node = ggc_alloc_tree (sizeof (struct tree_list));
f8a83ee3
ZW
1111
1112 memset (node, 0, sizeof (struct tree_common));
a3770a81 1113
c6a1db6c 1114#ifdef GATHER_STATISTICS
ad41cc2a
RK
1115 tree_node_counts[(int) x_kind]++;
1116 tree_node_sizes[(int) x_kind] += sizeof (struct tree_list);
c6a1db6c
RS
1117#endif
1118
c6a1db6c 1119 TREE_SET_CODE (node, TREE_LIST);
c6a1db6c
RS
1120 TREE_CHAIN (node) = chain;
1121 TREE_PURPOSE (node) = purpose;
1122 TREE_VALUE (node) = value;
1123 return node;
1124}
1125
066f50a9
JM
1126/* Return the first expression in a sequence of COMPOUND_EXPRs. */
1127
1128tree
1129expr_first (tree expr)
1130{
1131 if (expr == NULL_TREE)
1132 return expr;
1133 while (TREE_CODE (expr) == COMPOUND_EXPR)
1134 expr = TREE_OPERAND (expr, 0);
1135 return expr;
1136}
1137
1cd69e2b
JM
1138/* Return the last expression in a sequence of COMPOUND_EXPRs. */
1139
1140tree
066f50a9 1141expr_last (tree expr)
1cd69e2b
JM
1142{
1143 if (expr == NULL_TREE)
1144 return expr;
1145 while (TREE_CODE (expr) == COMPOUND_EXPR)
1146 expr = TREE_OPERAND (expr, 1);
1147 return expr;
1148}
066f50a9
JM
1149
1150/* Return the number of subexpressions in a sequence of COMPOUND_EXPRs. */
1151
1152int
1153expr_length (tree expr)
1154{
1155 int len = 0;
1156
1157 if (expr == NULL_TREE)
1158 return 0;
1159 for (; TREE_CODE (expr) == COMPOUND_EXPR; expr = TREE_OPERAND (expr, 1))
1160 len += expr_length (TREE_OPERAND (expr, 0));
1161 ++len;
1162 return len;
1163}
c6a1db6c
RS
1164\f
1165/* Return the size nominally occupied by an object of type TYPE
1166 when it resides in memory. The value is measured in units of bytes,
1167 and its data type is that normally used for type sizes
1168 (which is the first type created by make_signed_type or
1169 make_unsigned_type). */
1170
1171tree
1172size_in_bytes (type)
1173 tree type;
1174{
cdc5a032
RS
1175 tree t;
1176
c6a1db6c
RS
1177 if (type == error_mark_node)
1178 return integer_zero_node;
ead17059 1179
c6a1db6c 1180 type = TYPE_MAIN_VARIANT (type);
ead17059 1181 t = TYPE_SIZE_UNIT (type);
d4b60170 1182
ead17059 1183 if (t == 0)
c6a1db6c 1184 {
7a228918 1185 (*lang_hooks.types.incomplete_type_error) (NULL_TREE, type);
dc397323 1186 return size_zero_node;
c6a1db6c 1187 }
d4b60170 1188
4d7d0403 1189 if (TREE_CODE (t) == INTEGER_CST)
b6542989 1190 force_fit_type (t, 0);
ead17059 1191
cdc5a032 1192 return t;
c6a1db6c
RS
1193}
1194
e5e809f4
JL
1195/* Return the size of TYPE (in bytes) as a wide integer
1196 or return -1 if the size can vary or is larger than an integer. */
c6a1db6c 1197
e5e809f4 1198HOST_WIDE_INT
c6a1db6c
RS
1199int_size_in_bytes (type)
1200 tree type;
1201{
e5e809f4
JL
1202 tree t;
1203
c6a1db6c
RS
1204 if (type == error_mark_node)
1205 return 0;
e5e809f4 1206
c6a1db6c 1207 type = TYPE_MAIN_VARIANT (type);
ead17059
RH
1208 t = TYPE_SIZE_UNIT (type);
1209 if (t == 0
1210 || TREE_CODE (t) != INTEGER_CST
d4b60170 1211 || TREE_OVERFLOW (t)
665f2503
RK
1212 || TREE_INT_CST_HIGH (t) != 0
1213 /* If the result would appear negative, it's too big to represent. */
1214 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
c6a1db6c 1215 return -1;
e5e809f4
JL
1216
1217 return TREE_INT_CST_LOW (t);
c6a1db6c 1218}
665f2503
RK
1219\f
1220/* Return the bit position of FIELD, in bits from the start of the record.
1221 This is a tree of type bitsizetype. */
1222
1223tree
1224bit_position (field)
1225 tree field;
1226{
f2704b9f
RK
1227 return bit_from_pos (DECL_FIELD_OFFSET (field),
1228 DECL_FIELD_BIT_OFFSET (field));
665f2503 1229}
729a2125 1230
665f2503
RK
1231/* Likewise, but return as an integer. Abort if it cannot be represented
1232 in that way (since it could be a signed value, we don't have the option
1233 of returning -1 like int_size_in_byte can. */
1234
1235HOST_WIDE_INT
1236int_bit_position (field)
1237 tree field;
1238{
1239 return tree_low_cst (bit_position (field), 0);
1240}
1241\f
770ae6cc
RK
1242/* Return the byte position of FIELD, in bytes from the start of the record.
1243 This is a tree of type sizetype. */
1244
1245tree
1246byte_position (field)
1247 tree field;
1248{
f2704b9f
RK
1249 return byte_from_pos (DECL_FIELD_OFFSET (field),
1250 DECL_FIELD_BIT_OFFSET (field));
770ae6cc
RK
1251}
1252
1253/* Likewise, but return as an integer. Abort if it cannot be represented
1254 in that way (since it could be a signed value, we don't have the option
1255 of returning -1 like int_size_in_byte can. */
1256
1257HOST_WIDE_INT
1258int_byte_position (field)
1259 tree field;
1260{
1261 return tree_low_cst (byte_position (field), 0);
1262}
1263\f
665f2503 1264/* Return the strictest alignment, in bits, that T is known to have. */
729a2125
RK
1265
1266unsigned int
1267expr_align (t)
1268 tree t;
1269{
1270 unsigned int align0, align1;
1271
1272 switch (TREE_CODE (t))
1273 {
1274 case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
1275 /* If we have conversions, we know that the alignment of the
1276 object must meet each of the alignments of the types. */
1277 align0 = expr_align (TREE_OPERAND (t, 0));
1278 align1 = TYPE_ALIGN (TREE_TYPE (t));
1279 return MAX (align0, align1);
1280
1281 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
1282 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
1283 case WITH_RECORD_EXPR: case CLEANUP_POINT_EXPR: case UNSAVE_EXPR:
1284 /* These don't change the alignment of an object. */
1285 return expr_align (TREE_OPERAND (t, 0));
1286
1287 case COND_EXPR:
1288 /* The best we can do is say that the alignment is the least aligned
1289 of the two arms. */
1290 align0 = expr_align (TREE_OPERAND (t, 1));
1291 align1 = expr_align (TREE_OPERAND (t, 2));
1292 return MIN (align0, align1);
1293
06ceef4e 1294 case LABEL_DECL: case CONST_DECL:
729a2125
RK
1295 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
1296 if (DECL_ALIGN (t) != 0)
1297 return DECL_ALIGN (t);
1298 break;
1299
06ceef4e
RK
1300 case FUNCTION_DECL:
1301 return FUNCTION_BOUNDARY;
1302
729a2125
RK
1303 default:
1304 break;
1305 }
1306
1307 /* Otherwise take the alignment from that of the type. */
1308 return TYPE_ALIGN (TREE_TYPE (t));
1309}
c0560b8b
RK
1310\f
1311/* Return, as a tree node, the number of elements for TYPE (which is an
d26f8097 1312 ARRAY_TYPE) minus one. This counts only elements of the top array. */
c6a1db6c
RS
1313
1314tree
1315array_type_nelts (type)
1316 tree type;
1317{
7671d67b
BK
1318 tree index_type, min, max;
1319
1320 /* If they did it with unspecified bounds, then we should have already
1321 given an error about it before we got here. */
1322 if (! TYPE_DOMAIN (type))
1323 return error_mark_node;
1324
1325 index_type = TYPE_DOMAIN (type);
1326 min = TYPE_MIN_VALUE (index_type);
1327 max = TYPE_MAX_VALUE (index_type);
83b853c9 1328
83b853c9
JM
1329 return (integer_zerop (min)
1330 ? max
1331 : fold (build (MINUS_EXPR, TREE_TYPE (max), max, min)));
c6a1db6c
RS
1332}
1333\f
1334/* Return nonzero if arg is static -- a reference to an object in
1335 static storage. This is not the same as the C meaning of `static'. */
1336
1337int
1338staticp (arg)
1339 tree arg;
1340{
1341 switch (TREE_CODE (arg))
1342 {
c6a1db6c 1343 case FUNCTION_DECL:
1324c5de 1344 /* Nested functions aren't static, since taking their address
86270344 1345 involves a trampoline. */
3d78f2e9
RH
1346 return ((decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
1347 && ! DECL_NON_ADDR_CONST_P (arg));
27da1b4d 1348
86270344 1349 case VAR_DECL:
3d78f2e9
RH
1350 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
1351 && ! DECL_THREAD_LOCAL (arg)
1352 && ! DECL_NON_ADDR_CONST_P (arg));
c6a1db6c 1353
492c86a4
RK
1354 case CONSTRUCTOR:
1355 return TREE_STATIC (arg);
1356
1c12c179 1357 case LABEL_DECL:
c6a1db6c
RS
1358 case STRING_CST:
1359 return 1;
1360
f7fa6ef9
RK
1361 /* If we are referencing a bitfield, we can't evaluate an
1362 ADDR_EXPR at compile time and so it isn't a constant. */
c6a1db6c 1363 case COMPONENT_REF:
f7fa6ef9
RK
1364 return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
1365 && staticp (TREE_OPERAND (arg, 0)));
1366
c6a1db6c 1367 case BIT_FIELD_REF:
f7fa6ef9 1368 return 0;
c6a1db6c 1369
2cd2a93e
RK
1370#if 0
1371 /* This case is technically correct, but results in setting
1372 TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
1373 compile time. */
c6a1db6c
RS
1374 case INDIRECT_REF:
1375 return TREE_CONSTANT (TREE_OPERAND (arg, 0));
2cd2a93e 1376#endif
c6a1db6c
RS
1377
1378 case ARRAY_REF:
b4e3fabb 1379 case ARRAY_RANGE_REF:
c6a1db6c
RS
1380 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1381 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1382 return staticp (TREE_OPERAND (arg, 0));
c6a1db6c 1383
e9a25f70 1384 default:
d062a680
JM
1385 if ((unsigned int) TREE_CODE (arg)
1386 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
1387 return (*lang_hooks.staticp) (arg);
1388 else
1389 return 0;
e9a25f70 1390 }
c6a1db6c
RS
1391}
1392\f
3aa77500
RS
1393/* Wrap a SAVE_EXPR around EXPR, if appropriate.
1394 Do this to any expression which may be used in more than one place,
1395 but must be evaluated only once.
1396
1397 Normally, expand_expr would reevaluate the expression each time.
1398 Calling save_expr produces something that is evaluated and recorded
1399 the first time expand_expr is called on it. Subsequent calls to
1400 expand_expr just reuse the recorded value.
1401
1402 The call to expand_expr that generates code that actually computes
1403 the value is the first call *at compile time*. Subsequent calls
1404 *at compile time* generate code to use the saved value.
1405 This produces correct result provided that *at run time* control
1406 always flows through the insns made by the first expand_expr
1407 before reaching the other places where the save_expr was evaluated.
1408 You, the caller of save_expr, must make sure this is so.
1409
1410 Constants, and certain read-only nodes, are returned with no
1411 SAVE_EXPR because that is safe. Expressions containing placeholders
c5af9901
RK
1412 are not touched; see tree.def for an explanation of what these
1413 are used for. */
c6a1db6c
RS
1414
1415tree
1416save_expr (expr)
1417 tree expr;
1418{
7a6cdb44 1419 tree t = fold (expr);
84d8756d
RK
1420 tree inner;
1421
c6a1db6c
RS
1422 /* If the tree evaluates to a constant, then we don't want to hide that
1423 fact (i.e. this allows further folding, and direct checks for constants).
af929c62 1424 However, a read-only object that has side effects cannot be bypassed.
dc478a5d 1425 Since it is no problem to reevaluate literals, we just return the
0f41302f 1426 literal node. */
84d8756d 1427 inner = skip_simple_arithmetic (t);
ac79cd5a
RK
1428 if (TREE_CONSTANT (inner)
1429 || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
0c685f12
NS
1430 || TREE_CODE (inner) == SAVE_EXPR
1431 || TREE_CODE (inner) == ERROR_MARK)
c6a1db6c
RS
1432 return t;
1433
a9ecacf6 1434 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
dec20b4b
RK
1435 it means that the size or offset of some field of an object depends on
1436 the value within another field.
1437
1438 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
1439 and some variable since it would then need to be both evaluated once and
1440 evaluated more than once. Front-ends must assure this case cannot
1441 happen by surrounding any such subexpressions in their own SAVE_EXPR
1442 and forcing evaluation at the proper time. */
a9ecacf6 1443 if (contains_placeholder_p (inner))
dec20b4b
RK
1444 return t;
1445
37366632 1446 t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
c6a1db6c
RS
1447
1448 /* This expression might be placed ahead of a jump to ensure that the
1449 value was computed on both sides of the jump. So make sure it isn't
1450 eliminated as dead. */
1451 TREE_SIDE_EFFECTS (t) = 1;
235783d1 1452 TREE_READONLY (t) = 1;
c6a1db6c
RS
1453 return t;
1454}
679163cf 1455
a9ecacf6
OH
1456/* Look inside EXPR and into any simple arithmetic operations. Return
1457 the innermost non-arithmetic node. */
1458
1459tree
1460skip_simple_arithmetic (expr)
1461 tree expr;
1462{
1463 tree inner;
1464
1465 /* We don't care about whether this can be used as an lvalue in this
1466 context. */
1467 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
1468 expr = TREE_OPERAND (expr, 0);
1469
1470 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
1471 a constant, it will be more efficient to not make another SAVE_EXPR since
1472 it will allow better simplification and GCSE will be able to merge the
1473 computations if they actually occur. */
1474 inner = expr;
1475 while (1)
1476 {
1477 if (TREE_CODE_CLASS (TREE_CODE (inner)) == '1')
1478 inner = TREE_OPERAND (inner, 0);
1479 else if (TREE_CODE_CLASS (TREE_CODE (inner)) == '2')
1480 {
1481 if (TREE_CONSTANT (TREE_OPERAND (inner, 1)))
1482 inner = TREE_OPERAND (inner, 0);
1483 else if (TREE_CONSTANT (TREE_OPERAND (inner, 0)))
1484 inner = TREE_OPERAND (inner, 1);
1485 else
1486 break;
1487 }
1488 else
1489 break;
1490 }
1491
1492 return inner;
1493}
1494
1495/* Return TRUE if EXPR is a SAVE_EXPR or wraps simple arithmetic around a
1496 SAVE_EXPR. Return FALSE otherwise. */
1497
1498bool
1499saved_expr_p (expr)
1500 tree expr;
1501{
1502 return TREE_CODE (skip_simple_arithmetic (expr)) == SAVE_EXPR;
1503}
1504
679163cf
MS
1505/* Arrange for an expression to be expanded multiple independent
1506 times. This is useful for cleanup actions, as the backend can
1507 expand them multiple times in different places. */
0f41302f 1508
679163cf
MS
1509tree
1510unsave_expr (expr)
1511 tree expr;
1512{
1513 tree t;
1514
1515 /* If this is already protected, no sense in protecting it again. */
1516 if (TREE_CODE (expr) == UNSAVE_EXPR)
1517 return expr;
1518
1519 t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
1520 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
1521 return t;
1522}
1523
b7f6588d
JM
1524/* Returns the index of the first non-tree operand for CODE, or the number
1525 of operands if all are trees. */
1526
1527int
1528first_rtl_op (code)
1529 enum tree_code code;
1530{
1531 switch (code)
1532 {
1533 case SAVE_EXPR:
1534 return 2;
8dd858ca 1535 case GOTO_SUBROUTINE_EXPR:
b7f6588d
JM
1536 case RTL_EXPR:
1537 return 0;
b7f6588d 1538 case WITH_CLEANUP_EXPR:
6ad7895a 1539 return 2;
b7f6588d
JM
1540 case METHOD_CALL_EXPR:
1541 return 3;
1542 default:
8d5e6e25 1543 return TREE_CODE_LENGTH (code);
b7f6588d
JM
1544 }
1545}
1546
e2500fed
GK
1547/* Return which tree structure is used by T. */
1548
1549enum tree_node_structure_enum
1550tree_node_structure (t)
1551 tree t;
1552{
1553 enum tree_code code = TREE_CODE (t);
1554
1555 switch (TREE_CODE_CLASS (code))
1556 {
1557 case 'd': return TS_DECL;
1558 case 't': return TS_TYPE;
1559 case 'b': return TS_BLOCK;
1560 case 'r': case '<': case '1': case '2': case 'e': case 's':
1561 return TS_EXP;
1562 default: /* 'c' and 'x' */
1563 break;
1564 }
1565 switch (code)
1566 {
1567 /* 'c' cases. */
1568 case INTEGER_CST: return TS_INT_CST;
1569 case REAL_CST: return TS_REAL_CST;
1570 case COMPLEX_CST: return TS_COMPLEX;
1571 case VECTOR_CST: return TS_VECTOR;
1572 case STRING_CST: return TS_STRING;
1573 /* 'x' cases. */
1574 case ERROR_MARK: return TS_COMMON;
1575 case IDENTIFIER_NODE: return TS_IDENTIFIER;
1576 case TREE_LIST: return TS_LIST;
1577 case TREE_VEC: return TS_VEC;
1578 case PLACEHOLDER_EXPR: return TS_COMMON;
1579
1580 default:
1581 abort ();
1582 }
1583}
1584
582db8e4
MM
1585/* Perform any modifications to EXPR required when it is unsaved. Does
1586 not recurse into EXPR's subtrees. */
0f41302f 1587
582db8e4
MM
1588void
1589unsave_expr_1 (expr)
679163cf
MS
1590 tree expr;
1591{
582db8e4 1592 switch (TREE_CODE (expr))
679163cf
MS
1593 {
1594 case SAVE_EXPR:
d4b60170 1595 if (! SAVE_EXPR_PERSISTENT_P (expr))
d26f8097 1596 SAVE_EXPR_RTL (expr) = 0;
679163cf
MS
1597 break;
1598
1599 case TARGET_EXPR:
700473ab
JM
1600 /* Don't mess with a TARGET_EXPR that hasn't been expanded.
1601 It's OK for this to happen if it was part of a subtree that
1602 isn't immediately expanded, such as operand 2 of another
1603 TARGET_EXPR. */
1604 if (TREE_OPERAND (expr, 1))
1605 break;
1606
4847c938
MS
1607 TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
1608 TREE_OPERAND (expr, 3) = NULL_TREE;
679163cf 1609 break;
dc478a5d 1610
679163cf 1611 case RTL_EXPR:
4847c938 1612 /* I don't yet know how to emit a sequence multiple times. */
d4b60170 1613 if (RTL_EXPR_SEQUENCE (expr) != 0)
4847c938 1614 abort ();
679163cf
MS
1615 break;
1616
e9a25f70
JL
1617 default:
1618 break;
679163cf 1619 }
582db8e4
MM
1620}
1621
24965e7a 1622/* Default lang hook for "unsave_expr_now". */
582db8e4 1623
24965e7a
NB
1624tree
1625lhd_unsave_expr_now (expr)
582db8e4
MM
1626 tree expr;
1627{
1628 enum tree_code code;
1629
7a12ace5 1630 /* There's nothing to do for NULL_TREE. */
d4b60170 1631 if (expr == 0)
24965e7a 1632 return expr;
7a12ace5 1633
582db8e4 1634 unsave_expr_1 (expr);
679163cf 1635
582db8e4 1636 code = TREE_CODE (expr);
679163cf
MS
1637 switch (TREE_CODE_CLASS (code))
1638 {
1639 case 'c': /* a constant */
1640 case 't': /* a type node */
679163cf
MS
1641 case 'd': /* A decl node */
1642 case 'b': /* A block node */
582db8e4 1643 break;
679163cf 1644
58de89e7
RK
1645 case 'x': /* miscellaneous: e.g., identifier, TREE_LIST or ERROR_MARK. */
1646 if (code == TREE_LIST)
1647 {
24965e7a
NB
1648 lhd_unsave_expr_now (TREE_VALUE (expr));
1649 lhd_unsave_expr_now (TREE_CHAIN (expr));
58de89e7
RK
1650 }
1651 break;
1652
679163cf
MS
1653 case 'e': /* an expression */
1654 case 'r': /* a reference */
1655 case 's': /* an expression with side effects */
1656 case '<': /* a comparison expression */
1657 case '2': /* a binary arithmetic expression */
1658 case '1': /* a unary arithmetic expression */
582db8e4
MM
1659 {
1660 int i;
dc478a5d 1661
582db8e4 1662 for (i = first_rtl_op (code) - 1; i >= 0; i--)
24965e7a 1663 lhd_unsave_expr_now (TREE_OPERAND (expr, i));
582db8e4
MM
1664 }
1665 break;
679163cf
MS
1666
1667 default:
1668 abort ();
1669 }
582db8e4
MM
1670
1671 return expr;
1672}
0a1c58a2 1673
194c7c45
RH
1674/* Return 0 if it is safe to evaluate EXPR multiple times,
1675 return 1 if it is safe if EXPR is unsaved afterward, or
dc478a5d 1676 return 2 if it is completely unsafe.
194c7c45
RH
1677
1678 This assumes that CALL_EXPRs and TARGET_EXPRs are never replicated in
1679 an expression tree, so that it safe to unsave them and the surrounding
1680 context will be correct.
1681
1682 SAVE_EXPRs basically *only* appear replicated in an expression tree,
1683 occasionally across the whole of a function. It is therefore only
1684 safe to unsave a SAVE_EXPR if you know that all occurrences appear
1685 below the UNSAVE_EXPR.
1686
dc478a5d 1687 RTL_EXPRs consume their rtl during evaluation. It is therefore
194c7c45 1688 never possible to unsave them. */
0a1c58a2
JL
1689
1690int
194c7c45 1691unsafe_for_reeval (expr)
0a1c58a2
JL
1692 tree expr;
1693{
58de89e7 1694 int unsafeness = 0;
0a1c58a2 1695 enum tree_code code;
1fcfaf37 1696 int i, tmp, tmp2;
58de89e7 1697 tree exp;
0a1c58a2
JL
1698 int first_rtl;
1699
1700 if (expr == NULL_TREE)
1701 return 1;
1702
1703 code = TREE_CODE (expr);
1704 first_rtl = first_rtl_op (code);
194c7c45 1705
0a1c58a2
JL
1706 switch (code)
1707 {
194c7c45 1708 case SAVE_EXPR:
0a1c58a2 1709 case RTL_EXPR:
194c7c45 1710 return 2;
0a1c58a2 1711
58de89e7
RK
1712 case TREE_LIST:
1713 for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
0a1c58a2 1714 {
58de89e7
RK
1715 tmp = unsafe_for_reeval (TREE_VALUE (exp));
1716 unsafeness = MAX (tmp, unsafeness);
0a1c58a2 1717 }
58de89e7
RK
1718
1719 return unsafeness;
1720
1721 case CALL_EXPR:
1fcfaf37 1722 tmp2 = unsafe_for_reeval (TREE_OPERAND (expr, 0));
58de89e7 1723 tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
1fcfaf37 1724 return MAX (MAX (tmp, 1), tmp2);
194c7c45
RH
1725
1726 case TARGET_EXPR:
1727 unsafeness = 1;
0a1c58a2
JL
1728 break;
1729
1730 default:
48a7a235
NB
1731 tmp = (*lang_hooks.unsafe_for_reeval) (expr);
1732 if (tmp >= 0)
1733 return tmp;
0a1c58a2
JL
1734 break;
1735 }
1736
1737 switch (TREE_CODE_CLASS (code))
1738 {
1739 case 'c': /* a constant */
1740 case 't': /* a type node */
1741 case 'x': /* something random, like an identifier or an ERROR_MARK. */
1742 case 'd': /* A decl node */
1743 case 'b': /* A block node */
194c7c45 1744 return 0;
0a1c58a2
JL
1745
1746 case 'e': /* an expression */
1747 case 'r': /* a reference */
1748 case 's': /* an expression with side effects */
1749 case '<': /* a comparison expression */
1750 case '2': /* a binary arithmetic expression */
1751 case '1': /* a unary arithmetic expression */
1752 for (i = first_rtl - 1; i >= 0; i--)
194c7c45
RH
1753 {
1754 tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
58de89e7 1755 unsafeness = MAX (tmp, unsafeness);
194c7c45 1756 }
58de89e7 1757
194c7c45 1758 return unsafeness;
0a1c58a2
JL
1759
1760 default:
194c7c45 1761 return 2;
0a1c58a2
JL
1762 }
1763}
dec20b4b
RK
1764\f
1765/* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
3910a7cb 1766 or offset that depends on a field within a record. */
dec20b4b 1767
7a6cdb44 1768bool
dec20b4b
RK
1769contains_placeholder_p (exp)
1770 tree exp;
1771{
b3694847 1772 enum tree_code code;
e9a25f70 1773 int result;
dec20b4b 1774
8f17b5c5
MM
1775 if (!exp)
1776 return 0;
1777
67c8d7de
RK
1778 /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
1779 in it since it is supplying a value for it. */
8f17b5c5 1780 code = TREE_CODE (exp);
67c8d7de
RK
1781 if (code == WITH_RECORD_EXPR)
1782 return 0;
a5ee6e44 1783 else if (code == PLACEHOLDER_EXPR)
cc3c7c13 1784 return 1;
67c8d7de 1785
dec20b4b
RK
1786 switch (TREE_CODE_CLASS (code))
1787 {
1788 case 'r':
cc3c7c13
RK
1789 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
1790 position computations since they will be converted into a
1791 WITH_RECORD_EXPR involving the reference, which will assume
1792 here will be valid. */
7a6cdb44 1793 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
dec20b4b 1794
e9a25f70
JL
1795 case 'x':
1796 if (code == TREE_LIST)
7a6cdb44
RK
1797 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
1798 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
e9a25f70 1799 break;
dc478a5d 1800
dec20b4b
RK
1801 case '1':
1802 case '2': case '<':
1803 case 'e':
3910a7cb
RK
1804 switch (code)
1805 {
1806 case COMPOUND_EXPR:
dc478a5d 1807 /* Ignoring the first operand isn't quite right, but works best. */
7a6cdb44 1808 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3910a7cb
RK
1809
1810 case RTL_EXPR:
1811 case CONSTRUCTOR:
1812 return 0;
1813
1814 case COND_EXPR:
7a6cdb44
RK
1815 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1816 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
1817 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3910a7cb
RK
1818
1819 case SAVE_EXPR:
e9a25f70
JL
1820 /* If we already know this doesn't have a placeholder, don't
1821 check again. */
1822 if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
1823 return 0;
1824
1825 SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
7a6cdb44 1826 result = CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
e9a25f70
JL
1827 if (result)
1828 SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
1829
1830 return result;
1831
1832 case CALL_EXPR:
7a6cdb44 1833 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
e9a25f70
JL
1834
1835 default:
1836 break;
3910a7cb
RK
1837 }
1838
8d5e6e25 1839 switch (TREE_CODE_LENGTH (code))
dec20b4b
RK
1840 {
1841 case 1:
7a6cdb44 1842 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
dec20b4b 1843 case 2:
7a6cdb44
RK
1844 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1845 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
e9a25f70
JL
1846 default:
1847 return 0;
dec20b4b 1848 }
dec20b4b 1849
e9a25f70
JL
1850 default:
1851 return 0;
1852 }
1160f9ec 1853 return 0;
dec20b4b 1854}
b7f6588d 1855
7a6cdb44
RK
1856/* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
1857 This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
1858 positions. */
1859
1860bool
1861type_contains_placeholder_p (type)
1862 tree type;
1863{
1864 /* If the size contains a placeholder or the parent type (component type in
1865 the case of arrays) type involves a placeholder, this type does. */
1866 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
1867 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
1868 || (TREE_TYPE (type) != 0
1869 && type_contains_placeholder_p (TREE_TYPE (type))))
1870 return 1;
1871
1872 /* Now do type-specific checks. Note that the last part of the check above
1873 greatly limits what we have to do below. */
1874 switch (TREE_CODE (type))
1875 {
1876 case VOID_TYPE:
1877 case COMPLEX_TYPE:
1878 case VECTOR_TYPE:
1879 case ENUMERAL_TYPE:
1880 case BOOLEAN_TYPE:
1881 case CHAR_TYPE:
1882 case POINTER_TYPE:
1883 case OFFSET_TYPE:
1884 case REFERENCE_TYPE:
1885 case METHOD_TYPE:
1886 case FILE_TYPE:
1887 case FUNCTION_TYPE:
1888 return 0;
1889
1890 case INTEGER_TYPE:
1891 case REAL_TYPE:
1892 /* Here we just check the bounds. */
1893 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
1894 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
1895
1896 case ARRAY_TYPE:
1897 case SET_TYPE:
1898 /* We're already checked the component type (TREE_TYPE), so just check
1899 the index type. */
1900 return type_contains_placeholder_p (TYPE_DOMAIN (type));
1901
1902 case RECORD_TYPE:
1903 case UNION_TYPE:
1904 case QUAL_UNION_TYPE:
1905 {
1906 static tree seen_types = 0;
1907 tree field;
1908 bool ret = 0;
1909
1910 /* We have to be careful here that we don't end up in infinite
1911 recursions due to a field of a type being a pointer to that type
1912 or to a mutually-recursive type. So we store a list of record
1913 types that we've seen and see if this type is in them. To save
1914 memory, we don't use a list for just one type. Here we check
1915 whether we've seen this type before and store it if not. */
1916 if (seen_types == 0)
1917 seen_types = type;
1918 else if (TREE_CODE (seen_types) != TREE_LIST)
1919 {
1920 if (seen_types == type)
1921 return 0;
1922
1923 seen_types = tree_cons (NULL_TREE, type,
1924 build_tree_list (NULL_TREE, seen_types));
1925 }
1926 else
1927 {
1928 if (value_member (type, seen_types) != 0)
1929 return 0;
1930
1931 seen_types = tree_cons (NULL_TREE, type, seen_types);
1932 }
1933
1934 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1935 if (TREE_CODE (field) == FIELD_DECL
1936 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
1937 || (TREE_CODE (type) == QUAL_UNION_TYPE
1938 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
1939 || type_contains_placeholder_p (TREE_TYPE (field))))
1940 {
1941 ret = true;
1942 break;
1943 }
1944
1945 /* Now remove us from seen_types and return the result. */
1946 if (seen_types == type)
1947 seen_types = 0;
1948 else
1949 seen_types = TREE_CHAIN (seen_types);
1950
1951 return ret;
1952 }
1953
1954 default:
1955 abort ();
1956 }
1957}
1958
b7f6588d
JM
1959/* Return 1 if EXP contains any expressions that produce cleanups for an
1960 outer scope to deal with. Used by fold. */
1961
1962int
1963has_cleanups (exp)
1964 tree exp;
1965{
1966 int i, nops, cmp;
1967
1968 if (! TREE_SIDE_EFFECTS (exp))
1969 return 0;
1970
1971 switch (TREE_CODE (exp))
1972 {
1973 case TARGET_EXPR:
8dd858ca 1974 case GOTO_SUBROUTINE_EXPR:
b7f6588d
JM
1975 case WITH_CLEANUP_EXPR:
1976 return 1;
1977
1978 case CLEANUP_POINT_EXPR:
1979 return 0;
1980
1981 case CALL_EXPR:
1982 for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
1983 {
1984 cmp = has_cleanups (TREE_VALUE (exp));
1985 if (cmp)
1986 return cmp;
1987 }
1988 return 0;
1989
1990 default:
1991 break;
1992 }
1993
1994 /* This general rule works for most tree codes. All exceptions should be
1995 handled above. If this is a language-specific tree code, we can't
1996 trust what might be in the operand, so say we don't know
1997 the situation. */
1998 if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
1999 return -1;
2000
2001 nops = first_rtl_op (TREE_CODE (exp));
2002 for (i = 0; i < nops; i++)
2003 if (TREE_OPERAND (exp, i) != 0)
2004 {
2005 int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
2006 if (type == 'e' || type == '<' || type == '1' || type == '2'
2007 || type == 'r' || type == 's')
2008 {
2009 cmp = has_cleanups (TREE_OPERAND (exp, i));
2010 if (cmp)
2011 return cmp;
2012 }
2013 }
2014
2015 return 0;
2016}
dec20b4b
RK
2017\f
2018/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2019 return a tree with all occurrences of references to F in a
2020 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
e9a25f70
JL
2021 contains only arithmetic expressions or a CALL_EXPR with a
2022 PLACEHOLDER_EXPR occurring only in its arglist. */
dec20b4b
RK
2023
2024tree
2025substitute_in_expr (exp, f, r)
2026 tree exp;
2027 tree f;
2028 tree r;
2029{
2030 enum tree_code code = TREE_CODE (exp);
9b594acf 2031 tree op0, op1, op2;
e9a25f70 2032 tree new;
dec20b4b
RK
2033 tree inner;
2034
2035 switch (TREE_CODE_CLASS (code))
2036 {
2037 case 'c':
2038 case 'd':
2039 return exp;
2040
2041 case 'x':
2042 if (code == PLACEHOLDER_EXPR)
2043 return exp;
e9a25f70
JL
2044 else if (code == TREE_LIST)
2045 {
2046 op0 = (TREE_CHAIN (exp) == 0
2047 ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
2048 op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
956d6950 2049 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
e9a25f70
JL
2050 return exp;
2051
956d6950 2052 return tree_cons (TREE_PURPOSE (exp), op1, op0);
e9a25f70
JL
2053 }
2054
2055 abort ();
dec20b4b
RK
2056
2057 case '1':
2058 case '2':
2059 case '<':
2060 case 'e':
8d5e6e25 2061 switch (TREE_CODE_LENGTH (code))
dec20b4b
RK
2062 {
2063 case 1:
9b594acf
RK
2064 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2065 if (op0 == TREE_OPERAND (exp, 0))
2066 return exp;
dc478a5d 2067
235783d1
RK
2068 if (code == NON_LVALUE_EXPR)
2069 return op0;
2070
9b594acf 2071 new = fold (build1 (code, TREE_TYPE (exp), op0));
abd23b66 2072 break;
dec20b4b
RK
2073
2074 case 2:
6a22e3a7
RK
2075 /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2076 could, but we don't support it. */
2077 if (code == RTL_EXPR)
2078 return exp;
2079 else if (code == CONSTRUCTOR)
dec20b4b
RK
2080 abort ();
2081
784fb70e
RK
2082 op0 = TREE_OPERAND (exp, 0);
2083 op1 = TREE_OPERAND (exp, 1);
7a6cdb44 2084 if (CONTAINS_PLACEHOLDER_P (op0))
784fb70e 2085 op0 = substitute_in_expr (op0, f, r);
7a6cdb44 2086 if (CONTAINS_PLACEHOLDER_P (op1))
784fb70e
RK
2087 op1 = substitute_in_expr (op1, f, r);
2088
9b594acf
RK
2089 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2090 return exp;
2091
2092 new = fold (build (code, TREE_TYPE (exp), op0, op1));
abd23b66 2093 break;
dec20b4b
RK
2094
2095 case 3:
6a22e3a7
RK
2096 /* It cannot be that anything inside a SAVE_EXPR contains a
2097 PLACEHOLDER_EXPR. */
2098 if (code == SAVE_EXPR)
2099 return exp;
2100
e9a25f70
JL
2101 else if (code == CALL_EXPR)
2102 {
2103 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2104 if (op1 == TREE_OPERAND (exp, 1))
2105 return exp;
2106
2107 return build (code, TREE_TYPE (exp),
2108 TREE_OPERAND (exp, 0), op1, NULL_TREE);
2109 }
2110
2111 else if (code != COND_EXPR)
dec20b4b
RK
2112 abort ();
2113
784fb70e
RK
2114 op0 = TREE_OPERAND (exp, 0);
2115 op1 = TREE_OPERAND (exp, 1);
2116 op2 = TREE_OPERAND (exp, 2);
2117
7a6cdb44 2118 if (CONTAINS_PLACEHOLDER_P (op0))
784fb70e 2119 op0 = substitute_in_expr (op0, f, r);
7a6cdb44 2120 if (CONTAINS_PLACEHOLDER_P (op1))
784fb70e 2121 op1 = substitute_in_expr (op1, f, r);
7a6cdb44 2122 if (CONTAINS_PLACEHOLDER_P (op2))
784fb70e
RK
2123 op2 = substitute_in_expr (op2, f, r);
2124
9b594acf
RK
2125 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2126 && op2 == TREE_OPERAND (exp, 2))
2127 return exp;
2128
2129 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
e9a25f70
JL
2130 break;
2131
2132 default:
2133 abort ();
dec20b4b
RK
2134 }
2135
2136 break;
2137
2138 case 'r':
2139 switch (code)
2140 {
2141 case COMPONENT_REF:
2142 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2143 and it is the right field, replace it with R. */
2144 for (inner = TREE_OPERAND (exp, 0);
2145 TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2146 inner = TREE_OPERAND (inner, 0))
2147 ;
2148 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2149 && TREE_OPERAND (exp, 1) == f)
2150 return r;
2151
dc478a5d 2152 /* If this expression hasn't been completed let, leave it
6cba9fcc
RK
2153 alone. */
2154 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2155 && TREE_TYPE (inner) == 0)
2156 return exp;
2157
9b594acf
RK
2158 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2159 if (op0 == TREE_OPERAND (exp, 0))
2160 return exp;
2161
2162 new = fold (build (code, TREE_TYPE (exp), op0,
abd23b66
RK
2163 TREE_OPERAND (exp, 1)));
2164 break;
2165
dec20b4b 2166 case BIT_FIELD_REF:
9b594acf
RK
2167 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2168 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2169 op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2170 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2171 && op2 == TREE_OPERAND (exp, 2))
2172 return exp;
2173
2174 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
abd23b66
RK
2175 break;
2176
dec20b4b
RK
2177 case INDIRECT_REF:
2178 case BUFFER_REF:
9b594acf
RK
2179 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2180 if (op0 == TREE_OPERAND (exp, 0))
2181 return exp;
2182
2183 new = fold (build1 (code, TREE_TYPE (exp), op0));
abd23b66 2184 break;
e9a25f70
JL
2185
2186 default:
2187 abort ();
dec20b4b 2188 }
e9a25f70 2189 break;
dc478a5d 2190
e9a25f70
JL
2191 default:
2192 abort ();
dec20b4b
RK
2193 }
2194
abd23b66
RK
2195 TREE_READONLY (new) = TREE_READONLY (exp);
2196 return new;
dec20b4b
RK
2197}
2198\f
c6a1db6c
RS
2199/* Stabilize a reference so that we can use it any number of times
2200 without causing its operands to be evaluated more than once.
4b1d0fea
RS
2201 Returns the stabilized reference. This works by means of save_expr,
2202 so see the caveats in the comments about save_expr.
c6a1db6c
RS
2203
2204 Also allows conversion expressions whose operands are references.
2205 Any other kind of expression is returned unchanged. */
2206
2207tree
2208stabilize_reference (ref)
2209 tree ref;
2210{
b3694847
SS
2211 tree result;
2212 enum tree_code code = TREE_CODE (ref);
c6a1db6c
RS
2213
2214 switch (code)
2215 {
2216 case VAR_DECL:
2217 case PARM_DECL:
2218 case RESULT_DECL:
2219 /* No action is needed in this case. */
2220 return ref;
2221
2222 case NOP_EXPR:
2223 case CONVERT_EXPR:
2224 case FLOAT_EXPR:
2225 case FIX_TRUNC_EXPR:
2226 case FIX_FLOOR_EXPR:
2227 case FIX_ROUND_EXPR:
2228 case FIX_CEIL_EXPR:
2229 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2230 break;
2231
2232 case INDIRECT_REF:
2233 result = build_nt (INDIRECT_REF,
2234 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2235 break;
2236
2237 case COMPONENT_REF:
2238 result = build_nt (COMPONENT_REF,
2239 stabilize_reference (TREE_OPERAND (ref, 0)),
2240 TREE_OPERAND (ref, 1));
2241 break;
2242
2243 case BIT_FIELD_REF:
2244 result = build_nt (BIT_FIELD_REF,
2245 stabilize_reference (TREE_OPERAND (ref, 0)),
2246 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2247 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2248 break;
2249
2250 case ARRAY_REF:
2251 result = build_nt (ARRAY_REF,
2252 stabilize_reference (TREE_OPERAND (ref, 0)),
2253 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2254 break;
2255
b4e3fabb
RK
2256 case ARRAY_RANGE_REF:
2257 result = build_nt (ARRAY_RANGE_REF,
2258 stabilize_reference (TREE_OPERAND (ref, 0)),
2259 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2260 break;
2261
c451a7a0 2262 case COMPOUND_EXPR:
7b8b9722
MS
2263 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2264 it wouldn't be ignored. This matters when dealing with
2265 volatiles. */
2266 return stabilize_reference_1 (ref);
c451a7a0 2267
c36a127d
RK
2268 case RTL_EXPR:
2269 result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2270 save_expr (build1 (ADDR_EXPR,
21f0e042 2271 build_pointer_type (TREE_TYPE (ref)),
c36a127d
RK
2272 ref)));
2273 break;
2274
c6a1db6c
RS
2275 /* If arg isn't a kind of lvalue we recognize, make no change.
2276 Caller should recognize the error for an invalid lvalue. */
2277 default:
2278 return ref;
2279
2280 case ERROR_MARK:
2281 return error_mark_node;
2282 }
2283
2284 TREE_TYPE (result) = TREE_TYPE (ref);
2285 TREE_READONLY (result) = TREE_READONLY (ref);
2286 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2287 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
c6a1db6c
RS
2288
2289 return result;
2290}
2291
2292/* Subroutine of stabilize_reference; this is called for subtrees of
2293 references. Any expression with side-effects must be put in a SAVE_EXPR
2294 to ensure that it is only evaluated once.
2295
2296 We don't put SAVE_EXPR nodes around everything, because assigning very
2297 simple expressions to temporaries causes us to miss good opportunities
2298 for optimizations. Among other things, the opportunity to fold in the
2299 addition of a constant into an addressing mode often gets lost, e.g.
2300 "y[i+1] += x;". In general, we take the approach that we should not make
2301 an assignment unless we are forced into it - i.e., that any non-side effect
2302 operator should be allowed, and that cse should take care of coalescing
2303 multiple utterances of the same expression should that prove fruitful. */
2304
4745ddae 2305tree
c6a1db6c
RS
2306stabilize_reference_1 (e)
2307 tree e;
2308{
b3694847
SS
2309 tree result;
2310 enum tree_code code = TREE_CODE (e);
c6a1db6c 2311
af929c62
RK
2312 /* We cannot ignore const expressions because it might be a reference
2313 to a const array but whose index contains side-effects. But we can
2314 ignore things that are actual constant or that already have been
2315 handled by this function. */
2316
2317 if (TREE_CONSTANT (e) || code == SAVE_EXPR)
c6a1db6c
RS
2318 return e;
2319
2320 switch (TREE_CODE_CLASS (code))
2321 {
2322 case 'x':
2323 case 't':
2324 case 'd':
03646189 2325 case 'b':
c6a1db6c
RS
2326 case '<':
2327 case 's':
2328 case 'e':
2329 case 'r':
2330 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2331 so that it will only be evaluated once. */
2332 /* The reference (r) and comparison (<) classes could be handled as
2333 below, but it is generally faster to only evaluate them once. */
2334 if (TREE_SIDE_EFFECTS (e))
2335 return save_expr (e);
2336 return e;
2337
2338 case 'c':
2339 /* Constants need no processing. In fact, we should never reach
2340 here. */
2341 return e;
dc478a5d 2342
c6a1db6c 2343 case '2':
ae698e41
RS
2344 /* Division is slow and tends to be compiled with jumps,
2345 especially the division by powers of 2 that is often
2346 found inside of an array reference. So do it just once. */
2347 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2348 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2349 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2350 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2351 return save_expr (e);
c6a1db6c
RS
2352 /* Recursively stabilize each operand. */
2353 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2354 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2355 break;
2356
2357 case '1':
2358 /* Recursively stabilize each operand. */
2359 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2360 break;
a7fcb968
RK
2361
2362 default:
2363 abort ();
c6a1db6c 2364 }
dc478a5d 2365
c6a1db6c
RS
2366 TREE_TYPE (result) = TREE_TYPE (e);
2367 TREE_READONLY (result) = TREE_READONLY (e);
2368 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2369 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
c6a1db6c
RS
2370
2371 return result;
2372}
2373\f
2374/* Low-level constructors for expressions. */
2375
2376/* Build an expression of code CODE, data type TYPE,
2377 and operands as specified by the arguments ARG1 and following arguments.
2378 Expressions and reference nodes can be created this way.
2379 Constants, decls, types and misc nodes cannot be. */
2380
2381tree
e34d07f2 2382build (enum tree_code code, tree tt, ...)
c6a1db6c 2383{
b3694847
SS
2384 tree t;
2385 int length;
2386 int i;
97ca93c3 2387 int fro;
1796dff4 2388 int constant;
e34d07f2 2389 va_list p;
c6a1db6c 2390
e34d07f2 2391 va_start (p, tt);
ba63ed56 2392
c6a1db6c 2393 t = make_node (code);
8d5e6e25 2394 length = TREE_CODE_LENGTH (code);
ba63ed56 2395 TREE_TYPE (t) = tt;
c6a1db6c 2396
235783d1
RK
2397 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2398 result based on those same flags for the arguments. But if the
2399 arguments aren't really even `tree' expressions, we shouldn't be trying
2400 to do this. */
97ca93c3
MM
2401 fro = first_rtl_op (code);
2402
1796dff4
RH
2403 /* Expressions without side effects may be constant if their
2404 arguments are as well. */
2405 constant = (TREE_CODE_CLASS (code) == '<'
2406 || TREE_CODE_CLASS (code) == '1'
2407 || TREE_CODE_CLASS (code) == '2'
2408 || TREE_CODE_CLASS (code) == 'c');
2409
c6a1db6c
RS
2410 if (length == 2)
2411 {
2412 /* This is equivalent to the loop below, but faster. */
b3694847
SS
2413 tree arg0 = va_arg (p, tree);
2414 tree arg1 = va_arg (p, tree);
235783d1 2415
c6a1db6c
RS
2416 TREE_OPERAND (t, 0) = arg0;
2417 TREE_OPERAND (t, 1) = arg1;
235783d1 2418 TREE_READONLY (t) = 1;
97ca93c3
MM
2419 if (arg0 && fro > 0)
2420 {
2421 if (TREE_SIDE_EFFECTS (arg0))
2422 TREE_SIDE_EFFECTS (t) = 1;
235783d1
RK
2423 if (!TREE_READONLY (arg0))
2424 TREE_READONLY (t) = 0;
1796dff4
RH
2425 if (!TREE_CONSTANT (arg0))
2426 constant = 0;
97ca93c3 2427 }
235783d1 2428
97ca93c3
MM
2429 if (arg1 && fro > 1)
2430 {
2431 if (TREE_SIDE_EFFECTS (arg1))
2432 TREE_SIDE_EFFECTS (t) = 1;
235783d1
RK
2433 if (!TREE_READONLY (arg1))
2434 TREE_READONLY (t) = 0;
1796dff4
RH
2435 if (!TREE_CONSTANT (arg1))
2436 constant = 0;
97ca93c3 2437 }
c6a1db6c
RS
2438 }
2439 else if (length == 1)
2440 {
b3694847 2441 tree arg0 = va_arg (p, tree);
c6a1db6c 2442
235783d1
RK
2443 /* The only one-operand cases we handle here are those with side-effects.
2444 Others are handled with build1. So don't bother checked if the
2445 arg has side-effects since we'll already have set it.
2446
2447 ??? This really should use build1 too. */
c6a1db6c
RS
2448 if (TREE_CODE_CLASS (code) != 's')
2449 abort ();
2450 TREE_OPERAND (t, 0) = arg0;
c6a1db6c
RS
2451 }
2452 else
2453 {
2454 for (i = 0; i < length; i++)
2455 {
b3694847 2456 tree operand = va_arg (p, tree);
235783d1 2457
c6a1db6c 2458 TREE_OPERAND (t, i) = operand;
97ca93c3 2459 if (operand && fro > i)
c6a1db6c
RS
2460 {
2461 if (TREE_SIDE_EFFECTS (operand))
2462 TREE_SIDE_EFFECTS (t) = 1;
1796dff4
RH
2463 if (!TREE_CONSTANT (operand))
2464 constant = 0;
c6a1db6c
RS
2465 }
2466 }
2467 }
e34d07f2 2468 va_end (p);
1796dff4
RH
2469
2470 TREE_CONSTANT (t) = constant;
c6a1db6c
RS
2471 return t;
2472}
2473
2474/* Same as above, but only builds for unary operators.
2475 Saves lions share of calls to `build'; cuts down use
2476 of varargs, which is expensive for RISC machines. */
0f41302f 2477
c6a1db6c
RS
2478tree
2479build1 (code, type, node)
2480 enum tree_code code;
2481 tree type;
2482 tree node;
2483{
9ec22713 2484 int length = sizeof (struct tree_exp);
5e9defae 2485#ifdef GATHER_STATISTICS
b3694847 2486 tree_node_kind kind;
5e9defae 2487#endif
b3694847 2488 tree t;
c6a1db6c
RS
2489
2490#ifdef GATHER_STATISTICS
9ec22713
JM
2491 switch (TREE_CODE_CLASS (code))
2492 {
2493 case 's': /* an expression with side effects */
2494 kind = s_kind;
2495 break;
2496 case 'r': /* a reference */
2497 kind = r_kind;
2498 break;
2499 default:
2500 kind = e_kind;
2501 break;
2502 }
2503
2504 tree_node_counts[(int) kind]++;
2505 tree_node_sizes[(int) kind] += length;
c6a1db6c
RS
2506#endif
2507
3af4c257 2508#ifdef ENABLE_CHECKING
3b03c671 2509 if (TREE_CODE_CLASS (code) == '2'
3af4c257
MM
2510 || TREE_CODE_CLASS (code) == '<'
2511 || TREE_CODE_LENGTH (code) != 1)
2512 abort ();
2513#endif /* ENABLE_CHECKING */
2514
1f8f4a0b 2515 t = ggc_alloc_tree (length);
f8a83ee3 2516
fad205ff 2517 memset (t, 0, sizeof (struct tree_common));
c6a1db6c 2518
c6a1db6c 2519 TREE_SET_CODE (t, code);
235783d1 2520
f8a83ee3
ZW
2521 TREE_TYPE (t) = type;
2522 TREE_COMPLEXITY (t) = 0;
c6a1db6c 2523 TREE_OPERAND (t, 0) = node;
235783d1
RK
2524 if (node && first_rtl_op (code) != 0)
2525 {
2526 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2527 TREE_READONLY (t) = TREE_READONLY (node);
2528 }
c6a1db6c 2529
9ec22713 2530 if (TREE_CODE_CLASS (code) == 's')
4f7c4327 2531 TREE_SIDE_EFFECTS (t) = 1;
9ec22713 2532 else switch (code)
1fef02f6
RH
2533 {
2534 case INIT_EXPR:
2535 case MODIFY_EXPR:
2536 case VA_ARG_EXPR:
2537 case RTL_EXPR:
2538 case PREDECREMENT_EXPR:
2539 case PREINCREMENT_EXPR:
2540 case POSTDECREMENT_EXPR:
2541 case POSTINCREMENT_EXPR:
2542 /* All of these have side-effects, no matter what their
2543 operands are. */
2544 TREE_SIDE_EFFECTS (t) = 1;
235783d1 2545 TREE_READONLY (t) = 0;
1fef02f6 2546 break;
f893c16e
JM
2547
2548 case INDIRECT_REF:
2549 /* Whether a dereference is readonly has nothing to do with whether
2550 its operand is readonly. */
2551 TREE_READONLY (t) = 0;
2552 break;
dc478a5d 2553
1fef02f6 2554 default:
258835c7 2555 if (TREE_CODE_CLASS (code) == '1' && node && TREE_CONSTANT (node))
1796dff4 2556 TREE_CONSTANT (t) = 1;
1fef02f6
RH
2557 break;
2558 }
2559
c6a1db6c
RS
2560 return t;
2561}
2562
2563/* Similar except don't specify the TREE_TYPE
2564 and leave the TREE_SIDE_EFFECTS as 0.
2565 It is permissible for arguments to be null,
2566 or even garbage if their values do not matter. */
2567
2568tree
e34d07f2 2569build_nt (enum tree_code code, ...)
c6a1db6c 2570{
b3694847
SS
2571 tree t;
2572 int length;
2573 int i;
e34d07f2 2574 va_list p;
c6a1db6c 2575
e34d07f2 2576 va_start (p, code);
ba63ed56 2577
c6a1db6c 2578 t = make_node (code);
8d5e6e25 2579 length = TREE_CODE_LENGTH (code);
c6a1db6c
RS
2580
2581 for (i = 0; i < length; i++)
2582 TREE_OPERAND (t, i) = va_arg (p, tree);
2583
e34d07f2 2584 va_end (p);
c6a1db6c
RS
2585 return t;
2586}
c6a1db6c
RS
2587\f
2588/* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2589 We do NOT enter this node in any sort of symbol table.
2590
2591 layout_decl is used to set up the decl's storage layout.
2592 Other slots are initialized to 0 or null pointers. */
2593
2594tree
2595build_decl (code, name, type)
2596 enum tree_code code;
2597 tree name, type;
2598{
b3694847 2599 tree t;
c6a1db6c
RS
2600
2601 t = make_node (code);
2602
2603/* if (type == error_mark_node)
2604 type = integer_type_node; */
2605/* That is not done, deliberately, so that having error_mark_node
2606 as the type can suppress useless errors in the use of this variable. */
2607
2608 DECL_NAME (t) = name;
c6a1db6c
RS
2609 TREE_TYPE (t) = type;
2610
2611 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2612 layout_decl (t, 0);
2613 else if (code == FUNCTION_DECL)
2614 DECL_MODE (t) = FUNCTION_MODE;
2615
2616 return t;
2617}
2618\f
2619/* BLOCK nodes are used to represent the structure of binding contours
2620 and declarations, once those contours have been exited and their contents
52d2830e 2621 compiled. This information is used for outputting debugging info. */
c6a1db6c
RS
2622
2623tree
2624build_block (vars, tags, subblocks, supercontext, chain)
272df862 2625 tree vars, tags ATTRIBUTE_UNUSED, subblocks, supercontext, chain;
c6a1db6c 2626{
b3694847 2627 tree block = make_node (BLOCK);
d4b60170 2628
c6a1db6c 2629 BLOCK_VARS (block) = vars;
c6a1db6c
RS
2630 BLOCK_SUBBLOCKS (block) = subblocks;
2631 BLOCK_SUPERCONTEXT (block) = supercontext;
2632 BLOCK_CHAIN (block) = chain;
2633 return block;
2634}
bf1e5319
APB
2635
2636/* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
2637 location where an expression or an identifier were encountered. It
2638 is necessary for languages where the frontend parser will handle
2639 recursively more than one file (Java is one of them). */
2640
2641tree
2642build_expr_wfl (node, file, line, col)
2643 tree node;
37b37199 2644 const char *file;
bf1e5319
APB
2645 int line, col;
2646{
37b37199 2647 static const char *last_file = 0;
d4b60170 2648 static tree last_filenode = NULL_TREE;
b3694847 2649 tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
9fe9a2e1 2650
bf1e5319 2651 EXPR_WFL_NODE (wfl) = node;
bf1e5319 2652 EXPR_WFL_SET_LINECOL (wfl, line, col);
9fe9a2e1
APB
2653 if (file != last_file)
2654 {
2655 last_file = file;
2656 last_filenode = file ? get_identifier (file) : NULL_TREE;
2657 }
d4b60170 2658
9fe9a2e1
APB
2659 EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
2660 if (node)
2661 {
2662 TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
2663 TREE_TYPE (wfl) = TREE_TYPE (node);
2664 }
d4b60170 2665
bf1e5319
APB
2666 return wfl;
2667}
c6a1db6c 2668\f
91d231cb 2669/* Return a declaration like DDECL except that its DECL_ATTRIBUTES
0f41302f 2670 is ATTRIBUTE. */
1a2927d2
RK
2671
2672tree
2673build_decl_attribute_variant (ddecl, attribute)
2674 tree ddecl, attribute;
2675{
91d231cb 2676 DECL_ATTRIBUTES (ddecl) = attribute;
1a2927d2
RK
2677 return ddecl;
2678}
2679
91e97eb8
RK
2680/* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2681 is ATTRIBUTE.
2682
f8a89236 2683 Record such modified types already made so we don't make duplicates. */
91e97eb8
RK
2684
2685tree
2686build_type_attribute_variant (ttype, attribute)
2687 tree ttype, attribute;
2688{
3b03c671 2689 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
91e97eb8 2690 {
05bccae2 2691 unsigned int hashcode;
91e97eb8
RK
2692 tree ntype;
2693
91e97eb8 2694 ntype = copy_node (ttype);
91e97eb8
RK
2695
2696 TYPE_POINTER_TO (ntype) = 0;
2697 TYPE_REFERENCE_TO (ntype) = 0;
2698 TYPE_ATTRIBUTES (ntype) = attribute;
2699
2700 /* Create a new main variant of TYPE. */
2701 TYPE_MAIN_VARIANT (ntype) = ntype;
2702 TYPE_NEXT_VARIANT (ntype) = 0;
3932261a 2703 set_type_quals (ntype, TYPE_UNQUALIFIED);
91e97eb8 2704
05bccae2
RK
2705 hashcode = (TYPE_HASH (TREE_CODE (ntype))
2706 + TYPE_HASH (TREE_TYPE (ntype))
2707 + attribute_hash_list (attribute));
91e97eb8
RK
2708
2709 switch (TREE_CODE (ntype))
dc478a5d 2710 {
e9a25f70
JL
2711 case FUNCTION_TYPE:
2712 hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
2713 break;
2714 case ARRAY_TYPE:
2715 hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
2716 break;
2717 case INTEGER_TYPE:
2718 hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
2719 break;
2720 case REAL_TYPE:
2721 hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
2722 break;
2723 default:
2724 break;
dc478a5d 2725 }
91e97eb8
RK
2726
2727 ntype = type_hash_canon (hashcode, ntype);
3932261a 2728 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
91e97eb8
RK
2729 }
2730
2731 return ttype;
2732}
1a2927d2 2733
0e9e1e0a 2734/* Return nonzero if IDENT is a valid name for attribute ATTR,
2a3c15b5
DE
2735 or zero if not.
2736
2737 We try both `text' and `__text__', ATTR may be either one. */
2738/* ??? It might be a reasonable simplification to require ATTR to be only
2739 `text'. One might then also require attribute lists to be stored in
2740 their canonicalized form. */
2741
2742int
2743is_attribute_p (attr, ident)
37b37199 2744 const char *attr;
2a3c15b5
DE
2745 tree ident;
2746{
2747 int ident_len, attr_len;
63ad61ed 2748 const char *p;
2a3c15b5
DE
2749
2750 if (TREE_CODE (ident) != IDENTIFIER_NODE)
2751 return 0;
2752
2753 if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
2754 return 1;
2755
2756 p = IDENTIFIER_POINTER (ident);
2757 ident_len = strlen (p);
2758 attr_len = strlen (attr);
2759
2760 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
2761 if (attr[0] == '_')
2762 {
2763 if (attr[1] != '_'
2764 || attr[attr_len - 2] != '_'
2765 || attr[attr_len - 1] != '_')
2766 abort ();
2767 if (ident_len == attr_len - 4
2768 && strncmp (attr + 2, p, attr_len - 4) == 0)
2769 return 1;
2770 }
2771 else
2772 {
2773 if (ident_len == attr_len + 4
2774 && p[0] == '_' && p[1] == '_'
2775 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
2776 && strncmp (attr, p + 2, attr_len) == 0)
2777 return 1;
2778 }
2779
2780 return 0;
2781}
2782
2783/* Given an attribute name and a list of attributes, return a pointer to the
2784 attribute's list element if the attribute is part of the list, or NULL_TREE
91d231cb 2785 if not found. If the attribute appears more than once, this only
ff7cc307
JM
2786 returns the first occurrence; the TREE_CHAIN of the return value should
2787 be passed back in if further occurrences are wanted. */
2a3c15b5
DE
2788
2789tree
2790lookup_attribute (attr_name, list)
37b37199 2791 const char *attr_name;
2a3c15b5
DE
2792 tree list;
2793{
2794 tree l;
2795
2796 for (l = list; l; l = TREE_CHAIN (l))
2797 {
2798 if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
2799 abort ();
2800 if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
2801 return l;
2802 }
2803
2804 return NULL_TREE;
2805}
f3209e2f
DE
2806
2807/* Return an attribute list that is the union of a1 and a2. */
2808
2809tree
2810merge_attributes (a1, a2)
b3694847 2811 tree a1, a2;
f3209e2f
DE
2812{
2813 tree attributes;
2814
2815 /* Either one unset? Take the set one. */
2816
d4b60170 2817 if ((attributes = a1) == 0)
f3209e2f
DE
2818 attributes = a2;
2819
2820 /* One that completely contains the other? Take it. */
2821
d4b60170 2822 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
dc478a5d
KH
2823 {
2824 if (attribute_list_contained (a2, a1))
2825 attributes = a2;
2826 else
2827 {
2828 /* Pick the longest list, and hang on the other list. */
dc478a5d
KH
2829
2830 if (list_length (a1) < list_length (a2))
2831 attributes = a2, a2 = a1;
2832
2833 for (; a2 != 0; a2 = TREE_CHAIN (a2))
91d231cb
JM
2834 {
2835 tree a;
2836 for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2837 attributes);
2838 a != NULL_TREE;
2839 a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2840 TREE_CHAIN (a)))
2841 {
2842 if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
2843 break;
2844 }
2845 if (a == NULL_TREE)
2846 {
2847 a1 = copy_node (a2);
2848 TREE_CHAIN (a1) = attributes;
2849 attributes = a1;
2850 }
2851 }
dc478a5d
KH
2852 }
2853 }
f3209e2f
DE
2854 return attributes;
2855}
d9525bec
BK
2856
2857/* Given types T1 and T2, merge their attributes and return
672a6f42 2858 the result. */
d9525bec
BK
2859
2860tree
672a6f42 2861merge_type_attributes (t1, t2)
d9525bec
BK
2862 tree t1, t2;
2863{
d9525bec
BK
2864 return merge_attributes (TYPE_ATTRIBUTES (t1),
2865 TYPE_ATTRIBUTES (t2));
d9525bec
BK
2866}
2867
2868/* Given decls OLDDECL and NEWDECL, merge their attributes and return
2869 the result. */
2870
2871tree
672a6f42 2872merge_decl_attributes (olddecl, newdecl)
d9525bec
BK
2873 tree olddecl, newdecl;
2874{
91d231cb
JM
2875 return merge_attributes (DECL_ATTRIBUTES (olddecl),
2876 DECL_ATTRIBUTES (newdecl));
d9525bec 2877}
672a6f42
NB
2878
2879#ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
2880
2881/* Specialization of merge_decl_attributes for various Windows targets.
2882
2883 This handles the following situation:
2884
2885 __declspec (dllimport) int foo;
2886 int foo;
2887
2888 The second instance of `foo' nullifies the dllimport. */
2889
2890tree
2891merge_dllimport_decl_attributes (old, new)
2892 tree old;
2893 tree new;
2894{
2895 tree a;
2896 int delete_dllimport_p;
2897
91d231cb
JM
2898 old = DECL_ATTRIBUTES (old);
2899 new = DECL_ATTRIBUTES (new);
672a6f42
NB
2900
2901 /* What we need to do here is remove from `old' dllimport if it doesn't
2902 appear in `new'. dllimport behaves like extern: if a declaration is
2903 marked dllimport and a definition appears later, then the object
2904 is not dllimport'd. */
2905 if (lookup_attribute ("dllimport", old) != NULL_TREE
2906 && lookup_attribute ("dllimport", new) == NULL_TREE)
2907 delete_dllimport_p = 1;
2908 else
2909 delete_dllimport_p = 0;
2910
2911 a = merge_attributes (old, new);
2912
2913 if (delete_dllimport_p)
2914 {
a01da83b 2915 tree prev, t;
672a6f42
NB
2916
2917 /* Scan the list for dllimport and delete it. */
2918 for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
2919 {
2920 if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
2921 {
2922 if (prev == NULL_TREE)
2923 a = TREE_CHAIN (a);
2924 else
2925 TREE_CHAIN (prev) = TREE_CHAIN (t);
2926 break;
2927 }
2928 }
2929 }
2930
2931 return a;
2932}
2933
2934#endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
91e97eb8 2935\f
3932261a
MM
2936/* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
2937 of the various TYPE_QUAL values. */
c6a1db6c 2938
3932261a
MM
2939static void
2940set_type_quals (type, type_quals)
2941 tree type;
dc478a5d 2942 int type_quals;
3932261a
MM
2943{
2944 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
2945 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
2946 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
2947}
c6a1db6c 2948
5101b304
MM
2949/* Return a version of the TYPE, qualified as indicated by the
2950 TYPE_QUALS, if one exists. If no qualified version exists yet,
2951 return NULL_TREE. */
c6a1db6c
RS
2952
2953tree
5101b304 2954get_qualified_type (type, type_quals)
c6a1db6c 2955 tree type;
3932261a 2956 int type_quals;
c6a1db6c 2957{
5101b304 2958 tree t;
dc478a5d 2959
e24fa534
JW
2960 /* Search the chain of variants to see if there is already one there just
2961 like the one we need to have. If so, use that existing one. We must
2962 preserve the TYPE_NAME, since there is code that depends on this. */
b217d7fe 2963 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
92b5aacd
DP
2964 if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type)
2965 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
e24fa534 2966 return t;
c6a1db6c 2967
5101b304
MM
2968 return NULL_TREE;
2969}
2970
2971/* Like get_qualified_type, but creates the type if it does not
2972 exist. This function never returns NULL_TREE. */
2973
2974tree
2975build_qualified_type (type, type_quals)
2976 tree type;
2977 int type_quals;
2978{
2979 tree t;
2980
2981 /* See if we already have the appropriate qualified variant. */
2982 t = get_qualified_type (type, type_quals);
2983
2984 /* If not, build it. */
2985 if (!t)
2986 {
2987 t = build_type_copy (type);
2988 set_type_quals (t, type_quals);
2989 }
2990
c6a1db6c
RS
2991 return t;
2992}
b4ac57ab
RS
2993
2994/* Create a new variant of TYPE, equivalent but distinct.
2995 This is so the caller can modify it. */
2996
2997tree
2998build_type_copy (type)
2999 tree type;
3000{
b3694847 3001 tree t, m = TYPE_MAIN_VARIANT (type);
b4ac57ab 3002
b4ac57ab 3003 t = copy_node (type);
d9cbc259 3004
b4ac57ab
RS
3005 TYPE_POINTER_TO (t) = 0;
3006 TYPE_REFERENCE_TO (t) = 0;
3007
3008 /* Add this type to the chain of variants of TYPE. */
3009 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3010 TYPE_NEXT_VARIANT (m) = t;
3011
b4ac57ab
RS
3012 return t;
3013}
c6a1db6c
RS
3014\f
3015/* Hashing of types so that we don't make duplicates.
3016 The entry point is `type_hash_canon'. */
3017
c6a1db6c
RS
3018/* Compute a hash code for a list of types (chain of TREE_LIST nodes
3019 with types in the TREE_VALUE slots), by adding the hash codes
3020 of the individual types. */
3021
05bccae2 3022unsigned int
c6a1db6c
RS
3023type_hash_list (list)
3024 tree list;
3025{
05bccae2 3026 unsigned int hashcode;
b3694847 3027 tree tail;
d4b60170 3028
c6a1db6c
RS
3029 for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3030 hashcode += TYPE_HASH (TREE_VALUE (tail));
d4b60170 3031
c6a1db6c
RS
3032 return hashcode;
3033}
3034
d88f311b
ML
3035/* These are the Hashtable callback functions. */
3036
3037/* Returns true if the types are equal. */
3038
3039static int
3040type_hash_eq (va, vb)
3041 const void *va;
3042 const void *vb;
3043{
3044 const struct type_hash *a = va, *b = vb;
3045 if (a->hash == b->hash
3046 && TREE_CODE (a->type) == TREE_CODE (b->type)
3047 && TREE_TYPE (a->type) == TREE_TYPE (b->type)
3048 && attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3049 TYPE_ATTRIBUTES (b->type))
3050 && TYPE_ALIGN (a->type) == TYPE_ALIGN (b->type)
3051 && (TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
3052 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
3053 TYPE_MAX_VALUE (b->type)))
3054 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
3055 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
3056 TYPE_MIN_VALUE (b->type)))
3057 /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE. */
3058 && (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
3059 || (TYPE_DOMAIN (a->type)
3060 && TREE_CODE (TYPE_DOMAIN (a->type)) == TREE_LIST
3061 && TYPE_DOMAIN (b->type)
3062 && TREE_CODE (TYPE_DOMAIN (b->type)) == TREE_LIST
3063 && type_list_equal (TYPE_DOMAIN (a->type),
3064 TYPE_DOMAIN (b->type)))))
3065 return 1;
3066 return 0;
3067}
3068
3069/* Return the cached hash value. */
3070
fb7e6024 3071static hashval_t
d88f311b
ML
3072type_hash_hash (item)
3073 const void *item;
3074{
dc478a5d 3075 return ((const struct type_hash *) item)->hash;
d88f311b
ML
3076}
3077
c6a1db6c
RS
3078/* Look in the type hash table for a type isomorphic to TYPE.
3079 If one is found, return it. Otherwise return 0. */
3080
3081tree
3082type_hash_lookup (hashcode, type)
05bccae2 3083 unsigned int hashcode;
c6a1db6c
RS
3084 tree type;
3085{
d88f311b 3086 struct type_hash *h, in;
da48638e
AH
3087
3088 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
dc478a5d 3089 must call that routine before comparing TYPE_ALIGNs. */
da48638e
AH
3090 layout_type (type);
3091
d88f311b
ML
3092 in.hash = hashcode;
3093 in.type = type;
d4b60170 3094
d88f311b
ML
3095 h = htab_find_with_hash (type_hash_table, &in, hashcode);
3096 if (h)
3097 return h->type;
3098 return NULL_TREE;
c6a1db6c
RS
3099}
3100
3101/* Add an entry to the type-hash-table
3102 for a type TYPE whose hash code is HASHCODE. */
3103
3104void
3105type_hash_add (hashcode, type)
05bccae2 3106 unsigned int hashcode;
c6a1db6c
RS
3107 tree type;
3108{
d88f311b
ML
3109 struct type_hash *h;
3110 void **loc;
c6a1db6c 3111
4c160717 3112 h = (struct type_hash *) ggc_alloc (sizeof (struct type_hash));
d88f311b 3113 h->hash = hashcode;
c6a1db6c 3114 h->type = type;
f64bedbd 3115 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
dc478a5d 3116 *(struct type_hash **) loc = h;
c6a1db6c
RS
3117}
3118
3119/* Given TYPE, and HASHCODE its hash code, return the canonical
3120 object for an identical type if one already exists.
3121 Otherwise, return TYPE, and record it as the canonical object
3122 if it is a permanent object.
3123
3124 To use this function, first create a type of the sort you want.
3125 Then compute its hash code from the fields of the type that
3126 make it different from other similar types.
3127 Then call this function and use the value.
3128 This function frees the type you pass in if it is a duplicate. */
3129
3130/* Set to 1 to debug without canonicalization. Never set by program. */
3131int debug_no_type_hash = 0;
3132
3133tree
3134type_hash_canon (hashcode, type)
05bccae2 3135 unsigned int hashcode;
c6a1db6c
RS
3136 tree type;
3137{
3138 tree t1;
3139
3140 if (debug_no_type_hash)
3141 return type;
3142
4c160717
RK
3143 /* See if the type is in the hash table already. If so, return it.
3144 Otherwise, add the type. */
c6a1db6c
RS
3145 t1 = type_hash_lookup (hashcode, type);
3146 if (t1 != 0)
3147 {
c6a1db6c 3148#ifdef GATHER_STATISTICS
770ae6cc
RK
3149 tree_node_counts[(int) t_kind]--;
3150 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
c6a1db6c
RS
3151#endif
3152 return t1;
3153 }
4c160717
RK
3154 else
3155 {
3156 type_hash_add (hashcode, type);
3157 return type;
3158 }
c6a1db6c
RS
3159}
3160
6abba055
RK
3161/* See if the data pointed to by the type hash table is marked. We consider
3162 it marked if the type is marked or if a debug type number or symbol
3163 table entry has been made for the type. This reduces the amount of
3164 debugging output and eliminates that dependency of the debug output on
3165 the number of garbage collections. */
d88f311b
ML
3166
3167static int
4c160717
RK
3168type_hash_marked_p (p)
3169 const void *p;
d88f311b 3170{
6abba055
RK
3171 tree type = ((struct type_hash *) p)->type;
3172
3173 return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
d88f311b
ML
3174}
3175
d88f311b
ML
3176static void
3177print_type_hash_statistics ()
3178{
770ae6cc
RK
3179 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3180 (long) htab_size (type_hash_table),
3181 (long) htab_elements (type_hash_table),
d88f311b 3182 htab_collisions (type_hash_table));
87ff9c8e
RH
3183}
3184
2a3c15b5
DE
3185/* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3186 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3187 by adding the hash codes of the individual attributes. */
3e3d7e77 3188
05bccae2 3189unsigned int
2a3c15b5
DE
3190attribute_hash_list (list)
3191 tree list;
3e3d7e77 3192{
05bccae2 3193 unsigned int hashcode;
b3694847 3194 tree tail;
d4b60170 3195
2a3c15b5
DE
3196 for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3197 /* ??? Do we want to add in TREE_VALUE too? */
3198 hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3199 return hashcode;
3e3d7e77
RK
3200}
3201
91e97eb8
RK
3202/* Given two lists of attributes, return true if list l2 is
3203 equivalent to l1. */
3204
3205int
3206attribute_list_equal (l1, l2)
3207 tree l1, l2;
3208{
3b03c671
KH
3209 return attribute_list_contained (l1, l2)
3210 && attribute_list_contained (l2, l1);
91e97eb8
RK
3211}
3212
2a3c15b5
DE
3213/* Given two lists of attributes, return true if list L2 is
3214 completely contained within L1. */
3215/* ??? This would be faster if attribute names were stored in a canonicalized
3216 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3217 must be used to show these elements are equivalent (which they are). */
3218/* ??? It's not clear that attributes with arguments will always be handled
3219 correctly. */
91e97eb8
RK
3220
3221int
3222attribute_list_contained (l1, l2)
3223 tree l1, l2;
3224{
b3694847 3225 tree t1, t2;
91e97eb8
RK
3226
3227 /* First check the obvious, maybe the lists are identical. */
3228 if (l1 == l2)
dc478a5d 3229 return 1;
91e97eb8 3230
2a3c15b5 3231 /* Maybe the lists are similar. */
91e97eb8 3232 for (t1 = l1, t2 = l2;
d4b60170 3233 t1 != 0 && t2 != 0
2a3c15b5 3234 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
91e97eb8
RK
3235 && TREE_VALUE (t1) == TREE_VALUE (t2);
3236 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3237
3238 /* Maybe the lists are equal. */
3239 if (t1 == 0 && t2 == 0)
a01da83b 3240 return 1;
91e97eb8 3241
d4b60170 3242 for (; t2 != 0; t2 = TREE_CHAIN (t2))
2a3c15b5 3243 {
91d231cb
JM
3244 tree attr;
3245 for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3246 attr != NULL_TREE;
3247 attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3248 TREE_CHAIN (attr)))
3249 {
3250 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3251 break;
3252 }
2a3c15b5 3253
d4b60170 3254 if (attr == 0)
91e97eb8 3255 return 0;
d4b60170 3256
2a3c15b5
DE
3257 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3258 return 0;
3259 }
3e3d7e77 3260
91e97eb8
RK
3261 return 1;
3262}
3263
c6a1db6c
RS
3264/* Given two lists of types
3265 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3266 return 1 if the lists contain the same types in the same order.
3267 Also, the TREE_PURPOSEs must match. */
3268
3269int
3270type_list_equal (l1, l2)
3271 tree l1, l2;
3272{
b3694847 3273 tree t1, t2;
364e1f1c 3274
c6a1db6c 3275 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
364e1f1c
RK
3276 if (TREE_VALUE (t1) != TREE_VALUE (t2)
3277 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
bbda4250
JM
3278 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3279 && (TREE_TYPE (TREE_PURPOSE (t1))
3280 == TREE_TYPE (TREE_PURPOSE (t2))))))
364e1f1c 3281 return 0;
c6a1db6c
RS
3282
3283 return t1 == t2;
3284}
3285
f5d6a24c
MM
3286/* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3287 given by TYPE. If the argument list accepts variable arguments,
3288 then this function counts only the ordinary arguments. */
3289
3290int
3291type_num_arguments (type)
3292 tree type;
3293{
3294 int i = 0;
3295 tree t;
3296
3297 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3298 /* If the function does not take a variable number of arguments,
3299 the last element in the list will have type `void'. */
3300 if (VOID_TYPE_P (TREE_VALUE (t)))
3301 break;
3302 else
3303 ++i;
3304
3305 return i;
3306}
3307
c6a1db6c
RS
3308/* Nonzero if integer constants T1 and T2
3309 represent the same constant value. */
3310
3311int
3312tree_int_cst_equal (t1, t2)
3313 tree t1, t2;
3314{
3315 if (t1 == t2)
3316 return 1;
d4b60170 3317
c6a1db6c
RS
3318 if (t1 == 0 || t2 == 0)
3319 return 0;
d4b60170 3320
c6a1db6c
RS
3321 if (TREE_CODE (t1) == INTEGER_CST
3322 && TREE_CODE (t2) == INTEGER_CST
3323 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3324 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3325 return 1;
d4b60170 3326
c6a1db6c
RS
3327 return 0;
3328}
3329
3330/* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3331 The precise way of comparison depends on their data type. */
3332
3333int
3334tree_int_cst_lt (t1, t2)
3335 tree t1, t2;
3336{
3337 if (t1 == t2)
3338 return 0;
3339
b13ab42c
AO
3340 if (TREE_UNSIGNED (TREE_TYPE (t1)) != TREE_UNSIGNED (TREE_TYPE (t2)))
3341 {
3342 int t1_sgn = tree_int_cst_sgn (t1);
3343 int t2_sgn = tree_int_cst_sgn (t2);
3344
3345 if (t1_sgn < t2_sgn)
3346 return 1;
3347 else if (t1_sgn > t2_sgn)
3348 return 0;
3349 /* Otherwise, both are non-negative, so we compare them as
3350 unsigned just in case one of them would overflow a signed
3351 type. */
3352 }
3353 else if (! TREE_UNSIGNED (TREE_TYPE (t1)))
c6a1db6c 3354 return INT_CST_LT (t1, t2);
d4b60170 3355
c6a1db6c
RS
3356 return INT_CST_LT_UNSIGNED (t1, t2);
3357}
3358
56cb9733
MM
3359/* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
3360
3361int
3362tree_int_cst_compare (t1, t2)
3363 tree t1;
3364 tree t2;
3365{
3366 if (tree_int_cst_lt (t1, t2))
3367 return -1;
3368 else if (tree_int_cst_lt (t2, t1))
3369 return 1;
3b03c671 3370 else
56cb9733
MM
3371 return 0;
3372}
3373
4636c87e
JJ
3374/* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
3375 the host. If POS is zero, the value can be represented in a single
3376 HOST_WIDE_INT. If POS is nonzero, the value must be positive and can
3377 be represented in a single unsigned HOST_WIDE_INT. */
665f2503
RK
3378
3379int
3380host_integerp (t, pos)
3381 tree t;
3382 int pos;
3383{
3384 return (TREE_CODE (t) == INTEGER_CST
3385 && ! TREE_OVERFLOW (t)
3386 && ((TREE_INT_CST_HIGH (t) == 0
3387 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
3388 || (! pos && TREE_INT_CST_HIGH (t) == -1
4636c87e
JJ
3389 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
3390 && ! TREE_UNSIGNED (TREE_TYPE (t)))
3391 || (pos && TREE_INT_CST_HIGH (t) == 0)));
665f2503
RK
3392}
3393
3394/* Return the HOST_WIDE_INT least significant bits of T if it is an
3395 INTEGER_CST and there is no overflow. POS is nonzero if the result must
3396 be positive. Abort if we cannot satisfy the above conditions. */
3397
3398HOST_WIDE_INT
3399tree_low_cst (t, pos)
3400 tree t;
3401 int pos;
3402{
3403 if (host_integerp (t, pos))
3404 return TREE_INT_CST_LOW (t);
3405 else
3406 abort ();
dc478a5d 3407}
665f2503 3408
4694840a
OH
3409/* Return the most significant bit of the integer constant T. */
3410
3411int
3412tree_int_cst_msb (t)
3413 tree t;
3414{
3415 int prec;
3416 HOST_WIDE_INT h;
3417 unsigned HOST_WIDE_INT l;
3418
3419 /* Note that using TYPE_PRECISION here is wrong. We care about the
3420 actual bits, not the (arbitrary) range of the type. */
3421 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
3422 rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
3423 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
3424 return (l & 1) == 1;
3425}
3426
6d9cb074
RK
3427/* Return an indication of the sign of the integer constant T.
3428 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3429 Note that -1 will never be returned it T's type is unsigned. */
3430
3431int
3432tree_int_cst_sgn (t)
3433 tree t;
3434{
3435 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3436 return 0;
3437 else if (TREE_UNSIGNED (TREE_TYPE (t)))
3438 return 1;
3439 else if (TREE_INT_CST_HIGH (t) < 0)
3440 return -1;
3441 else
3442 return 1;
3443}
3444
364e1f1c
RK
3445/* Compare two constructor-element-type constants. Return 1 if the lists
3446 are known to be equal; otherwise return 0. */
3447
c6a1db6c
RS
3448int
3449simple_cst_list_equal (l1, l2)
3450 tree l1, l2;
3451{
3452 while (l1 != NULL_TREE && l2 != NULL_TREE)
3453 {
364e1f1c 3454 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
c6a1db6c 3455 return 0;
364e1f1c 3456
c6a1db6c
RS
3457 l1 = TREE_CHAIN (l1);
3458 l2 = TREE_CHAIN (l2);
3459 }
364e1f1c 3460
d4b60170 3461 return l1 == l2;
c6a1db6c
RS
3462}
3463
3464/* Return truthvalue of whether T1 is the same tree structure as T2.
3465 Return 1 if they are the same.
3466 Return 0 if they are understandably different.
3467 Return -1 if either contains tree structure not understood by
3468 this function. */
3469
3470int
3471simple_cst_equal (t1, t2)
3472 tree t1, t2;
3473{
b3694847 3474 enum tree_code code1, code2;
c6a1db6c 3475 int cmp;
d4b60170 3476 int i;
c6a1db6c
RS
3477
3478 if (t1 == t2)
3479 return 1;
3480 if (t1 == 0 || t2 == 0)
3481 return 0;
3482
3483 code1 = TREE_CODE (t1);
3484 code2 = TREE_CODE (t2);
3485
3486 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
af79bb86
JM
3487 {
3488 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3489 || code2 == NON_LVALUE_EXPR)
3490 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3491 else
3492 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3493 }
d4b60170 3494
c6a1db6c
RS
3495 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3496 || code2 == NON_LVALUE_EXPR)
3497 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3498
3499 if (code1 != code2)
3500 return 0;
3501
3502 switch (code1)
3503 {
3504 case INTEGER_CST:
d4b60170
RK
3505 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3506 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
c6a1db6c
RS
3507
3508 case REAL_CST:
41c9120b 3509 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
c6a1db6c
RS
3510
3511 case STRING_CST:
d4b60170 3512 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
da61dec9 3513 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
d4b60170 3514 TREE_STRING_LENGTH (t1)));
c6a1db6c
RS
3515
3516 case CONSTRUCTOR:
b3abfd6f
JM
3517 if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
3518 return 1;
3519 else
3520 abort ();
c6a1db6c
RS
3521
3522 case SAVE_EXPR:
3523 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3524
3525 case CALL_EXPR:
3526 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3527 if (cmp <= 0)
3528 return cmp;
d4b60170
RK
3529 return
3530 simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
c6a1db6c
RS
3531
3532 case TARGET_EXPR:
3533 /* Special case: if either target is an unallocated VAR_DECL,
3534 it means that it's going to be unified with whatever the
3535 TARGET_EXPR is really supposed to initialize, so treat it
3536 as being equivalent to anything. */
3537 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
3538 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
19e7881c 3539 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
c6a1db6c
RS
3540 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
3541 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
19e7881c 3542 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
c6a1db6c
RS
3543 cmp = 1;
3544 else
3545 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
d4b60170 3546
c6a1db6c
RS
3547 if (cmp <= 0)
3548 return cmp;
d4b60170 3549
c6a1db6c
RS
3550 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3551
3552 case WITH_CLEANUP_EXPR:
3553 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3554 if (cmp <= 0)
3555 return cmp;
d4b60170 3556
6ad7895a 3557 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
c6a1db6c
RS
3558
3559 case COMPONENT_REF:
3560 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
3561 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
d4b60170 3562
c6a1db6c
RS
3563 return 0;
3564
c6a1db6c
RS
3565 case VAR_DECL:
3566 case PARM_DECL:
3567 case CONST_DECL:
3568 case FUNCTION_DECL:
3569 return 0;
dc478a5d 3570
e9a25f70
JL
3571 default:
3572 break;
86aed40b 3573 }
c6a1db6c 3574
8ae49a28
RK
3575 /* This general rule works for most tree codes. All exceptions should be
3576 handled above. If this is a language-specific tree code, we can't
3577 trust what might be in the operand, so say we don't know
3578 the situation. */
0a6969ad 3579 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
8ae49a28 3580 return -1;
c6a1db6c 3581
86aed40b
RS
3582 switch (TREE_CODE_CLASS (code1))
3583 {
86aed40b
RS
3584 case '1':
3585 case '2':
3586 case '<':
3587 case 'e':
3588 case 'r':
3589 case 's':
3590 cmp = 1;
8d5e6e25 3591 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
86aed40b
RS
3592 {
3593 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
3594 if (cmp <= 0)
3595 return cmp;
3596 }
d4b60170 3597
86aed40b 3598 return cmp;
86aed40b 3599
e9a25f70
JL
3600 default:
3601 return -1;
3602 }
c6a1db6c 3603}
05bccae2
RK
3604
3605/* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
3606 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
3607 than U, respectively. */
3608
3609int
3610compare_tree_int (t, u)
3611 tree t;
995b5904 3612 unsigned HOST_WIDE_INT u;
05bccae2
RK
3613{
3614 if (tree_int_cst_sgn (t) < 0)
3615 return -1;
3616 else if (TREE_INT_CST_HIGH (t) != 0)
3617 return 1;
3618 else if (TREE_INT_CST_LOW (t) == u)
3619 return 0;
3620 else if (TREE_INT_CST_LOW (t) < u)
3621 return -1;
3622 else
3623 return 1;
3624}
03307888
JM
3625
3626/* Generate a hash value for an expression. This can be used iteratively
3627 by passing a previous result as the "val" argument.
3628
3629 This function is intended to produce the same hash for expressions which
3630 would compare equal using operand_equal_p. */
3631
3632hashval_t
3633iterative_hash_expr (tree t, hashval_t val)
3634{
3635 int i;
3636 enum tree_code code;
3637 char class;
3638
3639 if (t == NULL_TREE)
3640 return iterative_hash_object (t, val);
3641
3642 code = TREE_CODE (t);
3643 class = TREE_CODE_CLASS (code);
3644
3645 if (class == 'd')
3646 {
3647 /* Decls we can just compare by pointer. */
3648 val = iterative_hash_object (t, val);
3649 }
3650 else if (class == 'c')
3651 {
3652 /* Alas, constants aren't shared, so we can't rely on pointer
3653 identity. */
3654 if (code == INTEGER_CST)
3655 {
3656 val = iterative_hash_object (TREE_INT_CST_LOW (t), val);
3657 val = iterative_hash_object (TREE_INT_CST_HIGH (t), val);
3658 }
3659 else if (code == REAL_CST)
3660 val = iterative_hash (TREE_REAL_CST_PTR (t),
3661 sizeof (REAL_VALUE_TYPE), val);
3662 else if (code == STRING_CST)
3663 val = iterative_hash (TREE_STRING_POINTER (t),
3664 TREE_STRING_LENGTH (t), val);
3665 else if (code == COMPLEX_CST)
3666 {
3667 val = iterative_hash_expr (TREE_REALPART (t), val);
3668 val = iterative_hash_expr (TREE_IMAGPART (t), val);
3669 }
3670 else if (code == VECTOR_CST)
3671 val = iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
3672 else
3673 abort ();
3674 }
3675 else if (IS_EXPR_CODE_CLASS (class) || class == 'r')
3676 {
3677 val = iterative_hash_object (code, val);
3678
3679 if (code == NOP_EXPR || code == CONVERT_EXPR
3680 || code == NON_LVALUE_EXPR)
3681 val = iterative_hash_object (TREE_TYPE (t), val);
066f50a9
JM
3682
3683 if (code == PLUS_EXPR || code == MULT_EXPR || code == MIN_EXPR
3684 || code == MAX_EXPR || code == BIT_IOR_EXPR || code == BIT_XOR_EXPR
3685 || code == BIT_AND_EXPR || code == NE_EXPR || code == EQ_EXPR)
3686 {
3687 /* It's a commutative expression. We want to hash it the same
3688 however it appears. We do this by first hashing both operands
3689 and then rehashing based on the order of their independent
3690 hashes. */
3691 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
3692 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
3693 hashval_t t;
3694
3695 if (one > two)
3696 t = one, one = two, two = t;
3697
3698 val = iterative_hash_object (one, val);
3699 val = iterative_hash_object (two, val);
3700 }
3701 else
3702 for (i = first_rtl_op (code) - 1; i >= 0; --i)
3703 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
03307888
JM
3704 }
3705 else if (code == TREE_LIST)
3706 {
3707 /* A list of expressions, for a CALL_EXPR or as the elements of a
3708 VECTOR_CST. */
3709 for (; t; t = TREE_CHAIN (t))
3710 val = iterative_hash_expr (TREE_VALUE (t), val);
3711 }
3712 else
3713 abort ();
3714
3715 return val;
3716}
c6a1db6c
RS
3717\f
3718/* Constructors for pointer, array and function types.
3719 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
3720 constructed by language-dependent code, not here.) */
3721
4977bab6
ZW
3722/* Construct, lay out and return the type of pointers to TO_TYPE
3723 with mode MODE. If such a type has already been constructed,
3724 reuse it. */
c6a1db6c
RS
3725
3726tree
4977bab6 3727build_pointer_type_for_mode (to_type, mode)
c6a1db6c 3728 tree to_type;
4977bab6 3729 enum machine_mode mode;
c6a1db6c 3730{
b3694847 3731 tree t = TYPE_POINTER_TO (to_type);
c6a1db6c
RS
3732
3733 /* First, if we already have a type for pointers to TO_TYPE, use it. */
4977bab6 3734 if (t != 0 && mode == ptr_mode)
c6a1db6c
RS
3735 return t;
3736
c6a1db6c 3737 t = make_node (POINTER_TYPE);
d9cbc259 3738
c6a1db6c 3739 TREE_TYPE (t) = to_type;
4977bab6 3740 TYPE_MODE (t) = mode;
c6a1db6c
RS
3741
3742 /* Record this type as the pointer to TO_TYPE. */
4977bab6 3743 if (mode == ptr_mode)
c6a1db6c
RS
3744 TYPE_POINTER_TO (to_type) = t;
3745
3746 /* Lay out the type. This function has many callers that are concerned
3747 with expression-construction, and this simplifies them all.
d9cbc259 3748 Also, it guarantees the TYPE_SIZE is in the same obstack as the type. */
c6a1db6c
RS
3749 layout_type (t);
3750
c6a1db6c
RS
3751 return t;
3752}
3753
4977bab6 3754/* By default build pointers in ptr_mode. */
d4b60170
RK
3755
3756tree
4977bab6
ZW
3757build_pointer_type (to_type)
3758 tree to_type;
3759{
3760 return build_pointer_type_for_mode (to_type, ptr_mode);
3761}
3762
3763/* Construct, lay out and return the type of references to TO_TYPE
3764 with mode MODE. If such a type has already been constructed,
3765 reuse it. */
3766
3767tree
3768build_reference_type_for_mode (to_type, mode)
d4b60170 3769 tree to_type;
4977bab6 3770 enum machine_mode mode;
d4b60170 3771{
b3694847 3772 tree t = TYPE_REFERENCE_TO (to_type);
d4b60170
RK
3773
3774 /* First, if we already have a type for pointers to TO_TYPE, use it. */
4977bab6 3775 if (t != 0 && mode == ptr_mode)
d4b60170
RK
3776 return t;
3777
d4b60170 3778 t = make_node (REFERENCE_TYPE);
d4b60170
RK
3779
3780 TREE_TYPE (t) = to_type;
4977bab6 3781 TYPE_MODE (t) = mode;
d4b60170
RK
3782
3783 /* Record this type as the pointer to TO_TYPE. */
4977bab6 3784 if (mode == ptr_mode)
d4b60170
RK
3785 TYPE_REFERENCE_TO (to_type) = t;
3786
3787 layout_type (t);
3788
3789 return t;
3790}
3791
4977bab6
ZW
3792
3793/* Build the node for the type of references-to-TO_TYPE by default
3794 in ptr_mode. */
3795
3796tree
3797build_reference_type (to_type)
3798 tree to_type;
3799{
3800 return build_reference_type_for_mode (to_type, ptr_mode);
3801}
3802
12e1243e
AH
3803/* Build a type that is compatible with t but has no cv quals anywhere
3804 in its type, thus
3805
3806 const char *const *const * -> char ***. */
3807
3808tree
3809build_type_no_quals (t)
a01da83b 3810 tree t;
12e1243e
AH
3811{
3812 switch (TREE_CODE (t))
3813 {
3814 case POINTER_TYPE:
3815 return build_pointer_type (build_type_no_quals (TREE_TYPE (t)));
3816 case REFERENCE_TYPE:
3817 return build_reference_type (build_type_no_quals (TREE_TYPE (t)));
3818 default:
3819 return TYPE_MAIN_VARIANT (t);
3820 }
3821}
3822
c6a1db6c
RS
3823/* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
3824 MAXVAL should be the maximum value in the domain
e9a25f70
JL
3825 (one less than the length of the array).
3826
3827 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
3828 We don't enforce this limit, that is up to caller (e.g. language front end).
3829 The limit exists because the result is a signed type and we don't handle
3830 sizes that use more than one HOST_WIDE_INT. */
c6a1db6c
RS
3831
3832tree
3833build_index_type (maxval)
3834 tree maxval;
3835{
b3694847 3836 tree itype = make_node (INTEGER_TYPE);
0fd17968 3837
770ae6cc 3838 TREE_TYPE (itype) = sizetype;
c6a1db6c 3839 TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
967e627a
RH
3840 TYPE_MIN_VALUE (itype) = size_zero_node;
3841 TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
c6a1db6c
RS
3842 TYPE_MODE (itype) = TYPE_MODE (sizetype);
3843 TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
def9b006 3844 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
c6a1db6c 3845 TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
11cf4d18 3846 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
05bccae2 3847
967e627a 3848 if (host_integerp (maxval, 1))
770ae6cc 3849 return type_hash_canon (tree_low_cst (maxval, 1), itype);
c6a1db6c
RS
3850 else
3851 return itype;
3852}
3853
742e43a2 3854/* Create a range of some discrete type TYPE (an INTEGER_TYPE,
238a1856 3855 ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
742e43a2 3856 low bound LOWVAL and high bound HIGHVAL.
0f41302f 3857 if TYPE==NULL_TREE, sizetype is used. */
c6a1db6c
RS
3858
3859tree
742e43a2
PB
3860build_range_type (type, lowval, highval)
3861 tree type, lowval, highval;
c6a1db6c 3862{
b3694847 3863 tree itype = make_node (INTEGER_TYPE);
0fd17968 3864
742e43a2
PB
3865 TREE_TYPE (itype) = type;
3866 if (type == NULL_TREE)
3867 type = sizetype;
0fd17968 3868
742e43a2 3869 TYPE_MIN_VALUE (itype) = convert (type, lowval);
e1ee5cdc 3870 TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
0fd17968
RK
3871
3872 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
742e43a2
PB
3873 TYPE_MODE (itype) = TYPE_MODE (type);
3874 TYPE_SIZE (itype) = TYPE_SIZE (type);
28372f41 3875 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
742e43a2 3876 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
11cf4d18 3877 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
e1ee5cdc 3878
770ae6cc
RK
3879 if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
3880 return type_hash_canon (tree_low_cst (highval, 0)
3881 - tree_low_cst (lowval, 0),
3882 itype);
c6a1db6c
RS
3883 else
3884 return itype;
3885}
3886
742e43a2 3887/* Just like build_index_type, but takes lowval and highval instead
0f41302f 3888 of just highval (maxval). */
742e43a2
PB
3889
3890tree
a01da83b 3891build_index_2_type (lowval, highval)
742e43a2
PB
3892 tree lowval, highval;
3893{
770ae6cc 3894 return build_range_type (sizetype, lowval, highval);
742e43a2
PB
3895}
3896
c6a1db6c
RS
3897/* Construct, lay out and return the type of arrays of elements with ELT_TYPE
3898 and number of elements specified by the range of values of INDEX_TYPE.
3899 If such a type has already been constructed, reuse it. */
3900
3901tree
3902build_array_type (elt_type, index_type)
3903 tree elt_type, index_type;
3904{
b3694847 3905 tree t;
05bccae2 3906 unsigned int hashcode;
c6a1db6c
RS
3907
3908 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
3909 {
3910 error ("arrays of functions are not meaningful");
3911 elt_type = integer_type_node;
3912 }
3913
3914 /* Make sure TYPE_POINTER_TO (elt_type) is filled in. */
3915 build_pointer_type (elt_type);
3916
3917 /* Allocate the array after the pointer type,
3918 in case we free it in type_hash_canon. */
3919 t = make_node (ARRAY_TYPE);
3920 TREE_TYPE (t) = elt_type;
3921 TYPE_DOMAIN (t) = index_type;
3922
3923 if (index_type == 0)
15c76378 3924 {
15c76378
RS
3925 return t;
3926 }
c6a1db6c
RS
3927
3928 hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
3929 t = type_hash_canon (hashcode, t);
3930
d0f062fb 3931 if (!COMPLETE_TYPE_P (t))
c6a1db6c
RS
3932 layout_type (t);
3933 return t;
3934}
3935
a260abc9
DE
3936/* Return the TYPE of the elements comprising
3937 the innermost dimension of ARRAY. */
3938
3939tree
3940get_inner_array_type (array)
a01da83b 3941 tree array;
a260abc9
DE
3942{
3943 tree type = TREE_TYPE (array);
3944
3945 while (TREE_CODE (type) == ARRAY_TYPE)
3946 type = TREE_TYPE (type);
3947
3948 return type;
3949}
3950
c6a1db6c
RS
3951/* Construct, lay out and return
3952 the type of functions returning type VALUE_TYPE
3953 given arguments of types ARG_TYPES.
3954 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
3955 are data type nodes for the arguments of the function.
3956 If such a type has already been constructed, reuse it. */
3957
3958tree
3959build_function_type (value_type, arg_types)
3960 tree value_type, arg_types;
3961{
b3694847 3962 tree t;
05bccae2 3963 unsigned int hashcode;
c6a1db6c 3964
c0560b8b 3965 if (TREE_CODE (value_type) == FUNCTION_TYPE)
c6a1db6c 3966 {
c0560b8b 3967 error ("function return type cannot be function");
c6a1db6c
RS
3968 value_type = integer_type_node;
3969 }
3970
3971 /* Make a node of the sort we want. */
3972 t = make_node (FUNCTION_TYPE);
3973 TREE_TYPE (t) = value_type;
3974 TYPE_ARG_TYPES (t) = arg_types;
3975
3976 /* If we already have such a type, use the old one and free this one. */
3977 hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
3978 t = type_hash_canon (hashcode, t);
3979
d0f062fb 3980 if (!COMPLETE_TYPE_P (t))
c6a1db6c
RS
3981 layout_type (t);
3982 return t;
3983}
3984
97ebc06f
AH
3985/* Build a function type. The RETURN_TYPE is the type retured by the
3986 function. If additional arguments are provided, they are
3987 additional argument types. The list of argument types must always
3988 be terminated by NULL_TREE. */
b4de2f7d
AH
3989
3990tree
e34d07f2 3991build_function_type_list (tree return_type, ...)
b4de2f7d
AH
3992{
3993 tree t, args, last;
e34d07f2 3994 va_list p;
b4de2f7d 3995
e34d07f2 3996 va_start (p, return_type);
b4de2f7d
AH
3997
3998 t = va_arg (p, tree);
3999 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
4000 args = tree_cons (NULL_TREE, t, args);
4001
4002 last = args;
4003 args = nreverse (args);
4004 TREE_CHAIN (last) = void_list_node;
97ebc06f 4005 args = build_function_type (return_type, args);
b4de2f7d 4006
e34d07f2 4007 va_end (p);
b4de2f7d
AH
4008 return args;
4009}
4010
c6a1db6c
RS
4011/* Construct, lay out and return the type of methods belonging to class
4012 BASETYPE and whose arguments and values are described by TYPE.
4013 If that type exists already, reuse it.
4014 TYPE must be a FUNCTION_TYPE node. */
4015
4016tree
4017build_method_type (basetype, type)
4018 tree basetype, type;
4019{
b3694847 4020 tree t;
05bccae2 4021 unsigned int hashcode;
c6a1db6c
RS
4022
4023 /* Make a node of the sort we want. */
4024 t = make_node (METHOD_TYPE);
4025
4026 if (TREE_CODE (type) != FUNCTION_TYPE)
4027 abort ();
4028
4029 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4030 TREE_TYPE (t) = TREE_TYPE (type);
4031
4032 /* The actual arglist for this function includes a "hidden" argument
4033 which is "this". Put it into the list of argument types. */
4034
4035 TYPE_ARG_TYPES (t)
37366632
RK
4036 = tree_cons (NULL_TREE,
4037 build_pointer_type (basetype), TYPE_ARG_TYPES (type));
c6a1db6c
RS
4038
4039 /* If we already have such a type, use the old one and free this one. */
4040 hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4041 t = type_hash_canon (hashcode, t);
4042
d0f062fb 4043 if (!COMPLETE_TYPE_P (t))
c6a1db6c
RS
4044 layout_type (t);
4045
4046 return t;
4047}
4048
86aed40b
RS
4049/* Construct, lay out and return the type of offsets to a value
4050 of type TYPE, within an object of type BASETYPE.
4051 If a suitable offset type exists already, reuse it. */
c6a1db6c
RS
4052
4053tree
4054build_offset_type (basetype, type)
4055 tree basetype, type;
4056{
b3694847 4057 tree t;
05bccae2 4058 unsigned int hashcode;
c6a1db6c
RS
4059
4060 /* Make a node of the sort we want. */
4061 t = make_node (OFFSET_TYPE);
4062
4063 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4064 TREE_TYPE (t) = type;
4065
4066 /* If we already have such a type, use the old one and free this one. */
4067 hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4068 t = type_hash_canon (hashcode, t);
4069
d0f062fb 4070 if (!COMPLETE_TYPE_P (t))
c6a1db6c
RS
4071 layout_type (t);
4072
4073 return t;
4074}
4075
4076/* Create a complex type whose components are COMPONENT_TYPE. */
4077
4078tree
4079build_complex_type (component_type)
4080 tree component_type;
4081{
b3694847 4082 tree t;
05bccae2 4083 unsigned int hashcode;
c6a1db6c
RS
4084
4085 /* Make a node of the sort we want. */
4086 t = make_node (COMPLEX_TYPE);
4087
4088 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
3932261a 4089 set_type_quals (t, TYPE_QUALS (component_type));
c6a1db6c
RS
4090
4091 /* If we already have such a type, use the old one and free this one. */
4092 hashcode = TYPE_HASH (component_type);
4093 t = type_hash_canon (hashcode, t);
4094
d0f062fb 4095 if (!COMPLETE_TYPE_P (t))
c6a1db6c
RS
4096 layout_type (t);
4097
405f63da
MM
4098 /* If we are writing Dwarf2 output we need to create a name,
4099 since complex is a fundamental type. */
7a0c8d71
DR
4100 if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
4101 && ! TYPE_NAME (t))
405f63da 4102 {
ec0ce6e2 4103 const char *name;
405f63da
MM
4104 if (component_type == char_type_node)
4105 name = "complex char";
4106 else if (component_type == signed_char_type_node)
4107 name = "complex signed char";
4108 else if (component_type == unsigned_char_type_node)
4109 name = "complex unsigned char";
4110 else if (component_type == short_integer_type_node)
4111 name = "complex short int";
4112 else if (component_type == short_unsigned_type_node)
4113 name = "complex short unsigned int";
4114 else if (component_type == integer_type_node)
4115 name = "complex int";
4116 else if (component_type == unsigned_type_node)
4117 name = "complex unsigned int";
4118 else if (component_type == long_integer_type_node)
4119 name = "complex long int";
4120 else if (component_type == long_unsigned_type_node)
4121 name = "complex long unsigned int";
4122 else if (component_type == long_long_integer_type_node)
4123 name = "complex long long int";
4124 else if (component_type == long_long_unsigned_type_node)
4125 name = "complex long long unsigned int";
4126 else
d4b60170 4127 name = 0;
405f63da 4128
d4b60170 4129 if (name != 0)
405f63da
MM
4130 TYPE_NAME (t) = get_identifier (name);
4131 }
4132
c6a1db6c
RS
4133 return t;
4134}
4135\f
4136/* Return OP, stripped of any conversions to wider types as much as is safe.
4137 Converting the value back to OP's type makes a value equivalent to OP.
4138
4139 If FOR_TYPE is nonzero, we return a value which, if converted to
4140 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4141
4142 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4143 narrowest type that can hold the value, even if they don't exactly fit.
4144 Otherwise, bit-field references are changed to a narrower type
4145 only if they can be fetched directly from memory in that type.
4146
4147 OP must have integer, real or enumeral type. Pointers are not allowed!
4148
4149 There are some cases where the obvious value we could return
dc478a5d 4150 would regenerate to OP if converted to OP's type,
c6a1db6c
RS
4151 but would not extend like OP to wider types.
4152 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4153 For example, if OP is (unsigned short)(signed char)-1,
4154 we avoid returning (signed char)-1 if FOR_TYPE is int,
4155 even though extending that to an unsigned short would regenerate OP,
4156 since the result of extending (signed char)-1 to (int)
4157 is different from (int) OP. */
4158
4159tree
4160get_unwidened (op, for_type)
b3694847 4161 tree op;
c6a1db6c
RS
4162 tree for_type;
4163{
4164 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
b3694847
SS
4165 tree type = TREE_TYPE (op);
4166 unsigned final_prec
c6a1db6c 4167 = TYPE_PRECISION (for_type != 0 ? for_type : type);
b3694847 4168 int uns
c6a1db6c
RS
4169 = (for_type != 0 && for_type != type
4170 && final_prec > TYPE_PRECISION (type)
4171 && TREE_UNSIGNED (type));
b3694847 4172 tree win = op;
c6a1db6c
RS
4173
4174 while (TREE_CODE (op) == NOP_EXPR)
4175 {
b3694847 4176 int bitschange
c6a1db6c
RS
4177 = TYPE_PRECISION (TREE_TYPE (op))
4178 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4179
4180 /* Truncations are many-one so cannot be removed.
4181 Unless we are later going to truncate down even farther. */
4182 if (bitschange < 0
4183 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4184 break;
4185
4186 /* See what's inside this conversion. If we decide to strip it,
4187 we will set WIN. */
4188 op = TREE_OPERAND (op, 0);
4189
4190 /* If we have not stripped any zero-extensions (uns is 0),
4191 we can strip any kind of extension.
4192 If we have previously stripped a zero-extension,
4193 only zero-extensions can safely be stripped.
4194 Any extension can be stripped if the bits it would produce
4195 are all going to be discarded later by truncating to FOR_TYPE. */
4196
4197 if (bitschange > 0)
4198 {
4199 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4200 win = op;
4201 /* TREE_UNSIGNED says whether this is a zero-extension.
4202 Let's avoid computing it if it does not affect WIN
4203 and if UNS will not be needed again. */
4204 if ((uns || TREE_CODE (op) == NOP_EXPR)
4205 && TREE_UNSIGNED (TREE_TYPE (op)))
4206 {
4207 uns = 1;
4208 win = op;
4209 }
4210 }
4211 }
4212
4213 if (TREE_CODE (op) == COMPONENT_REF
4214 /* Since type_for_size always gives an integer type. */
02a27e82 4215 && TREE_CODE (type) != REAL_TYPE
956d6950 4216 /* Don't crash if field not laid out yet. */
3401c26b
RK
4217 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
4218 && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
c6a1db6c 4219 {
05bccae2 4220 unsigned int innerprec
3401c26b 4221 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
b0c48229
NB
4222 int unsignedp = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4223 type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);
c6a1db6c
RS
4224
4225 /* We can get this structure field in the narrowest type it fits in.
4226 If FOR_TYPE is 0, do this only for a field that matches the
4227 narrower type exactly and is aligned for it
4228 The resulting extension to its nominal type (a fullword type)
4229 must fit the same conditions as for other extensions. */
4230
4231 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4232 && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
b0c48229 4233 && (! uns || final_prec <= innerprec || unsignedp)
c6a1db6c
RS
4234 && type != 0)
4235 {
4236 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4237 TREE_OPERAND (op, 1));
4238 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4239 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
c6a1db6c
RS
4240 }
4241 }
3401c26b 4242
c6a1db6c
RS
4243 return win;
4244}
4245\f
4246/* Return OP or a simpler expression for a narrower value
4247 which can be sign-extended or zero-extended to give back OP.
4248 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4249 or 0 if the value should be sign-extended. */
4250
4251tree
4252get_narrower (op, unsignedp_ptr)
b3694847 4253 tree op;
c6a1db6c
RS
4254 int *unsignedp_ptr;
4255{
b3694847 4256 int uns = 0;
c6a1db6c 4257 int first = 1;
b3694847 4258 tree win = op;
c6a1db6c
RS
4259
4260 while (TREE_CODE (op) == NOP_EXPR)
4261 {
b3694847 4262 int bitschange
d4b60170
RK
4263 = (TYPE_PRECISION (TREE_TYPE (op))
4264 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
c6a1db6c
RS
4265
4266 /* Truncations are many-one so cannot be removed. */
4267 if (bitschange < 0)
4268 break;
4269
4270 /* See what's inside this conversion. If we decide to strip it,
4271 we will set WIN. */
c6a1db6c
RS
4272
4273 if (bitschange > 0)
4274 {
0a71919d 4275 op = TREE_OPERAND (op, 0);
c6a1db6c
RS
4276 /* An extension: the outermost one can be stripped,
4277 but remember whether it is zero or sign extension. */
4278 if (first)
4279 uns = TREE_UNSIGNED (TREE_TYPE (op));
4280 /* Otherwise, if a sign extension has been stripped,
4281 only sign extensions can now be stripped;
4282 if a zero extension has been stripped, only zero-extensions. */
4283 else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4284 break;
4285 first = 0;
4286 }
e02b9957
DE
4287 else /* bitschange == 0 */
4288 {
4289 /* A change in nominal type can always be stripped, but we must
4290 preserve the unsignedness. */
4291 if (first)
4292 uns = TREE_UNSIGNED (TREE_TYPE (op));
4293 first = 0;
0a71919d 4294 op = TREE_OPERAND (op, 0);
e02b9957 4295 }
c6a1db6c
RS
4296
4297 win = op;
4298 }
4299
4300 if (TREE_CODE (op) == COMPONENT_REF
4301 /* Since type_for_size always gives an integer type. */
0fba7208
RK
4302 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
4303 /* Ensure field is laid out already. */
4304 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
c6a1db6c 4305 {
0fba7208
RK
4306 unsigned HOST_WIDE_INT innerprec
4307 = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
b0c48229
NB
4308 tree type = (*lang_hooks.types.type_for_size) (innerprec,
4309 TREE_UNSIGNED (op));
c6a1db6c
RS
4310
4311 /* We can get this structure field in a narrower type that fits it,
4312 but the resulting extension to its nominal type (a fullword type)
4313 must satisfy the same conditions as for other extensions.
4314
4315 Do this only for fields that are aligned (not bit-fields),
4316 because when bit-field insns will be used there is no
4317 advantage in doing this. */
4318
4319 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4320 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4321 && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4322 && type != 0)
4323 {
4324 if (first)
4325 uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4326 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4327 TREE_OPERAND (op, 1));
4328 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4329 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
c6a1db6c
RS
4330 }
4331 }
4332 *unsignedp_ptr = uns;
4333 return win;
4334}
4335\f
c6a1db6c
RS
4336/* Nonzero if integer constant C has a value that is permissible
4337 for type TYPE (an INTEGER_TYPE). */
4338
4339int
4340int_fits_type_p (c, type)
4341 tree c, type;
4342{
4694840a
OH
4343 tree type_low_bound = TYPE_MIN_VALUE (type);
4344 tree type_high_bound = TYPE_MAX_VALUE (type);
4345 int ok_for_low_bound, ok_for_high_bound;
4346
4347 /* Perform some generic filtering first, which may allow making a decision
4348 even if the bounds are not constant. First, negative integers never fit
4349 in unsigned types, */
4350 if ((TREE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
4351 /* Also, unsigned integers with top bit set never fit signed types. */
4352 || (! TREE_UNSIGNED (type)
4353 && TREE_UNSIGNED (TREE_TYPE (c)) && tree_int_cst_msb (c)))
4354 return 0;
4355
4356 /* If at least one bound of the type is a constant integer, we can check
4357 ourselves and maybe make a decision. If no such decision is possible, but
4358 this type is a subtype, try checking against that. Otherwise, use
4359 force_fit_type, which checks against the precision.
4360
4361 Compute the status for each possibly constant bound, and return if we see
4362 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
4363 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
4364 for "constant known to fit". */
4365
4366 ok_for_low_bound = -1;
4367 ok_for_high_bound = -1;
4368
4369 /* Check if C >= type_low_bound. */
4370 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
3401c26b 4371 {
4694840a
OH
4372 ok_for_low_bound = ! tree_int_cst_lt (c, type_low_bound);
4373 if (! ok_for_low_bound)
4374 return 0;
3401c26b 4375 }
4694840a
OH
4376
4377 /* Check if c <= type_high_bound. */
4378 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
4379 {
4380 ok_for_high_bound = ! tree_int_cst_lt (type_high_bound, c);
4381 if (! ok_for_high_bound)
4382 return 0;
4383 }
4384
4385 /* If the constant fits both bounds, the result is known. */
4386 if (ok_for_low_bound == 1 && ok_for_high_bound == 1)
4387 return 1;
4388
4389 /* If we haven't been able to decide at this point, there nothing more we
4390 can check ourselves here. Look at the base type if we have one. */
a8765ae7
RK
4391 else if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0)
4392 return int_fits_type_p (c, TREE_TYPE (type));
4694840a
OH
4393
4394 /* Or to force_fit_type, if nothing else. */
c6a1db6c 4395 else
3401c26b
RK
4396 {
4397 c = copy_node (c);
4398 TREE_TYPE (c) = type;
4399 return !force_fit_type (c, 0);
4400 }
c6a1db6c
RS
4401}
4402
8bcefb43
ZW
4403/* Returns true if T is, contains, or refers to a type with variable
4404 size. This concept is more general than that of C99 'variably
4405 modified types': in C99, a struct type is never variably modified
4406 because a VLA may not appear as a structure member. However, in
4407 GNU C code like:
4408
4409 struct S { int i[f()]; };
4410
4411 is valid, and other languages may define similar constructs. */
4412
4413bool
4414variably_modified_type_p (type)
4415 tree type;
4416{
c246c65d
JM
4417 if (type == error_mark_node)
4418 return false;
4419
8bcefb43
ZW
4420 /* If TYPE itself has variable size, it is variably modified.
4421
4422 We do not yet have a representation of the C99 '[*]' syntax.
4423 When a representation is chosen, this function should be modified
4424 to test for that case as well. */
4425 if (TYPE_SIZE (type)
4426 && TYPE_SIZE (type) != error_mark_node
4427 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4428 return true;
4429
4430 /* If TYPE is a pointer or reference, it is variably modified if
4431 the type pointed to is variably modified. */
4432 if ((TREE_CODE (type) == POINTER_TYPE
4433 || TREE_CODE (type) == REFERENCE_TYPE)
4434 && variably_modified_type_p (TREE_TYPE (type)))
4435 return true;
4436
4437 /* If TYPE is an array, it is variably modified if the array
4438 elements are. (Note that the VLA case has already been checked
4439 above.) */
4440 if (TREE_CODE (type) == ARRAY_TYPE
4441 && variably_modified_type_p (TREE_TYPE (type)))
4442 return true;
4443
4444 /* If TYPE is a function type, it is variably modified if any of the
4445 parameters or the return type are variably modified. */
4446 if (TREE_CODE (type) == FUNCTION_TYPE
4447 || TREE_CODE (type) == METHOD_TYPE)
4448 {
4449 tree parm;
4450
4451 if (variably_modified_type_p (TREE_TYPE (type)))
4452 return true;
4453 for (parm = TYPE_ARG_TYPES (type);
4454 parm && parm != void_list_node;
4455 parm = TREE_CHAIN (parm))
4456 if (variably_modified_type_p (TREE_VALUE (parm)))
4457 return true;
4458 }
4459
4460 /* The current language may have other cases to check, but in general,
4461 all other types are not variably modified. */
4462 return (*lang_hooks.tree_inlining.var_mod_type_p) (type);
4463}
4464
140b60b4 4465/* Given a DECL or TYPE, return the scope in which it was declared, or
77a02dba 4466 NULL_TREE if there is no containing scope. */
140b60b4
MM
4467
4468tree
4469get_containing_scope (t)
4470 tree t;
4471{
4472 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
4473}
4474
bfa30b22 4475/* Return the innermost context enclosing DECL that is
c6a1db6c
RS
4476 a FUNCTION_DECL, or zero if none. */
4477
4478tree
bfa30b22
RK
4479decl_function_context (decl)
4480 tree decl;
c6a1db6c
RS
4481{
4482 tree context;
4483
bfa30b22 4484 if (TREE_CODE (decl) == ERROR_MARK)
c6a1db6c
RS
4485 return 0;
4486
bfa30b22
RK
4487 if (TREE_CODE (decl) == SAVE_EXPR)
4488 context = SAVE_EXPR_CONTEXT (decl);
77a02dba 4489
6ff7fb95
JM
4490 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
4491 where we look up the function at runtime. Such functions always take
4492 a first argument of type 'pointer to real context'.
4493
4494 C++ should really be fixed to use DECL_CONTEXT for the real context,
4495 and use something else for the "virtual context". */
4496 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
77a02dba
RK
4497 context
4498 = TYPE_MAIN_VARIANT
4499 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
c6a1db6c 4500 else
bfa30b22 4501 context = DECL_CONTEXT (decl);
c6a1db6c
RS
4502
4503 while (context && TREE_CODE (context) != FUNCTION_DECL)
4504 {
140b60b4 4505 if (TREE_CODE (context) == BLOCK)
c6a1db6c 4506 context = BLOCK_SUPERCONTEXT (context);
dc478a5d 4507 else
140b60b4 4508 context = get_containing_scope (context);
c6a1db6c
RS
4509 }
4510
4511 return context;
4512}
4513
bfa30b22 4514/* Return the innermost context enclosing DECL that is
c0560b8b 4515 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
c6a1db6c
RS
4516 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
4517
4518tree
bfa30b22
RK
4519decl_type_context (decl)
4520 tree decl;
c6a1db6c 4521{
bfa30b22 4522 tree context = DECL_CONTEXT (decl);
c6a1db6c
RS
4523
4524 while (context)
4525 {
7efda054 4526 if (TREE_CODE (context) == NAMESPACE_DECL)
41077ce4 4527 return NULL_TREE;
7efda054 4528
c6a1db6c 4529 if (TREE_CODE (context) == RECORD_TYPE
c0560b8b
RK
4530 || TREE_CODE (context) == UNION_TYPE
4531 || TREE_CODE (context) == QUAL_UNION_TYPE)
c6a1db6c 4532 return context;
d4b60170 4533
c6a1db6c
RS
4534 if (TREE_CODE (context) == TYPE_DECL
4535 || TREE_CODE (context) == FUNCTION_DECL)
4536 context = DECL_CONTEXT (context);
d4b60170 4537
c6a1db6c
RS
4538 else if (TREE_CODE (context) == BLOCK)
4539 context = BLOCK_SUPERCONTEXT (context);
d4b60170 4540
c6a1db6c
RS
4541 else
4542 /* Unhandled CONTEXT!? */
4543 abort ();
4544 }
4545 return NULL_TREE;
4546}
4547
582db8e4 4548/* CALL is a CALL_EXPR. Return the declaration for the function
dc478a5d 4549 called, or NULL_TREE if the called function cannot be
582db8e4
MM
4550 determined. */
4551
4552tree
4553get_callee_fndecl (call)
4554 tree call;
4555{
4556 tree addr;
4557
4558 /* It's invalid to call this function with anything but a
4559 CALL_EXPR. */
4560 if (TREE_CODE (call) != CALL_EXPR)
4561 abort ();
4562
4563 /* The first operand to the CALL is the address of the function
4564 called. */
4565 addr = TREE_OPERAND (call, 0);
4566
c083cf9a
JM
4567 STRIP_NOPS (addr);
4568
4569 /* If this is a readonly function pointer, extract its initial value. */
4570 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
4571 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
4572 && DECL_INITIAL (addr))
4573 addr = DECL_INITIAL (addr);
4574
582db8e4
MM
4575 /* If the address is just `&f' for some function `f', then we know
4576 that `f' is being called. */
4577 if (TREE_CODE (addr) == ADDR_EXPR
4578 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
a1a0fd4e 4579 return TREE_OPERAND (addr, 0);
582db8e4
MM
4580
4581 /* We couldn't figure out what was being called. */
4582 return NULL_TREE;
4583}
4584
d1485032
JM
4585/* Print debugging information about tree nodes generated during the compile,
4586 and any language-specific information. */
4587
c6a1db6c
RS
4588void
4589dump_tree_statistics ()
4590{
5e9defae 4591#ifdef GATHER_STATISTICS
c6a1db6c
RS
4592 int i;
4593 int total_nodes, total_bytes;
5e9defae 4594#endif
c6a1db6c
RS
4595
4596 fprintf (stderr, "\n??? tree nodes created\n\n");
4597#ifdef GATHER_STATISTICS
4598 fprintf (stderr, "Kind Nodes Bytes\n");
4599 fprintf (stderr, "-------------------------------------\n");
4600 total_nodes = total_bytes = 0;
4601 for (i = 0; i < (int) all_kinds; i++)
4602 {
4603 fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
4604 tree_node_counts[i], tree_node_sizes[i]);
4605 total_nodes += tree_node_counts[i];
4606 total_bytes += tree_node_sizes[i];
4607 }
c6a1db6c
RS
4608 fprintf (stderr, "-------------------------------------\n");
4609 fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
4610 fprintf (stderr, "-------------------------------------\n");
4611#else
4612 fprintf (stderr, "(No per-node statistics)\n");
4613#endif
d88f311b 4614 print_type_hash_statistics ();
5d69f816 4615 (*lang_hooks.print_statistics) ();
c6a1db6c 4616}
bb288278 4617\f
2ce3c6c6 4618#define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
bb288278 4619
a37db56b
GK
4620const char *flag_random_seed;
4621
4622/* Set up a default flag_random_seed value, if there wasn't one already. */
4623
4624void
4625default_flag_random_seed (void)
4626{
4627 unsigned HOST_WIDE_INT value;
4628 char *new_random_seed;
4629
4630 if (flag_random_seed != NULL)
4631 return;
4632
4633 /* Get some more or less random data. */
4634#ifdef HAVE_GETTIMEOFDAY
4635 {
4636 struct timeval tv;
4637
4638 gettimeofday (&tv, NULL);
4639 value = (((unsigned HOST_WIDE_INT) tv.tv_usec << 16)
4640 ^ tv.tv_sec ^ getpid ());
4641 }
4642#else
4643 value = getpid ();
4644#endif
4645
4646 /* This slightly overestimates the space required. */
4647 new_random_seed = xmalloc (HOST_BITS_PER_WIDE_INT / 3 + 2);
4648 sprintf (new_random_seed, HOST_WIDE_INT_PRINT_UNSIGNED, value);
4649 flag_random_seed = new_random_seed;
4650}
4651
e2c31432
JM
4652/* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
4653 clashes in cases where we can't reliably choose a unique name.
4654
4655 Derived from mkstemp.c in libiberty. */
4656
4657static void
4658append_random_chars (template)
4659 char *template;
4660{
4661 static const char letters[]
4662 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
e2c31432 4663 unsigned HOST_WIDE_INT v;
a37db56b 4664 size_t i;
e2c31432 4665
a37db56b 4666 default_flag_random_seed ();
e2c31432 4667
a37db56b
GK
4668 /* This isn't a very good hash, but it does guarantee no collisions
4669 when the random string is generated by the code above and the time
4670 delta is small. */
4671 v = 0;
4672 for (i = 0; i < strlen (flag_random_seed); i++)
4673 v = (v << 4) ^ (v >> (HOST_BITS_PER_WIDE_INT - 4)) ^ flag_random_seed[i];
13d7d58b
JW
4674
4675 template += strlen (template);
e2c31432 4676
e2c31432
JM
4677 /* Fill in the random bits. */
4678 template[0] = letters[v % 62];
4679 v /= 62;
4680 template[1] = letters[v % 62];
4681 v /= 62;
4682 template[2] = letters[v % 62];
4683 v /= 62;
4684 template[3] = letters[v % 62];
4685 v /= 62;
4686 template[4] = letters[v % 62];
4687 v /= 62;
4688 template[5] = letters[v % 62];
4689
4690 template[6] = '\0';
4691}
4692
881c6935
JM
4693/* P is a string that will be used in a symbol. Mask out any characters
4694 that are not valid in that context. */
4695
4696void
4697clean_symbol_name (p)
4698 char *p;
4699{
4700 for (; *p; p++)
0df6c2c7 4701 if (! (ISALNUM (*p)
881c6935
JM
4702#ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
4703 || *p == '$'
4704#endif
4705#ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
4706 || *p == '.'
4707#endif
0df6c2c7 4708 ))
881c6935
JM
4709 *p = '_';
4710}
3b03c671 4711
e2c31432
JM
4712/* Generate a name for a function unique to this translation unit.
4713 TYPE is some string to identify the purpose of this function to the
4714 linker or collect2. */
bb288278
PB
4715
4716tree
2ce3c6c6 4717get_file_function_name_long (type)
37b37199 4718 const char *type;
bb288278
PB
4719{
4720 char *buf;
3b304f5b
ZW
4721 const char *p;
4722 char *q;
bb288278
PB
4723
4724 if (first_global_object_name)
4725 p = first_global_object_name;
bb288278 4726 else
e2c31432
JM
4727 {
4728 /* We don't have anything that we know to be unique to this translation
4729 unit, so use what we do have and throw in some randomness. */
4730
37b37199
KG
4731 const char *name = weak_global_object_name;
4732 const char *file = main_input_filename;
e2c31432
JM
4733
4734 if (! name)
4735 name = "";
4736 if (! file)
4737 file = input_filename;
4738
3b304f5b 4739 q = (char *) alloca (7 + strlen (name) + strlen (file));
e2c31432 4740
3b304f5b
ZW
4741 sprintf (q, "%s%s", name, file);
4742 append_random_chars (q);
4743 p = q;
e2c31432 4744 }
bb288278 4745
2ce3c6c6
JM
4746 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
4747 + strlen (type));
bb288278 4748
dc478a5d 4749 /* Set up the name of the file-level functions we may need.
d4b60170 4750 Use a global object (which is already required to be unique over
bb288278 4751 the program) rather than the file name (which imposes extra
d4b60170 4752 constraints). */
2ce3c6c6 4753 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
bb288278 4754
9faa82d8 4755 /* Don't need to pull weird characters out of global names. */
bb288278 4756 if (p != first_global_object_name)
881c6935 4757 clean_symbol_name (buf + 11);
bb288278 4758
bb288278
PB
4759 return get_identifier (buf);
4760}
2ce3c6c6
JM
4761
4762/* If KIND=='I', return a suitable global initializer (constructor) name.
4763 If KIND=='D', return a suitable global clean-up (destructor) name. */
4764
4765tree
4766get_file_function_name (kind)
4767 int kind;
4768{
4769 char p[2];
d4b60170 4770
2ce3c6c6
JM
4771 p[0] = kind;
4772 p[1] = 0;
4773
4774 return get_file_function_name_long (p);
4775}
bca949e2 4776\f
9faa82d8 4777/* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
bca949e2
PB
4778 The result is placed in BUFFER (which has length BIT_SIZE),
4779 with one bit in each char ('\000' or '\001').
4780
4781 If the constructor is constant, NULL_TREE is returned.
0f41302f 4782 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
bca949e2
PB
4783
4784tree
4785get_set_constructor_bits (init, buffer, bit_size)
4786 tree init;
4787 char *buffer;
4788 int bit_size;
4789{
4790 int i;
4791 tree vals;
4792 HOST_WIDE_INT domain_min
5538d8a0 4793 = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))), 0);
bca949e2 4794 tree non_const_bits = NULL_TREE;
5538d8a0 4795
bca949e2
PB
4796 for (i = 0; i < bit_size; i++)
4797 buffer[i] = 0;
4798
dc478a5d 4799 for (vals = TREE_OPERAND (init, 1);
bca949e2
PB
4800 vals != NULL_TREE; vals = TREE_CHAIN (vals))
4801 {
5538d8a0 4802 if (!host_integerp (TREE_VALUE (vals), 0)
bca949e2 4803 || (TREE_PURPOSE (vals) != NULL_TREE
5538d8a0 4804 && !host_integerp (TREE_PURPOSE (vals), 0)))
db3cf6fb
MS
4805 non_const_bits
4806 = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
bca949e2
PB
4807 else if (TREE_PURPOSE (vals) != NULL_TREE)
4808 {
0f41302f 4809 /* Set a range of bits to ones. */
bca949e2 4810 HOST_WIDE_INT lo_index
5538d8a0 4811 = tree_low_cst (TREE_PURPOSE (vals), 0) - domain_min;
bca949e2 4812 HOST_WIDE_INT hi_index
5538d8a0 4813 = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
05bccae2 4814
bca949e2 4815 if (lo_index < 0 || lo_index >= bit_size
dc478a5d 4816 || hi_index < 0 || hi_index >= bit_size)
bca949e2 4817 abort ();
dc478a5d 4818 for (; lo_index <= hi_index; lo_index++)
bca949e2
PB
4819 buffer[lo_index] = 1;
4820 }
4821 else
4822 {
0f41302f 4823 /* Set a single bit to one. */
bca949e2 4824 HOST_WIDE_INT index
5538d8a0 4825 = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
bca949e2
PB
4826 if (index < 0 || index >= bit_size)
4827 {
4828 error ("invalid initializer for bit string");
4829 return NULL_TREE;
4830 }
4831 buffer[index] = 1;
4832 }
4833 }
4834 return non_const_bits;
4835}
4836
9faa82d8 4837/* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
f3ffec8e 4838 The result is placed in BUFFER (which is an array of bytes).
bca949e2 4839 If the constructor is constant, NULL_TREE is returned.
0f41302f 4840 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
bca949e2
PB
4841
4842tree
f3ffec8e 4843get_set_constructor_bytes (init, buffer, wd_size)
bca949e2 4844 tree init;
f3ffec8e 4845 unsigned char *buffer;
bca949e2
PB
4846 int wd_size;
4847{
4848 int i;
f3ffec8e 4849 int set_word_size = BITS_PER_UNIT;
bca949e2
PB
4850 int bit_size = wd_size * set_word_size;
4851 int bit_pos = 0;
f3ffec8e 4852 unsigned char *bytep = buffer;
dc478a5d 4853 char *bit_buffer = (char *) alloca (bit_size);
bca949e2
PB
4854 tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
4855
4856 for (i = 0; i < wd_size; i++)
4857 buffer[i] = 0;
4858
4859 for (i = 0; i < bit_size; i++)
4860 {
4861 if (bit_buffer[i])
4862 {
8a0e8d4d 4863 if (BYTES_BIG_ENDIAN)
f3ffec8e 4864 *bytep |= (1 << (set_word_size - 1 - bit_pos));
f76b9db2 4865 else
f3ffec8e 4866 *bytep |= 1 << bit_pos;
bca949e2
PB
4867 }
4868 bit_pos++;
4869 if (bit_pos >= set_word_size)
f3ffec8e 4870 bit_pos = 0, bytep++;
bca949e2
PB
4871 }
4872 return non_const_bits;
4873}
9ec36da5 4874\f
f4524c9e 4875#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
8f985ec4 4876/* Complain that the tree code of NODE does not match the expected CODE.
987009bf 4877 FILE, LINE, and FUNCTION are of the caller. */
dc478a5d 4878
8f985ec4
ZW
4879void
4880tree_check_failed (node, code, file, line, function)
4881 const tree node;
12b195d9 4882 enum tree_code code;
37b37199 4883 const char *file;
12b195d9 4884 int line;
8f985ec4 4885 const char *function;
12b195d9 4886{
1f978f5f 4887 internal_error ("tree check: expected %s, have %s in %s, at %s:%d",
fce687f8
RK
4888 tree_code_name[code], tree_code_name[TREE_CODE (node)],
4889 function, trim_filename (file), line);
12b195d9
ML
4890}
4891
9ec36da5
JL
4892/* Similar to above, except that we check for a class of tree
4893 code, given in CL. */
dc478a5d 4894
8f985ec4
ZW
4895void
4896tree_class_check_failed (node, cl, file, line, function)
4897 const tree node;
f8a83ee3 4898 int cl;
37b37199 4899 const char *file;
12b195d9 4900 int line;
8f985ec4 4901 const char *function;
12b195d9 4902{
fce687f8 4903 internal_error
1f978f5f 4904 ("tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d",
fce687f8
RK
4905 cl, TREE_CODE_CLASS (TREE_CODE (node)),
4906 tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
8f985ec4
ZW
4907}
4908
fa7b533b
ZW
4909/* Similar to above, except that the check is for the bounds of a TREE_VEC's
4910 (dynamically sized) vector. */
4911
4912void
4913tree_vec_elt_check_failed (idx, len, file, line, function)
4914 int idx;
4915 int len;
4916 const char *file;
4917 int line;
4918 const char *function;
4919{
4920 internal_error
4921 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
4922 idx + 1, len, function, trim_filename (file), line);
4923}
4924
06790e5f
ZW
4925/* Similar to above, except that the check is for the bounds of the operand
4926 vector of an expression node. */
4927
4928void
4929tree_operand_check_failed (idx, code, file, line, function)
4930 int idx;
4931 enum tree_code code;
4932 const char *file;
4933 int line;
4934 const char *function;
4935{
4936 internal_error
4937 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
4938 idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
4939 function, trim_filename (file), line);
4940}
f4524c9e 4941#endif /* ENABLE_TREE_CHECKING */
81b3411c 4942\f
4061f623 4943/* For a new vector type node T, build the information necessary for
27d30956 4944 debugging output. */
dc478a5d 4945
4061f623
BS
4946static void
4947finish_vector_type (t)
4948 tree t;
4949{
4950 layout_type (t);
4951
4952 {
4953 tree index = build_int_2 (TYPE_VECTOR_SUBPARTS (t) - 1, 0);
4954 tree array = build_array_type (TREE_TYPE (t),
4955 build_index_type (index));
4956 tree rt = make_node (RECORD_TYPE);
4957
4958 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
4959 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
4960 layout_type (rt);
4961 TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
4962 /* In dwarfout.c, type lookup uses TYPE_UID numbers. We want to output
4963 the representation type, and we want to find that die when looking up
4964 the vector type. This is most easily achieved by making the TYPE_UID
4965 numbers equal. */
4966 TYPE_UID (rt) = TYPE_UID (t);
4967 }
4968}
4969
81b3411c
BS
4970/* Create nodes for all integer types (and error_mark_node) using the sizes
4971 of C datatypes. The caller should call set_sizetype soon after calling
4972 this function to select one of the types as sizetype. */
dc478a5d 4973
81b3411c
BS
4974void
4975build_common_tree_nodes (signed_char)
4976 int signed_char;
4977{
4978 error_mark_node = make_node (ERROR_MARK);
4979 TREE_TYPE (error_mark_node) = error_mark_node;
4980
fed3cef0
RK
4981 initialize_sizetypes ();
4982
81b3411c
BS
4983 /* Define both `signed char' and `unsigned char'. */
4984 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
4985 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
4986
4987 /* Define `char', which is like either `signed char' or `unsigned char'
4988 but not the same as either. */
4989 char_type_node
4990 = (signed_char
4991 ? make_signed_type (CHAR_TYPE_SIZE)
4992 : make_unsigned_type (CHAR_TYPE_SIZE));
4993
4994 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
4995 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
4996 integer_type_node = make_signed_type (INT_TYPE_SIZE);
81b3411c
BS
4997 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
4998 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
4999 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5000 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5001 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5002
5003 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5004 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5005 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5006 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5007 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5008
5009 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5010 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5011 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5012 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5013 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5014}
5015
81b3411c 5016/* Call this function after calling build_common_tree_nodes and set_sizetype.
fed3cef0 5017 It will create several other common tree nodes. */
d4b60170 5018
81b3411c
BS
5019void
5020build_common_tree_nodes_2 (short_double)
5021 int short_double;
5022{
05bccae2 5023 /* Define these next since types below may used them. */
81b3411c 5024 integer_zero_node = build_int_2 (0, 0);
81b3411c 5025 integer_one_node = build_int_2 (1, 0);
f2d1f0ba 5026 integer_minus_one_node = build_int_2 (-1, -1);
81b3411c 5027
770ae6cc
RK
5028 size_zero_node = size_int (0);
5029 size_one_node = size_int (1);
5030 bitsize_zero_node = bitsize_int (0);
5031 bitsize_one_node = bitsize_int (1);
5032 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
81b3411c
BS
5033
5034 void_type_node = make_node (VOID_TYPE);
05bccae2 5035 layout_type (void_type_node);
d4b60170 5036
81b3411c
BS
5037 /* We are not going to have real types in C with less than byte alignment,
5038 so we might as well not have any types that claim to have it. */
5039 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
11cf4d18 5040 TYPE_USER_ALIGN (void_type_node) = 0;
81b3411c
BS
5041
5042 null_pointer_node = build_int_2 (0, 0);
5043 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5044 layout_type (TREE_TYPE (null_pointer_node));
5045
5046 ptr_type_node = build_pointer_type (void_type_node);
5047 const_ptr_type_node
5048 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5049
5050 float_type_node = make_node (REAL_TYPE);
5051 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5052 layout_type (float_type_node);
5053
5054 double_type_node = make_node (REAL_TYPE);
5055 if (short_double)
5056 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5057 else
5058 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5059 layout_type (double_type_node);
5060
5061 long_double_type_node = make_node (REAL_TYPE);
5062 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5063 layout_type (long_double_type_node);
5064
5065 complex_integer_type_node = make_node (COMPLEX_TYPE);
5066 TREE_TYPE (complex_integer_type_node) = integer_type_node;
5067 layout_type (complex_integer_type_node);
5068
5069 complex_float_type_node = make_node (COMPLEX_TYPE);
5070 TREE_TYPE (complex_float_type_node) = float_type_node;
5071 layout_type (complex_float_type_node);
5072
5073 complex_double_type_node = make_node (COMPLEX_TYPE);
5074 TREE_TYPE (complex_double_type_node) = double_type_node;
5075 layout_type (complex_double_type_node);
5076
5077 complex_long_double_type_node = make_node (COMPLEX_TYPE);
5078 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5079 layout_type (complex_long_double_type_node);
5080
2df88e9f
JO
5081 {
5082 tree t;
5083 BUILD_VA_LIST_TYPE (t);
066c84df
AO
5084
5085 /* Many back-ends define record types without seting TYPE_NAME.
5086 If we copied the record type here, we'd keep the original
5087 record type without a name. This breaks name mangling. So,
5088 don't copy record types and let c_common_nodes_and_builtins()
5089 declare the type to be __builtin_va_list. */
5090 if (TREE_CODE (t) != RECORD_TYPE)
5091 t = build_type_copy (t);
5092
5093 va_list_type_node = t;
2df88e9f 5094 }
4061f623 5095
0afeef64
AH
5096 unsigned_V4SI_type_node
5097 = make_vector (V4SImode, unsigned_intSI_type_node, 1);
7457a126
R
5098 unsigned_V2HI_type_node
5099 = make_vector (V2HImode, unsigned_intHI_type_node, 1);
0afeef64
AH
5100 unsigned_V2SI_type_node
5101 = make_vector (V2SImode, unsigned_intSI_type_node, 1);
fbe5eb6d
BS
5102 unsigned_V2DI_type_node
5103 = make_vector (V2DImode, unsigned_intDI_type_node, 1);
0afeef64
AH
5104 unsigned_V4HI_type_node
5105 = make_vector (V4HImode, unsigned_intHI_type_node, 1);
5106 unsigned_V8QI_type_node
5107 = make_vector (V8QImode, unsigned_intQI_type_node, 1);
5108 unsigned_V8HI_type_node
5109 = make_vector (V8HImode, unsigned_intHI_type_node, 1);
5110 unsigned_V16QI_type_node
5111 = make_vector (V16QImode, unsigned_intQI_type_node, 1);
256e9fd2
NC
5112 unsigned_V1DI_type_node
5113 = make_vector (V1DImode, unsigned_intDI_type_node, 1);
0afeef64 5114
fa5322fa 5115 V16SF_type_node = make_vector (V16SFmode, float_type_node, 0);
0afeef64
AH
5116 V4SF_type_node = make_vector (V4SFmode, float_type_node, 0);
5117 V4SI_type_node = make_vector (V4SImode, intSI_type_node, 0);
7457a126 5118 V2HI_type_node = make_vector (V2HImode, intHI_type_node, 0);
0afeef64 5119 V2SI_type_node = make_vector (V2SImode, intSI_type_node, 0);
fbe5eb6d 5120 V2DI_type_node = make_vector (V2DImode, intDI_type_node, 0);
0afeef64
AH
5121 V4HI_type_node = make_vector (V4HImode, intHI_type_node, 0);
5122 V8QI_type_node = make_vector (V8QImode, intQI_type_node, 0);
5123 V8HI_type_node = make_vector (V8HImode, intHI_type_node, 0);
5124 V2SF_type_node = make_vector (V2SFmode, float_type_node, 0);
fbe5eb6d 5125 V2DF_type_node = make_vector (V2DFmode, double_type_node, 0);
0afeef64 5126 V16QI_type_node = make_vector (V16QImode, intQI_type_node, 0);
256e9fd2 5127 V1DI_type_node = make_vector (V1DImode, intDI_type_node, 0);
0afeef64
AH
5128}
5129
5130/* Returns a vector tree node given a vector mode, the inner type, and
5131 the signness. */
5132
5133static tree
5134make_vector (mode, innertype, unsignedp)
5135 enum machine_mode mode;
5136 tree innertype;
5137 int unsignedp;
5138{
5139 tree t;
5140
5141 t = make_node (VECTOR_TYPE);
5142 TREE_TYPE (t) = innertype;
5143 TYPE_MODE (t) = mode;
5144 TREE_UNSIGNED (TREE_TYPE (t)) = unsignedp;
5145 finish_vector_type (t);
5146
5147 return t;
81b3411c 5148}
27b41650
KG
5149
5150/* Given an initializer INIT, return TRUE if INIT is zero or some
5151 aggregate of zeros. Otherwise return FALSE. */
5152
5153bool
5154initializer_zerop (init)
5155 tree init;
5156{
5157 STRIP_NOPS (init);
5158
5159 switch (TREE_CODE (init))
5160 {
5161 case INTEGER_CST:
5162 return integer_zerop (init);
5163 case REAL_CST:
5164 return real_zerop (init)
5165 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
5166 case COMPLEX_CST:
5167 return integer_zerop (init)
5168 || (real_zerop (init)
5169 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
5170 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
5171 case CONSTRUCTOR:
5172 {
5173 if (AGGREGATE_TYPE_P (TREE_TYPE (init)))
3b03c671 5174 {
d78e771d 5175 tree aggr_init = CONSTRUCTOR_ELTS (init);
3b03c671
KH
5176
5177 while (aggr_init)
5178 {
5179 if (! initializer_zerop (TREE_VALUE (aggr_init)))
5180 return false;
5181 aggr_init = TREE_CHAIN (aggr_init);
5182 }
5183 return true;
5184 }
27b41650
KG
5185 return false;
5186 }
5187 default:
5188 return false;
5189 }
5190}
e2500fed
GK
5191
5192#include "gt-tree.h"
This page took 2.99891 seconds and 5 git commands to generate.