OSDN Git Service

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