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