OSDN Git Service

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