OSDN Git Service

* boehm.cc: Don't include boehm-config.h.
[pf3gnuchains/gcc-fork.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 88, 92-98, 1999 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA.  */
20
21
22 /* This file contains the low level primitives for operating on tree nodes,
23    including allocation, list operations, interning of identifiers,
24    construction of data type nodes and statement nodes,
25    and construction of type conversion nodes.  It also contains
26    tables index by tree code that describe how to take apart
27    nodes of that code.
28
29    It is intended to be language-independent, but occasionally
30    calls language-dependent routines defined (for C) in typecheck.c.
31
32    The low-level allocation routines oballoc and permalloc
33    are used also for allocating many other kinds of objects
34    by all passes of the compiler.  */
35
36 #include "config.h"
37 #include "system.h"
38 #include "flags.h"
39 #include "tree.h"
40 #include "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_SUBBLOCKS (block) = subblocks;
3303   BLOCK_SUPERCONTEXT (block) = supercontext;
3304   BLOCK_CHAIN (block) = chain;
3305   return block;
3306 }
3307
3308 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
3309    location where an expression or an identifier were encountered. It
3310    is necessary for languages where the frontend parser will handle
3311    recursively more than one file (Java is one of them).  */
3312
3313 tree
3314 build_expr_wfl (node, file, line, col)
3315      tree node;
3316      const char *file;
3317      int line, col;
3318 {
3319   static const char *last_file = 0;
3320   static tree  last_filenode = NULL_TREE;
3321   register tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
3322
3323   EXPR_WFL_NODE (wfl) = node;
3324   EXPR_WFL_SET_LINECOL (wfl, line, col);
3325   if (file != last_file)
3326     {
3327       last_file = file;
3328       last_filenode = file ? get_identifier (file) : NULL_TREE;
3329     }
3330   EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
3331   if (node)
3332     {
3333       TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
3334       TREE_TYPE (wfl) = TREE_TYPE (node);
3335     }
3336   return wfl;
3337 }
3338 \f
3339 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
3340    is ATTRIBUTE.  */
3341
3342 tree
3343 build_decl_attribute_variant (ddecl, attribute)
3344      tree ddecl, attribute;
3345 {
3346   DECL_MACHINE_ATTRIBUTES (ddecl) = attribute;
3347   return ddecl;
3348 }
3349
3350 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3351    is ATTRIBUTE.
3352
3353    Record such modified types already made so we don't make duplicates.  */
3354
3355 tree
3356 build_type_attribute_variant (ttype, attribute)
3357      tree ttype, attribute;
3358 {
3359   if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3360     {
3361       register int hashcode;
3362       tree ntype;
3363
3364       push_obstacks (TYPE_OBSTACK (ttype), TYPE_OBSTACK (ttype));
3365       ntype = copy_node (ttype);
3366
3367       TYPE_POINTER_TO (ntype) = 0;
3368       TYPE_REFERENCE_TO (ntype) = 0;
3369       TYPE_ATTRIBUTES (ntype) = attribute;
3370
3371       /* Create a new main variant of TYPE.  */
3372       TYPE_MAIN_VARIANT (ntype) = ntype;
3373       TYPE_NEXT_VARIANT (ntype) = 0;
3374       set_type_quals (ntype, TYPE_UNQUALIFIED);
3375
3376       hashcode = TYPE_HASH (TREE_CODE (ntype))
3377                  + TYPE_HASH (TREE_TYPE (ntype))
3378                  + attribute_hash_list (attribute);
3379
3380       switch (TREE_CODE (ntype))
3381         {
3382         case FUNCTION_TYPE:
3383           hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
3384           break;
3385         case ARRAY_TYPE:
3386           hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
3387           break;
3388         case INTEGER_TYPE:
3389           hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
3390           break;
3391         case REAL_TYPE:
3392           hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
3393           break;
3394         default:
3395           break;
3396         }
3397
3398       ntype = type_hash_canon (hashcode, ntype);
3399       ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3400       pop_obstacks ();
3401     }
3402
3403   return ttype;
3404 }
3405
3406 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
3407    or type TYPE and 0 otherwise.  Validity is determined the configuration
3408    macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE.  */
3409
3410 int
3411 valid_machine_attribute (attr_name, attr_args, decl, type)
3412   tree attr_name;
3413   tree attr_args ATTRIBUTE_UNUSED;
3414   tree decl ATTRIBUTE_UNUSED;
3415   tree type ATTRIBUTE_UNUSED;
3416 {
3417   int validated = 0;
3418 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3419   tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0;
3420 #endif
3421 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3422   tree type_attr_list = TYPE_ATTRIBUTES (type);
3423 #endif
3424
3425   if (TREE_CODE (attr_name) != IDENTIFIER_NODE)
3426     abort ();
3427
3428 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3429   if (decl != 0
3430       && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name, attr_args))
3431     {
3432       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3433                                     decl_attr_list);
3434
3435       if (attr != NULL_TREE)
3436         {
3437           /* Override existing arguments.  Declarations are unique so we can
3438              modify this in place.  */
3439           TREE_VALUE (attr) = attr_args;
3440         }
3441       else
3442         {
3443           decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list);
3444           decl = build_decl_attribute_variant (decl, decl_attr_list);
3445         }
3446
3447       validated = 1;
3448     }
3449 #endif
3450
3451 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3452   if (validated)
3453     /* Don't apply the attribute to both the decl and the type.  */;
3454   else if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name,
3455                                          attr_args))
3456     {
3457       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3458                                     type_attr_list);
3459
3460       if (attr != NULL_TREE)
3461         {
3462           /* Override existing arguments.
3463              ??? This currently works since attribute arguments are not
3464              included in `attribute_hash_list'.  Something more complicated
3465              may be needed in the future.  */
3466           TREE_VALUE (attr) = attr_args;
3467         }
3468       else
3469         {
3470           /* If this is part of a declaration, create a type variant,
3471              otherwise, this is part of a type definition, so add it 
3472              to the base type.  */
3473           type_attr_list = tree_cons (attr_name, attr_args, type_attr_list);
3474           if (decl != 0)
3475             type = build_type_attribute_variant (type, type_attr_list);
3476           else
3477             TYPE_ATTRIBUTES (type) = type_attr_list;
3478         }
3479       if (decl != 0)
3480         TREE_TYPE (decl) = type;
3481       validated = 1;
3482     }
3483
3484   /* Handle putting a type attribute on pointer-to-function-type by putting
3485      the attribute on the function type.  */
3486   else if (POINTER_TYPE_P (type)
3487            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3488            && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
3489                                             attr_name, attr_args))
3490     {
3491       tree inner_type = TREE_TYPE (type);
3492       tree inner_attr_list = TYPE_ATTRIBUTES (inner_type);
3493       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3494                                     type_attr_list);
3495
3496       if (attr != NULL_TREE)
3497         TREE_VALUE (attr) = attr_args;
3498       else
3499         {
3500           inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list);
3501           inner_type = build_type_attribute_variant (inner_type,
3502                                                      inner_attr_list);
3503         }
3504
3505       if (decl != 0)
3506         TREE_TYPE (decl) = build_pointer_type (inner_type);
3507       else
3508         {
3509           /* Clear TYPE_POINTER_TO for the old inner type, since
3510              `type' won't be pointing to it anymore.  */
3511           TYPE_POINTER_TO (TREE_TYPE (type)) = NULL_TREE;
3512           TREE_TYPE (type) = inner_type;
3513         }
3514
3515       validated = 1;
3516     }
3517 #endif
3518
3519   return validated;
3520 }
3521
3522 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3523    or zero if not.
3524
3525    We try both `text' and `__text__', ATTR may be either one.  */
3526 /* ??? It might be a reasonable simplification to require ATTR to be only
3527    `text'.  One might then also require attribute lists to be stored in
3528    their canonicalized form.  */
3529
3530 int
3531 is_attribute_p (attr, ident)
3532      const char *attr;
3533      tree ident;
3534 {
3535   int ident_len, attr_len;
3536   char *p;
3537
3538   if (TREE_CODE (ident) != IDENTIFIER_NODE)
3539     return 0;
3540
3541   if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3542     return 1;
3543
3544   p = IDENTIFIER_POINTER (ident);
3545   ident_len = strlen (p);
3546   attr_len = strlen (attr);
3547
3548   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3549   if (attr[0] == '_')
3550     {
3551       if (attr[1] != '_'
3552           || attr[attr_len - 2] != '_'
3553           || attr[attr_len - 1] != '_')
3554         abort ();
3555       if (ident_len == attr_len - 4
3556           && strncmp (attr + 2, p, attr_len - 4) == 0)
3557         return 1;
3558     }
3559   else
3560     {
3561       if (ident_len == attr_len + 4
3562           && p[0] == '_' && p[1] == '_'
3563           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3564           && strncmp (attr, p + 2, attr_len) == 0)
3565         return 1;
3566     }
3567
3568   return 0;
3569 }
3570
3571 /* Given an attribute name and a list of attributes, return a pointer to the
3572    attribute's list element if the attribute is part of the list, or NULL_TREE
3573    if not found.  */
3574
3575 tree
3576 lookup_attribute (attr_name, list)
3577      const char *attr_name;
3578      tree list;
3579 {
3580   tree l;
3581
3582   for (l = list; l; l = TREE_CHAIN (l))
3583     {
3584       if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
3585         abort ();
3586       if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3587         return l;
3588     }
3589
3590   return NULL_TREE;
3591 }
3592
3593 /* Return an attribute list that is the union of a1 and a2.  */
3594
3595 tree
3596 merge_attributes (a1, a2)
3597      register tree a1, a2;
3598 {
3599   tree attributes;
3600
3601   /* Either one unset?  Take the set one.  */
3602
3603   if (! (attributes = a1))
3604     attributes = a2;
3605
3606   /* One that completely contains the other?  Take it.  */
3607
3608   else if (a2 && ! attribute_list_contained (a1, a2))
3609   {
3610     if (attribute_list_contained (a2, a1))
3611       attributes = a2;
3612     else
3613       {
3614         /* Pick the longest list, and hang on the other list.  */
3615         /* ??? For the moment we punt on the issue of attrs with args.  */
3616
3617         if (list_length (a1) < list_length (a2))
3618           attributes = a2, a2 = a1;
3619
3620         for (; a2; a2 = TREE_CHAIN (a2))
3621           if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3622                                 attributes) == NULL_TREE)
3623             {
3624               a1 = copy_node (a2);
3625               TREE_CHAIN (a1) = attributes;
3626               attributes = a1;
3627             }
3628       }
3629   }
3630   return attributes;
3631 }
3632
3633 /* Given types T1 and T2, merge their attributes and return
3634    the result.  */
3635
3636 tree
3637 merge_machine_type_attributes (t1, t2)
3638      tree t1, t2;
3639 {
3640 #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES
3641   return MERGE_MACHINE_TYPE_ATTRIBUTES (t1, t2);
3642 #else
3643   return merge_attributes (TYPE_ATTRIBUTES (t1),
3644                            TYPE_ATTRIBUTES (t2));
3645 #endif
3646 }
3647
3648 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3649    the result.  */
3650
3651 tree
3652 merge_machine_decl_attributes (olddecl, newdecl)
3653      tree olddecl, newdecl;
3654 {
3655 #ifdef MERGE_MACHINE_DECL_ATTRIBUTES
3656   return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl, newdecl);
3657 #else
3658   return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl),
3659                            DECL_MACHINE_ATTRIBUTES (newdecl));
3660 #endif
3661 }
3662 \f
3663 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3664    of the various TYPE_QUAL values.  */
3665
3666 static void
3667 set_type_quals (type, type_quals)
3668      tree type;
3669      int  type_quals;
3670 {
3671   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3672   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3673   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3674 }
3675
3676 /* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
3677    the same kind of data as TYPE describes.  Variants point to the
3678    "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
3679    and it points to a chain of other variants so that duplicate
3680    variants are never made.  Only main variants should ever appear as
3681    types of expressions.  */
3682
3683 tree
3684 build_qualified_type (type, type_quals)
3685      tree type;
3686      int type_quals;
3687 {
3688   register tree t;
3689   
3690   /* Search the chain of variants to see if there is already one there just
3691      like the one we need to have.  If so, use that existing one.  We must
3692      preserve the TYPE_NAME, since there is code that depends on this.  */
3693
3694   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3695     if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type))
3696       return t;
3697
3698   /* We need a new one.  */
3699   t = build_type_copy (type);
3700   set_type_quals (t, type_quals);
3701   return t;
3702 }
3703
3704 /* Create a new variant of TYPE, equivalent but distinct.
3705    This is so the caller can modify it.  */
3706
3707 tree
3708 build_type_copy (type)
3709      tree type;
3710 {
3711   register tree t, m = TYPE_MAIN_VARIANT (type);
3712   register struct obstack *ambient_obstack = current_obstack;
3713
3714   current_obstack = TYPE_OBSTACK (type);
3715   t = copy_node (type);
3716   current_obstack = ambient_obstack;
3717
3718   TYPE_POINTER_TO (t) = 0;
3719   TYPE_REFERENCE_TO (t) = 0;
3720
3721   /* Add this type to the chain of variants of TYPE.  */
3722   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3723   TYPE_NEXT_VARIANT (m) = t;
3724
3725   return t;
3726 }
3727 \f
3728 /* Hashing of types so that we don't make duplicates.
3729    The entry point is `type_hash_canon'.  */
3730
3731 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3732    with types in the TREE_VALUE slots), by adding the hash codes
3733    of the individual types.  */
3734
3735 int
3736 type_hash_list (list)
3737      tree list;
3738 {
3739   register int hashcode;
3740   register tree tail;
3741   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3742     hashcode += TYPE_HASH (TREE_VALUE (tail));
3743   return hashcode;
3744 }
3745
3746 /* Look in the type hash table for a type isomorphic to TYPE.
3747    If one is found, return it.  Otherwise return 0.  */
3748
3749 tree
3750 type_hash_lookup (hashcode, type)
3751      int hashcode;
3752      tree type;
3753 {
3754   register struct type_hash *h;
3755
3756   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3757      must call that routine before comparing TYPE_ALIGNs. */
3758   layout_type (type);
3759
3760   for (h = type_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
3761     if (h->hashcode == hashcode
3762         && TREE_CODE (h->type) == TREE_CODE (type)
3763         && TREE_TYPE (h->type) == TREE_TYPE (type)
3764         && attribute_list_equal (TYPE_ATTRIBUTES (h->type),
3765                                    TYPE_ATTRIBUTES (type))
3766         && TYPE_ALIGN (h->type) == TYPE_ALIGN (type)
3767         && (TYPE_MAX_VALUE (h->type) == TYPE_MAX_VALUE (type)
3768             || tree_int_cst_equal (TYPE_MAX_VALUE (h->type),
3769                                    TYPE_MAX_VALUE (type)))
3770         && (TYPE_MIN_VALUE (h->type) == TYPE_MIN_VALUE (type)
3771             || tree_int_cst_equal (TYPE_MIN_VALUE (h->type),
3772                                    TYPE_MIN_VALUE (type)))
3773         /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE.  */
3774         && (TYPE_DOMAIN (h->type) == TYPE_DOMAIN (type)
3775             || (TYPE_DOMAIN (h->type)
3776                 && TREE_CODE (TYPE_DOMAIN (h->type)) == TREE_LIST
3777                 && TYPE_DOMAIN (type)
3778                 && TREE_CODE (TYPE_DOMAIN (type)) == TREE_LIST
3779                 && type_list_equal (TYPE_DOMAIN (h->type),
3780                                     TYPE_DOMAIN (type)))))
3781       return h->type;
3782   return 0;
3783 }
3784
3785 /* Add an entry to the type-hash-table
3786    for a type TYPE whose hash code is HASHCODE.  */
3787
3788 void
3789 type_hash_add (hashcode, type)
3790      int hashcode;
3791      tree type;
3792 {
3793   register struct type_hash *h;
3794
3795   h = (struct type_hash *) permalloc (sizeof (struct type_hash));
3796   h->hashcode = hashcode;
3797   h->type = type;
3798   h->next = type_hash_table[hashcode % TYPE_HASH_SIZE];
3799   type_hash_table[hashcode % TYPE_HASH_SIZE] = h;
3800 }
3801
3802 /* Given TYPE, and HASHCODE its hash code, return the canonical
3803    object for an identical type if one already exists.
3804    Otherwise, return TYPE, and record it as the canonical object
3805    if it is a permanent object.
3806
3807    To use this function, first create a type of the sort you want.
3808    Then compute its hash code from the fields of the type that
3809    make it different from other similar types.
3810    Then call this function and use the value.
3811    This function frees the type you pass in if it is a duplicate.  */
3812
3813 /* Set to 1 to debug without canonicalization.  Never set by program.  */
3814 int debug_no_type_hash = 0;
3815
3816 tree
3817 type_hash_canon (hashcode, type)
3818      int hashcode;
3819      tree type;
3820 {
3821   tree t1;
3822
3823   if (debug_no_type_hash)
3824     return type;
3825
3826   t1 = type_hash_lookup (hashcode, type);
3827   if (t1 != 0)
3828     {
3829       if (!ggc_p)
3830         obstack_free (TYPE_OBSTACK (type), type);
3831 #ifdef GATHER_STATISTICS
3832       tree_node_counts[(int)t_kind]--;
3833       tree_node_sizes[(int)t_kind] -= sizeof (struct tree_type);
3834 #endif
3835       return t1;
3836     }
3837
3838   /* If this is a permanent type, record it for later reuse.  */
3839   if (ggc_p || TREE_PERMANENT (type))
3840     type_hash_add (hashcode, type);
3841
3842   return type;
3843 }
3844
3845 /* Mark ARG (which is really a struct type_hash **) for GC.  */
3846
3847 static void
3848 mark_type_hash (arg)
3849      void *arg;
3850 {
3851   struct type_hash *t = *(struct type_hash **) arg;
3852
3853   while (t)
3854     {
3855       ggc_mark_tree (t->type);
3856       t = t->next;
3857     }
3858 }
3859
3860 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3861    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3862    by adding the hash codes of the individual attributes.  */
3863
3864 int
3865 attribute_hash_list (list)
3866      tree list;
3867 {
3868   register int hashcode;
3869   register tree tail;
3870   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3871     /* ??? Do we want to add in TREE_VALUE too? */
3872     hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3873   return hashcode;
3874 }
3875
3876 /* Given two lists of attributes, return true if list l2 is
3877    equivalent to l1.  */
3878
3879 int
3880 attribute_list_equal (l1, l2)
3881      tree l1, l2;
3882 {
3883    return attribute_list_contained (l1, l2)
3884           && attribute_list_contained (l2, l1);
3885 }
3886
3887 /* Given two lists of attributes, return true if list L2 is
3888    completely contained within L1.  */
3889 /* ??? This would be faster if attribute names were stored in a canonicalized
3890    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3891    must be used to show these elements are equivalent (which they are).  */
3892 /* ??? It's not clear that attributes with arguments will always be handled
3893    correctly.  */
3894
3895 int
3896 attribute_list_contained (l1, l2)
3897      tree l1, l2;
3898 {
3899   register tree t1, t2;
3900
3901   /* First check the obvious, maybe the lists are identical.  */
3902   if (l1 == l2)
3903      return 1;
3904
3905   /* Maybe the lists are similar.  */
3906   for (t1 = l1, t2 = l2;
3907        t1 && t2
3908         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3909         && TREE_VALUE (t1) == TREE_VALUE (t2);
3910        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3911
3912   /* Maybe the lists are equal.  */
3913   if (t1 == 0 && t2 == 0)
3914      return 1;
3915
3916   for (; t2; t2 = TREE_CHAIN (t2))
3917     {
3918       tree attr
3919         = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3920
3921       if (attr == NULL_TREE)
3922         return 0;
3923       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3924         return 0;
3925     }
3926
3927   return 1;
3928 }
3929
3930 /* Given two lists of types
3931    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3932    return 1 if the lists contain the same types in the same order.
3933    Also, the TREE_PURPOSEs must match.  */
3934
3935 int
3936 type_list_equal (l1, l2)
3937      tree l1, l2;
3938 {
3939   register tree t1, t2;
3940
3941   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3942     if (TREE_VALUE (t1) != TREE_VALUE (t2)
3943         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3944             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3945                   && (TREE_TYPE (TREE_PURPOSE (t1))
3946                       == TREE_TYPE (TREE_PURPOSE (t2))))))
3947       return 0;
3948
3949   return t1 == t2;
3950 }
3951
3952 /* Nonzero if integer constants T1 and T2
3953    represent the same constant value.  */
3954
3955 int
3956 tree_int_cst_equal (t1, t2)
3957      tree t1, t2;
3958 {
3959   if (t1 == t2)
3960     return 1;
3961   if (t1 == 0 || t2 == 0)
3962     return 0;
3963   if (TREE_CODE (t1) == INTEGER_CST
3964       && TREE_CODE (t2) == INTEGER_CST
3965       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3966       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3967     return 1;
3968   return 0;
3969 }
3970
3971 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3972    The precise way of comparison depends on their data type.  */
3973
3974 int
3975 tree_int_cst_lt (t1, t2)
3976      tree t1, t2;
3977 {
3978   if (t1 == t2)
3979     return 0;
3980
3981   if (!TREE_UNSIGNED (TREE_TYPE (t1)))
3982     return INT_CST_LT (t1, t2);
3983   return INT_CST_LT_UNSIGNED (t1, t2);
3984 }
3985
3986 /* Return an indication of the sign of the integer constant T.
3987    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3988    Note that -1 will never be returned it T's type is unsigned.  */
3989
3990 int
3991 tree_int_cst_sgn (t)
3992      tree t;
3993 {
3994   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3995     return 0;
3996   else if (TREE_UNSIGNED (TREE_TYPE (t)))
3997     return 1;
3998   else if (TREE_INT_CST_HIGH (t) < 0)
3999     return -1;
4000   else
4001     return 1;
4002 }
4003
4004 /* Compare two constructor-element-type constants.  Return 1 if the lists
4005    are known to be equal; otherwise return 0.  */
4006
4007 int
4008 simple_cst_list_equal (l1, l2)
4009      tree l1, l2;
4010 {
4011   while (l1 != NULL_TREE && l2 != NULL_TREE)
4012     {
4013       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4014         return 0;
4015
4016       l1 = TREE_CHAIN (l1);
4017       l2 = TREE_CHAIN (l2);
4018     }
4019
4020   return (l1 == l2);
4021 }
4022
4023 /* Return truthvalue of whether T1 is the same tree structure as T2.
4024    Return 1 if they are the same.
4025    Return 0 if they are understandably different.
4026    Return -1 if either contains tree structure not understood by
4027    this function.  */
4028
4029 int
4030 simple_cst_equal (t1, t2)
4031      tree t1, t2;
4032 {
4033   register enum tree_code code1, code2;
4034   int cmp;
4035
4036   if (t1 == t2)
4037     return 1;
4038   if (t1 == 0 || t2 == 0)
4039     return 0;
4040
4041   code1 = TREE_CODE (t1);
4042   code2 = TREE_CODE (t2);
4043
4044   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4045     {
4046       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4047           || code2 == NON_LVALUE_EXPR)
4048         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4049       else
4050         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4051     }
4052   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4053            || code2 == NON_LVALUE_EXPR)
4054     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4055
4056   if (code1 != code2)
4057     return 0;
4058
4059   switch (code1)
4060     {
4061     case INTEGER_CST:
4062       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4063         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
4064
4065     case REAL_CST:
4066       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4067
4068     case STRING_CST:
4069       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4070         && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4071                   TREE_STRING_LENGTH (t1));
4072
4073     case CONSTRUCTOR:
4074       if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
4075         return 1;
4076       else
4077         abort ();
4078
4079     case SAVE_EXPR:
4080       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4081
4082     case CALL_EXPR:
4083       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4084       if (cmp <= 0)
4085         return cmp;
4086       return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4087
4088     case TARGET_EXPR:
4089       /* Special case: if either target is an unallocated VAR_DECL,
4090          it means that it's going to be unified with whatever the
4091          TARGET_EXPR is really supposed to initialize, so treat it
4092          as being equivalent to anything.  */
4093       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4094            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4095            && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
4096           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4097               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4098               && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
4099         cmp = 1;
4100       else
4101         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4102       if (cmp <= 0)
4103         return cmp;
4104       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4105
4106     case WITH_CLEANUP_EXPR:
4107       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4108       if (cmp <= 0)
4109         return cmp;
4110       return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
4111
4112     case COMPONENT_REF:
4113       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4114         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4115       return 0;
4116
4117     case VAR_DECL:
4118     case PARM_DECL:
4119     case CONST_DECL:
4120     case FUNCTION_DECL:
4121       return 0;
4122       
4123     default:
4124       break;
4125     }
4126
4127   /* This general rule works for most tree codes.  All exceptions should be
4128      handled above.  If this is a language-specific tree code, we can't
4129      trust what might be in the operand, so say we don't know
4130      the situation.  */
4131   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4132     return -1;
4133
4134   switch (TREE_CODE_CLASS (code1))
4135     {
4136       int i;
4137     case '1':
4138     case '2':
4139     case '<':
4140     case 'e':
4141     case 'r':
4142     case 's':
4143       cmp = 1;
4144       for (i=0; i<tree_code_length[(int) code1]; ++i)
4145         {
4146           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4147           if (cmp <= 0)
4148             return cmp;
4149         }
4150       return cmp;
4151
4152     default:
4153       return -1;
4154     }
4155 }
4156 \f
4157 /* Constructors for pointer, array and function types.
4158    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4159    constructed by language-dependent code, not here.)  */
4160
4161 /* Construct, lay out and return the type of pointers to TO_TYPE.
4162    If such a type has already been constructed, reuse it.  */
4163
4164 tree
4165 build_pointer_type (to_type)
4166      tree to_type;
4167 {
4168   register tree t = TYPE_POINTER_TO (to_type);
4169
4170   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4171
4172   if (t)
4173     return t;
4174
4175   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4176   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4177   t = make_node (POINTER_TYPE);
4178   pop_obstacks ();
4179
4180   TREE_TYPE (t) = to_type;
4181
4182   /* Record this type as the pointer to TO_TYPE.  */
4183   TYPE_POINTER_TO (to_type) = t;
4184
4185   /* Lay out the type.  This function has many callers that are concerned
4186      with expression-construction, and this simplifies them all.
4187      Also, it guarantees the TYPE_SIZE is in the same obstack as the type.  */
4188   layout_type (t);
4189
4190   return t;
4191 }
4192
4193 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4194    MAXVAL should be the maximum value in the domain
4195    (one less than the length of the array).
4196
4197    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4198    We don't enforce this limit, that is up to caller (e.g. language front end).
4199    The limit exists because the result is a signed type and we don't handle
4200    sizes that use more than one HOST_WIDE_INT.  */
4201
4202 tree
4203 build_index_type (maxval)
4204      tree maxval;
4205 {
4206   register tree itype = make_node (INTEGER_TYPE);
4207
4208   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4209   TYPE_MIN_VALUE (itype) = size_zero_node;
4210
4211   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4212   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
4213   pop_obstacks ();
4214
4215   TYPE_MODE (itype) = TYPE_MODE (sizetype);
4216   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4217   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4218   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4219   if (TREE_CODE (maxval) == INTEGER_CST)
4220     {
4221       int maxint = (int) TREE_INT_CST_LOW (maxval);
4222       /* If the domain should be empty, make sure the maxval
4223          remains -1 and is not spoiled by truncation.  */
4224       if (INT_CST_LT (maxval, integer_zero_node))
4225         {
4226           TYPE_MAX_VALUE (itype) = build_int_2 (-1, -1);
4227           TREE_TYPE (TYPE_MAX_VALUE (itype)) = sizetype;
4228         }
4229       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4230     }
4231   else
4232     return itype;
4233 }
4234
4235 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4236    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4237    low bound LOWVAL and high bound HIGHVAL.
4238    if TYPE==NULL_TREE, sizetype is used.  */
4239
4240 tree
4241 build_range_type (type, lowval, highval)
4242      tree type, lowval, highval;
4243 {
4244   register tree itype = make_node (INTEGER_TYPE);
4245
4246   TREE_TYPE (itype) = type;
4247   if (type == NULL_TREE)
4248     type = sizetype;
4249
4250   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4251   TYPE_MIN_VALUE (itype) = convert (type, lowval);
4252   TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4253   pop_obstacks ();
4254
4255   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4256   TYPE_MODE (itype) = TYPE_MODE (type);
4257   TYPE_SIZE (itype) = TYPE_SIZE (type);
4258   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4259   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4260   if (TREE_CODE (lowval) == INTEGER_CST)
4261     {
4262       HOST_WIDE_INT lowint, highint;
4263       int maxint;
4264
4265       lowint = TREE_INT_CST_LOW (lowval);
4266       if (highval && TREE_CODE (highval) == INTEGER_CST)
4267         highint = TREE_INT_CST_LOW (highval);
4268       else
4269         highint = (~(unsigned HOST_WIDE_INT)0) >> 1;
4270
4271       maxint = (int) (highint - lowint);
4272       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4273     }
4274   else
4275     return itype;
4276 }
4277
4278 /* Just like build_index_type, but takes lowval and highval instead
4279    of just highval (maxval).  */
4280
4281 tree
4282 build_index_2_type (lowval,highval)
4283      tree lowval, highval;
4284 {
4285   return build_range_type (NULL_TREE, lowval, highval);
4286 }
4287
4288 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
4289    Needed because when index types are not hashed, equal index types
4290    built at different times appear distinct, even though structurally,
4291    they are not.  */
4292
4293 int
4294 index_type_equal (itype1, itype2)
4295      tree itype1, itype2;
4296 {
4297   if (TREE_CODE (itype1) != TREE_CODE (itype2))
4298     return 0;
4299   if (TREE_CODE (itype1) == INTEGER_TYPE)
4300     {
4301       if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
4302           || TYPE_MODE (itype1) != TYPE_MODE (itype2)
4303           || simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2)) != 1
4304           || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
4305         return 0;
4306       if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1),
4307                                  TYPE_MIN_VALUE (itype2))
4308           && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1),
4309                                     TYPE_MAX_VALUE (itype2)))
4310         return 1;
4311     }
4312
4313   return 0;
4314 }
4315
4316 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4317    and number of elements specified by the range of values of INDEX_TYPE.
4318    If such a type has already been constructed, reuse it.  */
4319
4320 tree
4321 build_array_type (elt_type, index_type)
4322      tree elt_type, index_type;
4323 {
4324   register tree t;
4325   int hashcode;
4326
4327   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4328     {
4329       error ("arrays of functions are not meaningful");
4330       elt_type = integer_type_node;
4331     }
4332
4333   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
4334   build_pointer_type (elt_type);
4335
4336   /* Allocate the array after the pointer type,
4337      in case we free it in type_hash_canon.  */
4338   t = make_node (ARRAY_TYPE);
4339   TREE_TYPE (t) = elt_type;
4340   TYPE_DOMAIN (t) = index_type;
4341
4342   if (index_type == 0)
4343     {
4344       return t;
4345     }
4346
4347   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
4348   t = type_hash_canon (hashcode, t);
4349
4350   if (TYPE_SIZE (t) == 0)
4351     layout_type (t);
4352   return t;
4353 }
4354
4355 /* Return the TYPE of the elements comprising
4356    the innermost dimension of ARRAY.  */
4357
4358 tree
4359 get_inner_array_type (array)
4360     tree array;
4361 {
4362   tree type = TREE_TYPE (array);
4363
4364   while (TREE_CODE (type) == ARRAY_TYPE)
4365     type = TREE_TYPE (type);
4366
4367   return type;
4368 }
4369
4370 /* Construct, lay out and return
4371    the type of functions returning type VALUE_TYPE
4372    given arguments of types ARG_TYPES.
4373    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4374    are data type nodes for the arguments of the function.
4375    If such a type has already been constructed, reuse it.  */
4376
4377 tree
4378 build_function_type (value_type, arg_types)
4379      tree value_type, arg_types;
4380 {
4381   register tree t;
4382   int hashcode;
4383
4384   if (TREE_CODE (value_type) == FUNCTION_TYPE)
4385     {
4386       error ("function return type cannot be function");
4387       value_type = integer_type_node;
4388     }
4389
4390   /* Make a node of the sort we want.  */
4391   t = make_node (FUNCTION_TYPE);
4392   TREE_TYPE (t) = value_type;
4393   TYPE_ARG_TYPES (t) = arg_types;
4394
4395   /* If we already have such a type, use the old one and free this one.  */
4396   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
4397   t = type_hash_canon (hashcode, t);
4398
4399   if (TYPE_SIZE (t) == 0)
4400     layout_type (t);
4401   return t;
4402 }
4403
4404 /* Build the node for the type of references-to-TO_TYPE.  */
4405
4406 tree
4407 build_reference_type (to_type)
4408      tree to_type;
4409 {
4410   register tree t = TYPE_REFERENCE_TO (to_type);
4411
4412   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4413
4414   if (t)
4415     return t;
4416
4417   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4418   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4419   t = make_node (REFERENCE_TYPE);
4420   pop_obstacks ();
4421
4422   TREE_TYPE (t) = to_type;
4423
4424   /* Record this type as the pointer to TO_TYPE.  */
4425   TYPE_REFERENCE_TO (to_type) = t;
4426
4427   layout_type (t);
4428
4429   return t;
4430 }
4431
4432 /* Construct, lay out and return the type of methods belonging to class
4433    BASETYPE and whose arguments and values are described by TYPE.
4434    If that type exists already, reuse it.
4435    TYPE must be a FUNCTION_TYPE node.  */
4436
4437 tree
4438 build_method_type (basetype, type)
4439      tree basetype, type;
4440 {
4441   register tree t;
4442   int hashcode;
4443
4444   /* Make a node of the sort we want.  */
4445   t = make_node (METHOD_TYPE);
4446
4447   if (TREE_CODE (type) != FUNCTION_TYPE)
4448     abort ();
4449
4450   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4451   TREE_TYPE (t) = TREE_TYPE (type);
4452
4453   /* The actual arglist for this function includes a "hidden" argument
4454      which is "this".  Put it into the list of argument types.  */
4455
4456   TYPE_ARG_TYPES (t)
4457     = tree_cons (NULL_TREE,
4458                  build_pointer_type (basetype), TYPE_ARG_TYPES (type));
4459
4460   /* If we already have such a type, use the old one and free this one.  */
4461   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4462   t = type_hash_canon (hashcode, t);
4463
4464   if (TYPE_SIZE (t) == 0)
4465     layout_type (t);
4466
4467   return t;
4468 }
4469
4470 /* Construct, lay out and return the type of offsets to a value
4471    of type TYPE, within an object of type BASETYPE.
4472    If a suitable offset type exists already, reuse it.  */
4473
4474 tree
4475 build_offset_type (basetype, type)
4476      tree basetype, type;
4477 {
4478   register tree t;
4479   int hashcode;
4480
4481   /* Make a node of the sort we want.  */
4482   t = make_node (OFFSET_TYPE);
4483
4484   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4485   TREE_TYPE (t) = type;
4486
4487   /* If we already have such a type, use the old one and free this one.  */
4488   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4489   t = type_hash_canon (hashcode, t);
4490
4491   if (TYPE_SIZE (t) == 0)
4492     layout_type (t);
4493
4494   return t;
4495 }
4496
4497 /* Create a complex type whose components are COMPONENT_TYPE.  */
4498
4499 tree
4500 build_complex_type (component_type)
4501      tree component_type;
4502 {
4503   register tree t;
4504   int hashcode;
4505
4506   /* Make a node of the sort we want.  */
4507   t = make_node (COMPLEX_TYPE);
4508
4509   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4510   set_type_quals (t, TYPE_QUALS (component_type));
4511
4512   /* If we already have such a type, use the old one and free this one.  */
4513   hashcode = TYPE_HASH (component_type);
4514   t = type_hash_canon (hashcode, t);
4515
4516   if (TYPE_SIZE (t) == 0)
4517     layout_type (t);
4518
4519   /* If we are writing Dwarf2 output we need to create a name,
4520      since complex is a fundamental type.  */
4521   if (write_symbols == DWARF2_DEBUG && ! TYPE_NAME (t))
4522     {
4523       const char *name;
4524       if (component_type == char_type_node)
4525         name = "complex char";
4526       else if (component_type == signed_char_type_node)
4527         name = "complex signed char";
4528       else if (component_type == unsigned_char_type_node)
4529         name = "complex unsigned char";
4530       else if (component_type == short_integer_type_node)
4531         name = "complex short int";
4532       else if (component_type == short_unsigned_type_node)
4533         name = "complex short unsigned int";
4534       else if (component_type == integer_type_node)
4535         name = "complex int";
4536       else if (component_type == unsigned_type_node)
4537         name = "complex unsigned int";
4538       else if (component_type == long_integer_type_node)
4539         name = "complex long int";
4540       else if (component_type == long_unsigned_type_node)
4541         name = "complex long unsigned int";
4542       else if (component_type == long_long_integer_type_node)
4543         name = "complex long long int";
4544       else if (component_type == long_long_unsigned_type_node)
4545         name = "complex long long unsigned int";
4546       else
4547         name = (char *)0;
4548
4549       if (name)
4550         TYPE_NAME (t) = get_identifier (name);
4551     }
4552
4553   return t;
4554 }
4555 \f
4556 /* Return OP, stripped of any conversions to wider types as much as is safe.
4557    Converting the value back to OP's type makes a value equivalent to OP.
4558
4559    If FOR_TYPE is nonzero, we return a value which, if converted to
4560    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4561
4562    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4563    narrowest type that can hold the value, even if they don't exactly fit.
4564    Otherwise, bit-field references are changed to a narrower type
4565    only if they can be fetched directly from memory in that type.
4566
4567    OP must have integer, real or enumeral type.  Pointers are not allowed!
4568
4569    There are some cases where the obvious value we could return
4570    would regenerate to OP if converted to OP's type, 
4571    but would not extend like OP to wider types.
4572    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4573    For example, if OP is (unsigned short)(signed char)-1,
4574    we avoid returning (signed char)-1 if FOR_TYPE is int,
4575    even though extending that to an unsigned short would regenerate OP,
4576    since the result of extending (signed char)-1 to (int)
4577    is different from (int) OP.  */
4578
4579 tree
4580 get_unwidened (op, for_type)
4581      register tree op;
4582      tree for_type;
4583 {
4584   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4585   register tree type = TREE_TYPE (op);
4586   register unsigned final_prec
4587     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4588   register int uns
4589     = (for_type != 0 && for_type != type
4590        && final_prec > TYPE_PRECISION (type)
4591        && TREE_UNSIGNED (type));
4592   register tree win = op;
4593
4594   while (TREE_CODE (op) == NOP_EXPR)
4595     {
4596       register int bitschange
4597         = TYPE_PRECISION (TREE_TYPE (op))
4598           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4599
4600       /* Truncations are many-one so cannot be removed.
4601          Unless we are later going to truncate down even farther.  */
4602       if (bitschange < 0
4603           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4604         break;
4605
4606       /* See what's inside this conversion.  If we decide to strip it,
4607          we will set WIN.  */
4608       op = TREE_OPERAND (op, 0);
4609
4610       /* If we have not stripped any zero-extensions (uns is 0),
4611          we can strip any kind of extension.
4612          If we have previously stripped a zero-extension,
4613          only zero-extensions can safely be stripped.
4614          Any extension can be stripped if the bits it would produce
4615          are all going to be discarded later by truncating to FOR_TYPE.  */
4616
4617       if (bitschange > 0)
4618         {
4619           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4620             win = op;
4621           /* TREE_UNSIGNED says whether this is a zero-extension.
4622              Let's avoid computing it if it does not affect WIN
4623              and if UNS will not be needed again.  */
4624           if ((uns || TREE_CODE (op) == NOP_EXPR)
4625               && TREE_UNSIGNED (TREE_TYPE (op)))
4626             {
4627               uns = 1;
4628               win = op;
4629             }
4630         }
4631     }
4632
4633   if (TREE_CODE (op) == COMPONENT_REF
4634       /* Since type_for_size always gives an integer type.  */
4635       && TREE_CODE (type) != REAL_TYPE
4636       /* Don't crash if field not laid out yet.  */
4637       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4638     {
4639       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4640       type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
4641
4642       /* We can get this structure field in the narrowest type it fits in.
4643          If FOR_TYPE is 0, do this only for a field that matches the
4644          narrower type exactly and is aligned for it
4645          The resulting extension to its nominal type (a fullword type)
4646          must fit the same conditions as for other extensions.  */
4647
4648       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4649           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4650           && (! uns || final_prec <= innerprec
4651               || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4652           && type != 0)
4653         {
4654           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4655                        TREE_OPERAND (op, 1));
4656           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4657           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4658           TREE_RAISES (win) = TREE_RAISES (op);
4659         }
4660     }
4661   return win;
4662 }
4663 \f
4664 /* Return OP or a simpler expression for a narrower value
4665    which can be sign-extended or zero-extended to give back OP.
4666    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4667    or 0 if the value should be sign-extended.  */
4668
4669 tree
4670 get_narrower (op, unsignedp_ptr)
4671      register tree op;
4672      int *unsignedp_ptr;
4673 {
4674   register int uns = 0;
4675   int first = 1;
4676   register tree win = op;
4677
4678   while (TREE_CODE (op) == NOP_EXPR)
4679     {
4680       register int bitschange
4681         = TYPE_PRECISION (TREE_TYPE (op))
4682           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4683
4684       /* Truncations are many-one so cannot be removed.  */
4685       if (bitschange < 0)
4686         break;
4687
4688       /* See what's inside this conversion.  If we decide to strip it,
4689          we will set WIN.  */
4690       op = TREE_OPERAND (op, 0);
4691
4692       if (bitschange > 0)
4693         {
4694           /* An extension: the outermost one can be stripped,
4695              but remember whether it is zero or sign extension.  */
4696           if (first)
4697             uns = TREE_UNSIGNED (TREE_TYPE (op));
4698           /* Otherwise, if a sign extension has been stripped,
4699              only sign extensions can now be stripped;
4700              if a zero extension has been stripped, only zero-extensions.  */
4701           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4702             break;
4703           first = 0;
4704         }
4705       else /* bitschange == 0 */
4706         {
4707           /* A change in nominal type can always be stripped, but we must
4708              preserve the unsignedness.  */
4709           if (first)
4710             uns = TREE_UNSIGNED (TREE_TYPE (op));
4711           first = 0;
4712         }
4713
4714       win = op;
4715     }
4716
4717   if (TREE_CODE (op) == COMPONENT_REF
4718       /* Since type_for_size always gives an integer type.  */
4719       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
4720     {
4721       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4722       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
4723
4724       /* We can get this structure field in a narrower type that fits it,
4725          but the resulting extension to its nominal type (a fullword type)
4726          must satisfy the same conditions as for other extensions.
4727
4728          Do this only for fields that are aligned (not bit-fields),
4729          because when bit-field insns will be used there is no
4730          advantage in doing this.  */
4731
4732       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4733           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4734           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4735           && type != 0)
4736         {
4737           if (first)
4738             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4739           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4740                        TREE_OPERAND (op, 1));
4741           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4742           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4743           TREE_RAISES (win) = TREE_RAISES (op);
4744         }
4745     }
4746   *unsignedp_ptr = uns;
4747   return win;
4748 }
4749 \f
4750 /* Nonzero if integer constant C has a value that is permissible
4751    for type TYPE (an INTEGER_TYPE).  */
4752
4753 int
4754 int_fits_type_p (c, type)
4755      tree c, type;
4756 {
4757   if (TREE_UNSIGNED (type))
4758     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4759                && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
4760             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4761                   && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))
4762             /* Negative ints never fit unsigned types.  */
4763             && ! (TREE_INT_CST_HIGH (c) < 0
4764                   && ! TREE_UNSIGNED (TREE_TYPE (c))));
4765   else
4766     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4767                && INT_CST_LT (TYPE_MAX_VALUE (type), c))
4768             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4769                   && INT_CST_LT (c, TYPE_MIN_VALUE (type)))
4770             /* Unsigned ints with top bit set never fit signed types.  */
4771             && ! (TREE_INT_CST_HIGH (c) < 0
4772                   && TREE_UNSIGNED (TREE_TYPE (c))));
4773 }
4774
4775 /* Return the innermost context enclosing DECL that is
4776    a FUNCTION_DECL, or zero if none.  */
4777
4778 tree
4779 decl_function_context (decl)
4780      tree decl;
4781 {
4782   tree context;
4783
4784   if (TREE_CODE (decl) == ERROR_MARK)
4785     return 0;
4786
4787   if (TREE_CODE (decl) == SAVE_EXPR)
4788     context = SAVE_EXPR_CONTEXT (decl);
4789   else
4790     context = DECL_CONTEXT (decl);
4791
4792   while (context && TREE_CODE (context) != FUNCTION_DECL)
4793     {
4794       if (TREE_CODE_CLASS (TREE_CODE (context)) == 't')
4795         context = TYPE_CONTEXT (context);
4796       else if (TREE_CODE_CLASS (TREE_CODE (context)) == 'd')
4797         context = DECL_CONTEXT (context);
4798       else if (TREE_CODE (context) == BLOCK)
4799         context = BLOCK_SUPERCONTEXT (context);
4800       else
4801         /* Unhandled CONTEXT !?  */
4802         abort ();
4803     }
4804
4805   return context;
4806 }
4807
4808 /* Return the innermost context enclosing DECL that is
4809    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4810    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
4811
4812 tree
4813 decl_type_context (decl)
4814      tree decl;
4815 {
4816   tree context = DECL_CONTEXT (decl);
4817
4818   while (context)
4819     {
4820       if (TREE_CODE (context) == RECORD_TYPE
4821           || TREE_CODE (context) == UNION_TYPE
4822           || TREE_CODE (context) == QUAL_UNION_TYPE)
4823         return context;
4824       if (TREE_CODE (context) == TYPE_DECL
4825           || TREE_CODE (context) == FUNCTION_DECL)
4826         context = DECL_CONTEXT (context);
4827       else if (TREE_CODE (context) == BLOCK)
4828         context = BLOCK_SUPERCONTEXT (context);
4829       else
4830         /* Unhandled CONTEXT!?  */
4831         abort ();
4832     }
4833   return NULL_TREE;
4834 }
4835
4836 /* Print debugging information about the obstack O, named STR.  */
4837
4838 void
4839 print_obstack_statistics (str, o)
4840      const char *str;
4841      struct obstack *o;
4842 {
4843   struct _obstack_chunk *chunk = o->chunk;
4844   int n_chunks = 1;
4845   int n_alloc = 0;
4846
4847   n_alloc += o->next_free - chunk->contents;
4848   chunk = chunk->prev;
4849   while (chunk)
4850     {
4851       n_chunks += 1;
4852       n_alloc += chunk->limit - &chunk->contents[0];
4853       chunk = chunk->prev;
4854     }
4855   fprintf (stderr, "obstack %s: %u bytes, %d chunks\n",
4856            str, n_alloc, n_chunks);
4857 }
4858
4859 /* Print debugging information about tree nodes generated during the compile,
4860    and any language-specific information.  */
4861
4862 void
4863 dump_tree_statistics ()
4864 {
4865 #ifdef GATHER_STATISTICS
4866   int i;
4867   int total_nodes, total_bytes;
4868 #endif
4869
4870   fprintf (stderr, "\n??? tree nodes created\n\n");
4871 #ifdef GATHER_STATISTICS
4872   fprintf (stderr, "Kind                  Nodes     Bytes\n");
4873   fprintf (stderr, "-------------------------------------\n");
4874   total_nodes = total_bytes = 0;
4875   for (i = 0; i < (int) all_kinds; i++)
4876     {
4877       fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
4878                tree_node_counts[i], tree_node_sizes[i]);
4879       total_nodes += tree_node_counts[i];
4880       total_bytes += tree_node_sizes[i];
4881     }
4882   fprintf (stderr, "%-20s        %9d\n", "identifier names", id_string_size);
4883   fprintf (stderr, "-------------------------------------\n");
4884   fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
4885   fprintf (stderr, "-------------------------------------\n");
4886 #else
4887   fprintf (stderr, "(No per-node statistics)\n");
4888 #endif
4889   print_obstack_statistics ("permanent_obstack", &permanent_obstack);
4890   print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
4891   print_obstack_statistics ("temporary_obstack", &temporary_obstack);
4892   print_obstack_statistics ("momentary_obstack", &momentary_obstack);
4893   print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack);
4894   print_lang_statistics ();
4895 }
4896 \f
4897 #define FILE_FUNCTION_PREFIX_LEN 9
4898
4899 #ifndef NO_DOLLAR_IN_LABEL
4900 #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
4901 #else /* NO_DOLLAR_IN_LABEL */
4902 #ifndef NO_DOT_IN_LABEL
4903 #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
4904 #else /* NO_DOT_IN_LABEL */
4905 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
4906 #endif  /* NO_DOT_IN_LABEL */
4907 #endif  /* NO_DOLLAR_IN_LABEL */
4908
4909 extern char * first_global_object_name;
4910 extern char * weak_global_object_name;
4911
4912 /* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
4913    clashes in cases where we can't reliably choose a unique name.
4914
4915    Derived from mkstemp.c in libiberty.  */
4916
4917 static void
4918 append_random_chars (template)
4919      char *template;
4920 {
4921   static const char letters[]
4922     = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
4923   static unsigned HOST_WIDE_INT value;
4924   unsigned HOST_WIDE_INT v;
4925
4926 #ifdef HAVE_GETTIMEOFDAY
4927   struct timeval tv;
4928 #endif
4929
4930   template += strlen (template);
4931
4932 #ifdef HAVE_GETTIMEOFDAY
4933   /* Get some more or less random data.  */
4934   gettimeofday (&tv, NULL);
4935   value += ((unsigned HOST_WIDE_INT) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
4936 #else
4937   value += getpid ();
4938 #endif
4939
4940   v = value;
4941
4942   /* Fill in the random bits.  */
4943   template[0] = letters[v % 62];
4944   v /= 62;
4945   template[1] = letters[v % 62];
4946   v /= 62;
4947   template[2] = letters[v % 62];
4948   v /= 62;
4949   template[3] = letters[v % 62];
4950   v /= 62;
4951   template[4] = letters[v % 62];
4952   v /= 62;
4953   template[5] = letters[v % 62];
4954
4955   template[6] = '\0';
4956 }
4957
4958 /* Generate a name for a function unique to this translation unit.
4959    TYPE is some string to identify the purpose of this function to the
4960    linker or collect2.  */
4961
4962 tree
4963 get_file_function_name_long (type)
4964      const char *type;
4965 {
4966   char *buf;
4967   register char *p;
4968
4969   if (first_global_object_name)
4970     p = first_global_object_name;
4971   else
4972     {
4973       /* We don't have anything that we know to be unique to this translation
4974          unit, so use what we do have and throw in some randomness.  */
4975
4976       const char *name = weak_global_object_name;
4977       const char *file = main_input_filename;
4978
4979       if (! name)
4980         name = "";
4981       if (! file)
4982         file = input_filename;
4983
4984       p = (char *) alloca (7 + strlen (name) + strlen (file));
4985
4986       sprintf (p, "%s%s", name, file);
4987       append_random_chars (p);
4988     }
4989
4990   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
4991                          + strlen (type));
4992
4993   /* Set up the name of the file-level functions we may need.  */
4994   /* Use a global object (which is already required to be unique over
4995      the program) rather than the file name (which imposes extra
4996      constraints).  -- Raeburn@MIT.EDU, 10 Jan 1990.  */
4997   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
4998
4999   /* Don't need to pull weird characters out of global names.  */
5000   if (p != first_global_object_name)
5001     {
5002       for (p = buf+11; *p; p++)
5003         if (! ( ISDIGIT(*p)
5004 #if 0 /* we always want labels, which are valid C++ identifiers (+ `$') */
5005 #ifndef ASM_IDENTIFY_GCC        /* this is required if `.' is invalid -- k. raeburn */
5006                || *p == '.'
5007 #endif
5008 #endif
5009 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
5010                || *p == '$'
5011 #endif
5012 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
5013                || *p == '.'
5014 #endif
5015                || ISUPPER(*p)
5016                || ISLOWER(*p)))
5017           *p = '_';
5018     }
5019
5020   return get_identifier (buf);
5021 }
5022
5023 /* If KIND=='I', return a suitable global initializer (constructor) name.
5024    If KIND=='D', return a suitable global clean-up (destructor) name.  */
5025
5026 tree
5027 get_file_function_name (kind)
5028      int kind;
5029 {
5030   char p[2];
5031   p[0] = kind;
5032   p[1] = 0;
5033
5034   return get_file_function_name_long (p);
5035 }
5036
5037 \f
5038 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5039    The result is placed in BUFFER (which has length BIT_SIZE),
5040    with one bit in each char ('\000' or '\001').
5041
5042    If the constructor is constant, NULL_TREE is returned.
5043    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5044
5045 tree
5046 get_set_constructor_bits (init, buffer, bit_size)
5047      tree init;
5048      char *buffer;
5049      int bit_size;
5050 {
5051   int i;
5052   tree vals;
5053   HOST_WIDE_INT domain_min
5054     = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
5055   tree non_const_bits = NULL_TREE;
5056   for (i = 0; i < bit_size; i++)
5057     buffer[i] = 0;
5058
5059   for (vals = TREE_OPERAND (init, 1); 
5060        vals != NULL_TREE; vals = TREE_CHAIN (vals))
5061     {
5062       if (TREE_CODE (TREE_VALUE (vals)) != INTEGER_CST
5063           || (TREE_PURPOSE (vals) != NULL_TREE
5064               && TREE_CODE (TREE_PURPOSE (vals)) != INTEGER_CST))
5065         non_const_bits
5066           = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
5067       else if (TREE_PURPOSE (vals) != NULL_TREE)
5068         {
5069           /* Set a range of bits to ones.  */
5070           HOST_WIDE_INT lo_index
5071             = TREE_INT_CST_LOW (TREE_PURPOSE (vals)) - domain_min;
5072           HOST_WIDE_INT hi_index
5073             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5074           if (lo_index < 0 || lo_index >= bit_size
5075             || hi_index < 0 || hi_index >= bit_size)
5076             abort ();
5077           for ( ; lo_index <= hi_index; lo_index++)
5078             buffer[lo_index] = 1;
5079         }
5080       else
5081         {
5082           /* Set a single bit to one.  */
5083           HOST_WIDE_INT index
5084             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5085           if (index < 0 || index >= bit_size)
5086             {
5087               error ("invalid initializer for bit string");
5088               return NULL_TREE;
5089             }
5090           buffer[index] = 1;
5091         }
5092     }
5093   return non_const_bits;
5094 }
5095
5096 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5097    The result is placed in BUFFER (which is an array of bytes).
5098    If the constructor is constant, NULL_TREE is returned.
5099    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5100
5101 tree
5102 get_set_constructor_bytes (init, buffer, wd_size)
5103      tree init;
5104      unsigned char *buffer;
5105      int wd_size;
5106 {
5107   int i;
5108   int set_word_size = BITS_PER_UNIT;
5109   int bit_size = wd_size * set_word_size;
5110   int bit_pos = 0;
5111   unsigned char *bytep = buffer;
5112   char *bit_buffer = (char *) alloca(bit_size);
5113   tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
5114
5115   for (i = 0; i < wd_size; i++)
5116     buffer[i] = 0;
5117
5118   for (i = 0; i < bit_size; i++)
5119     {
5120       if (bit_buffer[i])
5121         {
5122           if (BYTES_BIG_ENDIAN)
5123             *bytep |= (1 << (set_word_size - 1 - bit_pos));
5124           else
5125             *bytep |= 1 << bit_pos;
5126         }
5127       bit_pos++;
5128       if (bit_pos >= set_word_size)
5129         bit_pos = 0, bytep++;
5130     }
5131   return non_const_bits;
5132 }
5133 \f
5134 #if defined ENABLE_CHECKING && HAVE_GCC_VERSION(2,7)
5135 /* Complain that the tree code of NODE does not match the expected CODE.
5136    FILE, LINE, and FUNCTION are of the caller.  */
5137 void
5138 tree_check_failed (node, code, file, line, function)
5139      const tree node;
5140      enum tree_code code;
5141      const char *file;
5142      int line;
5143      const char *function;
5144 {
5145   error ("Tree check: expected %s, have %s",
5146          tree_code_name[code], tree_code_name[TREE_CODE (node)]);
5147   fancy_abort (file, line, function);
5148 }
5149
5150 /* Similar to above, except that we check for a class of tree
5151    code, given in CL.  */
5152 void
5153 tree_class_check_failed (node, cl, file, line, function)
5154      const tree node;
5155      char cl;
5156      const char *file;
5157      int line;
5158      const char *function;
5159 {
5160   error ("Tree check: expected class '%c', have '%c' (%s)",
5161          cl, TREE_CODE_CLASS (TREE_CODE (node)),
5162          tree_code_name[TREE_CODE (node)]);
5163   fancy_abort (file, line, function);
5164 }
5165
5166 #endif /* ENABLE_CHECKING */
5167
5168 /* Return the alias set for T, which may be either a type or an
5169    expression.  */
5170
5171 int
5172 get_alias_set (t)
5173      tree t;
5174 {
5175   if (!flag_strict_aliasing || !lang_get_alias_set)
5176     /* If we're not doing any lanaguage-specific alias analysis, just
5177        assume everything aliases everything else.  */
5178     return 0;
5179   else
5180     return (*lang_get_alias_set) (t);
5181 }
5182
5183 /* Return a brand-new alias set.  */
5184
5185 int
5186 new_alias_set ()
5187 {
5188   static int last_alias_set;
5189   if (flag_strict_aliasing)
5190     return ++last_alias_set;
5191   else
5192     return 0;
5193 }
5194 \f
5195 #ifndef CHAR_TYPE_SIZE
5196 #define CHAR_TYPE_SIZE BITS_PER_UNIT
5197 #endif
5198
5199 #ifndef SHORT_TYPE_SIZE
5200 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
5201 #endif
5202
5203 #ifndef INT_TYPE_SIZE
5204 #define INT_TYPE_SIZE BITS_PER_WORD
5205 #endif
5206
5207 #ifndef LONG_TYPE_SIZE
5208 #define LONG_TYPE_SIZE BITS_PER_WORD
5209 #endif
5210
5211 #ifndef LONG_LONG_TYPE_SIZE
5212 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
5213 #endif
5214
5215 #ifndef FLOAT_TYPE_SIZE
5216 #define FLOAT_TYPE_SIZE BITS_PER_WORD
5217 #endif
5218
5219 #ifndef DOUBLE_TYPE_SIZE
5220 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5221 #endif
5222
5223 #ifndef LONG_DOUBLE_TYPE_SIZE
5224 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5225 #endif
5226
5227 /* Create nodes for all integer types (and error_mark_node) using the sizes
5228    of C datatypes.  The caller should call set_sizetype soon after calling
5229    this function to select one of the types as sizetype.  */
5230    
5231 void
5232 build_common_tree_nodes (signed_char)
5233      int signed_char;
5234 {
5235   error_mark_node = make_node (ERROR_MARK);
5236   TREE_TYPE (error_mark_node) = error_mark_node;
5237
5238   /* Define both `signed char' and `unsigned char'.  */
5239   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5240   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5241
5242   /* Define `char', which is like either `signed char' or `unsigned char'
5243      but not the same as either.  */
5244   char_type_node
5245     = (signed_char
5246        ? make_signed_type (CHAR_TYPE_SIZE)
5247        : make_unsigned_type (CHAR_TYPE_SIZE));
5248
5249   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5250   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5251   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5252   /* Define an unsigned integer first.  make_unsigned_type and make_signed_type
5253      both call set_sizetype for the first type that we create, and we want this
5254      to be large enough to hold the sizes of various types until we switch to
5255      the real sizetype.  */
5256   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5257   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5258   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5259   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5260   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5261
5262   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5263   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5264   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5265   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5266   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5267
5268   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5269   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5270   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5271   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5272   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5273 }
5274
5275 /* For type TYPE, fill in the proper type for TYPE_SIZE and
5276    TYPE_SIZE_UNIT.  */
5277 static void
5278 fix_sizetype (type)
5279      tree type;
5280 {
5281   TREE_TYPE (TYPE_SIZE (type)) = bitsizetype;
5282   TREE_TYPE (TYPE_SIZE_UNIT (type)) = sizetype;
5283 }
5284
5285 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5286    It will fix the previously made nodes to have proper references to
5287    sizetype, and it will create several other common tree nodes.  */
5288 void
5289 build_common_tree_nodes_2 (short_double)
5290      int short_double;
5291 {
5292   fix_sizetype (signed_char_type_node);
5293   fix_sizetype (unsigned_char_type_node);
5294   fix_sizetype (char_type_node);
5295   fix_sizetype (short_integer_type_node);
5296   fix_sizetype (short_unsigned_type_node);
5297   fix_sizetype (integer_type_node);
5298   fix_sizetype (unsigned_type_node);
5299   fix_sizetype (long_unsigned_type_node);
5300   fix_sizetype (long_integer_type_node);
5301   fix_sizetype (long_long_integer_type_node);
5302   fix_sizetype (long_long_unsigned_type_node);
5303
5304   fix_sizetype (intQI_type_node);
5305   fix_sizetype (intHI_type_node);
5306   fix_sizetype (intSI_type_node);
5307   fix_sizetype (intDI_type_node);
5308   fix_sizetype (intTI_type_node);
5309   fix_sizetype (unsigned_intQI_type_node);
5310   fix_sizetype (unsigned_intHI_type_node);
5311   fix_sizetype (unsigned_intSI_type_node);
5312   fix_sizetype (unsigned_intDI_type_node);
5313   fix_sizetype (unsigned_intTI_type_node);
5314
5315   integer_zero_node = build_int_2 (0, 0);
5316   TREE_TYPE (integer_zero_node) = integer_type_node;
5317   integer_one_node = build_int_2 (1, 0);
5318   TREE_TYPE (integer_one_node) = integer_type_node;
5319
5320   size_zero_node = build_int_2 (0, 0);
5321   TREE_TYPE (size_zero_node) = sizetype;
5322   size_one_node = build_int_2 (1, 0);
5323   TREE_TYPE (size_one_node) = sizetype;
5324
5325   void_type_node = make_node (VOID_TYPE);
5326   layout_type (void_type_node); /* Uses size_zero_node */
5327   /* We are not going to have real types in C with less than byte alignment,
5328      so we might as well not have any types that claim to have it.  */
5329   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
5330
5331   null_pointer_node = build_int_2 (0, 0);
5332   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5333   layout_type (TREE_TYPE (null_pointer_node));
5334
5335   ptr_type_node = build_pointer_type (void_type_node);
5336   const_ptr_type_node
5337     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5338
5339   float_type_node = make_node (REAL_TYPE);
5340   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5341   layout_type (float_type_node);
5342
5343   double_type_node = make_node (REAL_TYPE);
5344   if (short_double)
5345     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5346   else
5347     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5348   layout_type (double_type_node);
5349
5350   long_double_type_node = make_node (REAL_TYPE);
5351   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5352   layout_type (long_double_type_node);
5353
5354   complex_integer_type_node = make_node (COMPLEX_TYPE);
5355   TREE_TYPE (complex_integer_type_node) = integer_type_node;
5356   layout_type (complex_integer_type_node);
5357
5358   complex_float_type_node = make_node (COMPLEX_TYPE);
5359   TREE_TYPE (complex_float_type_node) = float_type_node;
5360   layout_type (complex_float_type_node);
5361
5362   complex_double_type_node = make_node (COMPLEX_TYPE);
5363   TREE_TYPE (complex_double_type_node) = double_type_node;
5364   layout_type (complex_double_type_node);
5365
5366   complex_long_double_type_node = make_node (COMPLEX_TYPE);
5367   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5368   layout_type (complex_long_double_type_node);
5369
5370 #ifdef BUILD_VA_LIST_TYPE
5371   BUILD_VA_LIST_TYPE(va_list_type_node);
5372 #else
5373   va_list_type_node = ptr_type_node;
5374 #endif
5375 }