OSDN Git Service

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