OSDN Git Service

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