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