OSDN Git Service

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