OSDN Git Service

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