OSDN Git Service

* tree.c (staticp, case LABEL_DECL): New case.
[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 LABEL_DECL:
2456     case STRING_CST:
2457       return 1;
2458
2459       /* If we are referencing a bitfield, we can't evaluate an
2460          ADDR_EXPR at compile time and so it isn't a constant.  */
2461     case COMPONENT_REF:
2462       return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
2463               && staticp (TREE_OPERAND (arg, 0)));
2464
2465     case BIT_FIELD_REF:
2466       return 0;
2467
2468 #if 0
2469        /* This case is technically correct, but results in setting
2470           TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
2471           compile time.  */
2472     case INDIRECT_REF:
2473       return TREE_CONSTANT (TREE_OPERAND (arg, 0));
2474 #endif
2475
2476     case ARRAY_REF:
2477       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2478           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2479         return staticp (TREE_OPERAND (arg, 0));
2480
2481     default:
2482       return 0;
2483     }
2484 }
2485 \f
2486 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2487    Do this to any expression which may be used in more than one place,
2488    but must be evaluated only once.
2489
2490    Normally, expand_expr would reevaluate the expression each time.
2491    Calling save_expr produces something that is evaluated and recorded
2492    the first time expand_expr is called on it.  Subsequent calls to
2493    expand_expr just reuse the recorded value.
2494
2495    The call to expand_expr that generates code that actually computes
2496    the value is the first call *at compile time*.  Subsequent calls
2497    *at compile time* generate code to use the saved value.
2498    This produces correct result provided that *at run time* control
2499    always flows through the insns made by the first expand_expr
2500    before reaching the other places where the save_expr was evaluated.
2501    You, the caller of save_expr, must make sure this is so.
2502
2503    Constants, and certain read-only nodes, are returned with no
2504    SAVE_EXPR because that is safe.  Expressions containing placeholders
2505    are not touched; see tree.def for an explanation of what these
2506    are used for.  */
2507
2508 tree
2509 save_expr (expr)
2510      tree expr;
2511 {
2512   register tree t = fold (expr);
2513
2514   /* We don't care about whether this can be used as an lvalue in this
2515      context.  */
2516   while (TREE_CODE (t) == NON_LVALUE_EXPR)
2517     t = TREE_OPERAND (t, 0);
2518
2519   /* If the tree evaluates to a constant, then we don't want to hide that
2520      fact (i.e. this allows further folding, and direct checks for constants).
2521      However, a read-only object that has side effects cannot be bypassed.
2522      Since it is no problem to reevaluate literals, we just return the 
2523      literal node.  */
2524
2525   if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t))
2526       || TREE_CODE (t) == SAVE_EXPR || TREE_CODE (t) == ERROR_MARK)
2527     return t;
2528
2529   /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2530      it means that the size or offset of some field of an object depends on
2531      the value within another field.
2532
2533      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2534      and some variable since it would then need to be both evaluated once and
2535      evaluated more than once.  Front-ends must assure this case cannot
2536      happen by surrounding any such subexpressions in their own SAVE_EXPR
2537      and forcing evaluation at the proper time.  */
2538   if (contains_placeholder_p (t))
2539     return t;
2540
2541   t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
2542
2543   /* This expression might be placed ahead of a jump to ensure that the
2544      value was computed on both sides of the jump.  So make sure it isn't
2545      eliminated as dead.  */
2546   TREE_SIDE_EFFECTS (t) = 1;
2547   return t;
2548 }
2549
2550 /* Arrange for an expression to be expanded multiple independent
2551    times.  This is useful for cleanup actions, as the backend can
2552    expand them multiple times in different places.  */
2553
2554 tree
2555 unsave_expr (expr)
2556      tree expr;
2557 {
2558   tree t;
2559
2560   /* If this is already protected, no sense in protecting it again.  */
2561   if (TREE_CODE (expr) == UNSAVE_EXPR)
2562     return expr;
2563
2564   t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
2565   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
2566   return t;
2567 }
2568
2569 /* Returns the index of the first non-tree operand for CODE, or the number
2570    of operands if all are trees.  */
2571
2572 int
2573 first_rtl_op (code)
2574      enum tree_code code;
2575 {
2576   switch (code)
2577     {
2578     case SAVE_EXPR:
2579       return 2;
2580     case GOTO_SUBROUTINE_EXPR:
2581     case RTL_EXPR:
2582       return 0;
2583     case CALL_EXPR:
2584       return 2;
2585     case WITH_CLEANUP_EXPR:
2586       /* Should be defined to be 2.  */
2587       return 1;
2588     case METHOD_CALL_EXPR:
2589       return 3;
2590     default:
2591       return tree_code_length [(int) code];
2592     }
2593 }
2594
2595 /* Perform any modifications to EXPR required when it is unsaved.  Does
2596    not recurse into EXPR's subtrees.  */
2597
2598 void
2599 unsave_expr_1 (expr)
2600      tree expr;
2601 {
2602   switch (TREE_CODE (expr))
2603     {
2604     case SAVE_EXPR:
2605       if (! SAVE_EXPR_PERSISTENT_P (expr))
2606         SAVE_EXPR_RTL (expr) = 0;
2607       break;
2608
2609     case TARGET_EXPR:
2610       /* Don't mess with a TARGET_EXPR that hasn't been expanded.
2611          It's OK for this to happen if it was part of a subtree that
2612          isn't immediately expanded, such as operand 2 of another
2613          TARGET_EXPR.  */
2614       if (TREE_OPERAND (expr, 1))
2615         break;
2616
2617       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
2618       TREE_OPERAND (expr, 3) = NULL_TREE;
2619       break;
2620       
2621     case RTL_EXPR:
2622       /* I don't yet know how to emit a sequence multiple times.  */
2623       if (RTL_EXPR_SEQUENCE (expr) != 0)
2624         abort ();
2625       break;
2626
2627     case CALL_EXPR:
2628       CALL_EXPR_RTL (expr) = 0;
2629       break;
2630
2631     default:
2632       if (lang_unsave_expr_now != 0)
2633         (*lang_unsave_expr_now) (expr);
2634       break;
2635     }
2636 }
2637
2638 /* Helper function for unsave_expr_now.  */
2639
2640 static void
2641 unsave_expr_now_r (expr)
2642      tree expr;
2643 {
2644   enum tree_code code;
2645
2646   /* There's nothing to do for NULL_TREE.  */
2647   if (expr == 0)
2648     return;
2649
2650   unsave_expr_1 (expr);
2651
2652   code = TREE_CODE (expr);
2653   switch (TREE_CODE_CLASS (code))
2654     {
2655     case 'c':  /* a constant */
2656     case 't':  /* a type node */
2657     case 'd':  /* A decl node */
2658     case 'b':  /* A block node */
2659       break;
2660
2661     case 'x':  /* miscellaneous: e.g., identifier, TREE_LIST or ERROR_MARK.  */
2662       if (code == TREE_LIST)
2663         {
2664           unsave_expr_now_r (TREE_VALUE (expr));
2665           unsave_expr_now_r (TREE_CHAIN (expr));
2666         }
2667       break;
2668
2669     case 'e':  /* an expression */
2670     case 'r':  /* a reference */
2671     case 's':  /* an expression with side effects */
2672     case '<':  /* a comparison expression */
2673     case '2':  /* a binary arithmetic expression */
2674     case '1':  /* a unary arithmetic expression */
2675       {
2676         int i;
2677         
2678         for (i = first_rtl_op (code) - 1; i >= 0; i--)
2679           unsave_expr_now_r (TREE_OPERAND (expr, i));
2680       }
2681       break;
2682
2683     default:
2684       abort ();
2685     }
2686 }
2687
2688 /* Modify a tree in place so that all the evaluate only once things
2689    are cleared out.  Return the EXPR given.  */
2690
2691 tree
2692 unsave_expr_now (expr)
2693      tree expr;
2694 {
2695   if (lang_unsave!= 0)
2696     (*lang_unsave) (&expr);
2697   else
2698     unsave_expr_now_r (expr);
2699
2700   return expr;
2701 }
2702
2703 /* Return 0 if it is safe to evaluate EXPR multiple times,
2704    return 1 if it is safe if EXPR is unsaved afterward, or
2705    return 2 if it is completely unsafe. 
2706
2707    This assumes that CALL_EXPRs and TARGET_EXPRs are never replicated in
2708    an expression tree, so that it safe to unsave them and the surrounding
2709    context will be correct.
2710
2711    SAVE_EXPRs basically *only* appear replicated in an expression tree,
2712    occasionally across the whole of a function.  It is therefore only
2713    safe to unsave a SAVE_EXPR if you know that all occurrences appear
2714    below the UNSAVE_EXPR.
2715
2716    RTL_EXPRs consume their rtl during evaluation.  It is therefore 
2717    never possible to unsave them.  */
2718
2719 int
2720 unsafe_for_reeval (expr)
2721      tree expr;
2722 {
2723   int unsafeness = 0;
2724   enum tree_code code;
2725   int i, tmp;
2726   tree exp;
2727   int first_rtl;
2728
2729   if (expr == NULL_TREE)
2730     return 1;
2731
2732   code = TREE_CODE (expr);
2733   first_rtl = first_rtl_op (code);
2734
2735   switch (code)
2736     {
2737     case SAVE_EXPR:
2738     case RTL_EXPR:
2739       return 2;
2740
2741     case TREE_LIST:
2742       for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
2743         {
2744           tmp = unsafe_for_reeval (TREE_VALUE (exp));
2745           unsafeness = MAX (tmp, unsafeness);
2746         }
2747
2748       return unsafeness;
2749
2750     case CALL_EXPR:
2751       tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
2752       return MAX (tmp, 1);
2753
2754     case TARGET_EXPR:
2755       unsafeness = 1;
2756       break;
2757
2758     default:
2759       /* ??? Add a lang hook if it becomes necessary.  */
2760       break;
2761     }
2762
2763   switch (TREE_CODE_CLASS (code))
2764     {
2765     case 'c':  /* a constant */
2766     case 't':  /* a type node */
2767     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
2768     case 'd':  /* A decl node */
2769     case 'b':  /* A block node */
2770       return 0;
2771
2772     case 'e':  /* an expression */
2773     case 'r':  /* a reference */
2774     case 's':  /* an expression with side effects */
2775     case '<':  /* a comparison expression */
2776     case '2':  /* a binary arithmetic expression */
2777     case '1':  /* a unary arithmetic expression */
2778       for (i = first_rtl - 1; i >= 0; i--)
2779         {
2780           tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
2781           unsafeness = MAX (tmp, unsafeness);
2782         }
2783
2784       return unsafeness;
2785
2786     default:
2787       return 2;
2788     }
2789 }
2790 \f
2791 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2792    or offset that depends on a field within a record.  */
2793
2794 int
2795 contains_placeholder_p (exp)
2796      tree exp;
2797 {
2798   register enum tree_code code = TREE_CODE (exp);
2799   int result;
2800
2801   /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
2802      in it since it is supplying a value for it.  */
2803   if (code == WITH_RECORD_EXPR)
2804     return 0;
2805   else if (code == PLACEHOLDER_EXPR)
2806     return 1;
2807
2808   switch (TREE_CODE_CLASS (code))
2809     {
2810     case 'r':
2811       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2812          position computations since they will be converted into a
2813          WITH_RECORD_EXPR involving the reference, which will assume
2814          here will be valid.  */
2815       return contains_placeholder_p (TREE_OPERAND (exp, 0));
2816
2817     case 'x':
2818       if (code == TREE_LIST)
2819         return (contains_placeholder_p (TREE_VALUE (exp))
2820                 || (TREE_CHAIN (exp) != 0
2821                     && contains_placeholder_p (TREE_CHAIN (exp))));
2822       break;
2823                                         
2824     case '1':
2825     case '2':  case '<':
2826     case 'e':
2827       switch (code)
2828         {
2829         case COMPOUND_EXPR:
2830           /* Ignoring the first operand isn't quite right, but works best. */
2831           return contains_placeholder_p (TREE_OPERAND (exp, 1));
2832
2833         case RTL_EXPR:
2834         case CONSTRUCTOR:
2835           return 0;
2836
2837         case COND_EXPR:
2838           return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2839                   || contains_placeholder_p (TREE_OPERAND (exp, 1))
2840                   || contains_placeholder_p (TREE_OPERAND (exp, 2)));
2841
2842         case SAVE_EXPR:
2843           /* If we already know this doesn't have a placeholder, don't
2844              check again.  */
2845           if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
2846             return 0;
2847
2848           SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
2849           result = contains_placeholder_p (TREE_OPERAND (exp, 0));
2850           if (result)
2851             SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
2852
2853           return result;
2854
2855         case CALL_EXPR:
2856           return (TREE_OPERAND (exp, 1) != 0
2857                   && contains_placeholder_p (TREE_OPERAND (exp, 1)));
2858
2859         default:
2860           break;
2861         }
2862
2863       switch (tree_code_length[(int) code])
2864         {
2865         case 1:
2866           return contains_placeholder_p (TREE_OPERAND (exp, 0));
2867         case 2:
2868           return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2869                   || contains_placeholder_p (TREE_OPERAND (exp, 1)));
2870         default:
2871           return 0;
2872         }
2873
2874     default:
2875       return 0;
2876     }
2877   return 0;
2878 }
2879
2880 /* Return 1 if EXP contains any expressions that produce cleanups for an
2881    outer scope to deal with.  Used by fold.  */
2882
2883 int
2884 has_cleanups (exp)
2885      tree exp;
2886 {
2887   int i, nops, cmp;
2888
2889   if (! TREE_SIDE_EFFECTS (exp))
2890     return 0;
2891
2892   switch (TREE_CODE (exp))
2893     {
2894     case TARGET_EXPR:
2895     case GOTO_SUBROUTINE_EXPR:
2896     case WITH_CLEANUP_EXPR:
2897       return 1;
2898
2899     case CLEANUP_POINT_EXPR:
2900       return 0;
2901
2902     case CALL_EXPR:
2903       for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
2904         {
2905           cmp = has_cleanups (TREE_VALUE (exp));
2906           if (cmp)
2907             return cmp;
2908         }
2909       return 0;
2910
2911     default:
2912       break;
2913     }
2914
2915   /* This general rule works for most tree codes.  All exceptions should be
2916      handled above.  If this is a language-specific tree code, we can't
2917      trust what might be in the operand, so say we don't know
2918      the situation.  */
2919   if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
2920     return -1;
2921
2922   nops = first_rtl_op (TREE_CODE (exp));
2923   for (i = 0; i < nops; i++)
2924     if (TREE_OPERAND (exp, i) != 0)
2925       {
2926         int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
2927         if (type == 'e' || type == '<' || type == '1' || type == '2'
2928             || type == 'r' || type == 's')
2929           {
2930             cmp = has_cleanups (TREE_OPERAND (exp, i));
2931             if (cmp)
2932               return cmp;
2933           }
2934       }
2935
2936   return 0;
2937 }
2938 \f
2939 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2940    return a tree with all occurrences of references to F in a
2941    PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
2942    contains only arithmetic expressions or a CALL_EXPR with a
2943    PLACEHOLDER_EXPR occurring only in its arglist.  */
2944
2945 tree
2946 substitute_in_expr (exp, f, r)
2947      tree exp;
2948      tree f;
2949      tree r;
2950 {
2951   enum tree_code code = TREE_CODE (exp);
2952   tree op0, op1, op2;
2953   tree new;
2954   tree inner;
2955
2956   switch (TREE_CODE_CLASS (code))
2957     {
2958     case 'c':
2959     case 'd':
2960       return exp;
2961
2962     case 'x':
2963       if (code == PLACEHOLDER_EXPR)
2964         return exp;
2965       else if (code == TREE_LIST)
2966         {
2967           op0 = (TREE_CHAIN (exp) == 0
2968                  ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
2969           op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
2970           if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2971             return exp;
2972
2973           return tree_cons (TREE_PURPOSE (exp), op1, op0);
2974         }
2975
2976       abort ();
2977
2978     case '1':
2979     case '2':
2980     case '<':
2981     case 'e':
2982       switch (tree_code_length[(int) code])
2983         {
2984         case 1:
2985           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2986           if (op0 == TREE_OPERAND (exp, 0))
2987             return exp;
2988           
2989           new = fold (build1 (code, TREE_TYPE (exp), op0));
2990           break;
2991
2992         case 2:
2993           /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2994              could, but we don't support it.  */
2995           if (code == RTL_EXPR)
2996             return exp;
2997           else if (code == CONSTRUCTOR)
2998             abort ();
2999
3000           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3001           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
3002           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3003             return exp;
3004
3005           new = fold (build (code, TREE_TYPE (exp), op0, op1));
3006           break;
3007
3008         case 3:
3009           /* It cannot be that anything inside a SAVE_EXPR contains a
3010              PLACEHOLDER_EXPR.  */
3011           if (code == SAVE_EXPR)
3012             return exp;
3013
3014           else if (code == CALL_EXPR)
3015             {
3016               op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
3017               if (op1 == TREE_OPERAND (exp, 1))
3018                 return exp;
3019
3020               return build (code, TREE_TYPE (exp),
3021                             TREE_OPERAND (exp, 0), op1, NULL_TREE);
3022             }
3023
3024           else if (code != COND_EXPR)
3025             abort ();
3026
3027           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3028           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
3029           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
3030           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3031               && op2 == TREE_OPERAND (exp, 2))
3032             return exp;
3033
3034           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
3035           break;
3036
3037         default:
3038           abort ();
3039         }
3040
3041       break;
3042
3043     case 'r':
3044       switch (code)
3045         {
3046         case COMPONENT_REF:
3047           /* If this expression is getting a value from a PLACEHOLDER_EXPR
3048              and it is the right field, replace it with R.  */
3049           for (inner = TREE_OPERAND (exp, 0);
3050                TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
3051                inner = TREE_OPERAND (inner, 0))
3052             ;
3053           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
3054               && TREE_OPERAND (exp, 1) == f)
3055             return r;
3056
3057           /* If this expression hasn't been completed let, leave it 
3058              alone.  */
3059           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
3060               && TREE_TYPE (inner) == 0)
3061             return exp;
3062
3063           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3064           if (op0 == TREE_OPERAND (exp, 0))
3065             return exp;
3066
3067           new = fold (build (code, TREE_TYPE (exp), op0,
3068                              TREE_OPERAND (exp, 1)));
3069           break;
3070
3071         case BIT_FIELD_REF:
3072           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3073           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
3074           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
3075           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3076               && op2 == TREE_OPERAND (exp, 2))
3077             return exp;
3078
3079           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
3080           break;
3081
3082         case INDIRECT_REF:
3083         case BUFFER_REF:
3084           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3085           if (op0 == TREE_OPERAND (exp, 0))
3086             return exp;
3087
3088           new = fold (build1 (code, TREE_TYPE (exp), op0));
3089           break;
3090
3091         default:
3092           abort ();
3093         }
3094       break;
3095       
3096     default:
3097       abort ();
3098     }
3099
3100   TREE_READONLY (new) = TREE_READONLY (exp);
3101   return new;
3102 }
3103 \f
3104 /* Stabilize a reference so that we can use it any number of times
3105    without causing its operands to be evaluated more than once.
3106    Returns the stabilized reference.  This works by means of save_expr,
3107    so see the caveats in the comments about save_expr.
3108
3109    Also allows conversion expressions whose operands are references.
3110    Any other kind of expression is returned unchanged.  */
3111
3112 tree
3113 stabilize_reference (ref)
3114      tree ref;
3115 {
3116   register tree result;
3117   register enum tree_code code = TREE_CODE (ref);
3118
3119   switch (code)
3120     {
3121     case VAR_DECL:
3122     case PARM_DECL:
3123     case RESULT_DECL:
3124       /* No action is needed in this case.  */
3125       return ref;
3126
3127     case NOP_EXPR:
3128     case CONVERT_EXPR:
3129     case FLOAT_EXPR:
3130     case FIX_TRUNC_EXPR:
3131     case FIX_FLOOR_EXPR:
3132     case FIX_ROUND_EXPR:
3133     case FIX_CEIL_EXPR:
3134       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
3135       break;
3136
3137     case INDIRECT_REF:
3138       result = build_nt (INDIRECT_REF,
3139                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
3140       break;
3141
3142     case COMPONENT_REF:
3143       result = build_nt (COMPONENT_REF,
3144                          stabilize_reference (TREE_OPERAND (ref, 0)),
3145                          TREE_OPERAND (ref, 1));
3146       break;
3147
3148     case BIT_FIELD_REF:
3149       result = build_nt (BIT_FIELD_REF,
3150                          stabilize_reference (TREE_OPERAND (ref, 0)),
3151                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3152                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
3153       break;
3154
3155     case ARRAY_REF:
3156       result = build_nt (ARRAY_REF,
3157                          stabilize_reference (TREE_OPERAND (ref, 0)),
3158                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
3159       break;
3160
3161     case COMPOUND_EXPR:
3162       /* We cannot wrap the first expression in a SAVE_EXPR, as then
3163          it wouldn't be ignored.  This matters when dealing with
3164          volatiles.  */
3165       return stabilize_reference_1 (ref);
3166
3167     case RTL_EXPR:
3168       result = build1 (INDIRECT_REF, TREE_TYPE (ref),
3169                        save_expr (build1 (ADDR_EXPR,
3170                                           build_pointer_type (TREE_TYPE (ref)),
3171                                           ref)));
3172       break;
3173
3174
3175       /* If arg isn't a kind of lvalue we recognize, make no change.
3176          Caller should recognize the error for an invalid lvalue.  */
3177     default:
3178       return ref;
3179
3180     case ERROR_MARK:
3181       return error_mark_node;
3182     }
3183
3184   TREE_TYPE (result) = TREE_TYPE (ref);
3185   TREE_READONLY (result) = TREE_READONLY (ref);
3186   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
3187   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
3188
3189   return result;
3190 }
3191
3192 /* Subroutine of stabilize_reference; this is called for subtrees of
3193    references.  Any expression with side-effects must be put in a SAVE_EXPR
3194    to ensure that it is only evaluated once.
3195
3196    We don't put SAVE_EXPR nodes around everything, because assigning very
3197    simple expressions to temporaries causes us to miss good opportunities
3198    for optimizations.  Among other things, the opportunity to fold in the
3199    addition of a constant into an addressing mode often gets lost, e.g.
3200    "y[i+1] += x;".  In general, we take the approach that we should not make
3201    an assignment unless we are forced into it - i.e., that any non-side effect
3202    operator should be allowed, and that cse should take care of coalescing
3203    multiple utterances of the same expression should that prove fruitful.  */
3204
3205 tree
3206 stabilize_reference_1 (e)
3207      tree e;
3208 {
3209   register tree result;
3210   register enum tree_code code = TREE_CODE (e);
3211
3212   /* We cannot ignore const expressions because it might be a reference
3213      to a const array but whose index contains side-effects.  But we can
3214      ignore things that are actual constant or that already have been
3215      handled by this function.  */
3216
3217   if (TREE_CONSTANT (e) || code == SAVE_EXPR)
3218     return e;
3219
3220   switch (TREE_CODE_CLASS (code))
3221     {
3222     case 'x':
3223     case 't':
3224     case 'd':
3225     case 'b':
3226     case '<':
3227     case 's':
3228     case 'e':
3229     case 'r':
3230       /* If the expression has side-effects, then encase it in a SAVE_EXPR
3231          so that it will only be evaluated once.  */
3232       /* The reference (r) and comparison (<) classes could be handled as
3233          below, but it is generally faster to only evaluate them once.  */
3234       if (TREE_SIDE_EFFECTS (e))
3235         return save_expr (e);
3236       return e;
3237
3238     case 'c':
3239       /* Constants need no processing.  In fact, we should never reach
3240          here.  */
3241       return e;
3242       
3243     case '2':
3244       /* Division is slow and tends to be compiled with jumps,
3245          especially the division by powers of 2 that is often
3246          found inside of an array reference.  So do it just once.  */
3247       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
3248           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3249           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3250           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3251         return save_expr (e);
3252       /* Recursively stabilize each operand.  */
3253       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3254                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
3255       break;
3256
3257     case '1':
3258       /* Recursively stabilize each operand.  */
3259       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3260       break;
3261
3262     default:
3263       abort ();
3264     }
3265   
3266   TREE_TYPE (result) = TREE_TYPE (e);
3267   TREE_READONLY (result) = TREE_READONLY (e);
3268   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3269   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3270
3271   return result;
3272 }
3273 \f
3274 /* Low-level constructors for expressions.  */
3275
3276 /* Build an expression of code CODE, data type TYPE,
3277    and operands as specified by the arguments ARG1 and following arguments.
3278    Expressions and reference nodes can be created this way.
3279    Constants, decls, types and misc nodes cannot be.  */
3280
3281 tree
3282 build VPARAMS ((enum tree_code code, tree tt, ...))
3283 {
3284 #ifndef ANSI_PROTOTYPES
3285   enum tree_code code;
3286   tree tt;
3287 #endif
3288   va_list p;
3289   register tree t;
3290   register int length;
3291   register int i;
3292   int fro;
3293
3294   VA_START (p, tt);
3295
3296 #ifndef ANSI_PROTOTYPES
3297   code = va_arg (p, enum tree_code);
3298   tt = va_arg (p, tree);
3299 #endif
3300
3301   t = make_node (code);
3302   length = tree_code_length[(int) code];
3303   TREE_TYPE (t) = tt;
3304
3305   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_RAISED for
3306      the result based on those same flags for the arguments.  But, if
3307      the arguments aren't really even `tree' expressions, we shouldn't
3308      be trying to do this.  */
3309   fro = first_rtl_op (code);
3310
3311   if (length == 2)
3312     {
3313       /* This is equivalent to the loop below, but faster.  */
3314       register tree arg0 = va_arg (p, tree);
3315       register tree arg1 = va_arg (p, tree);
3316       TREE_OPERAND (t, 0) = arg0;
3317       TREE_OPERAND (t, 1) = arg1;
3318       if (arg0 && fro > 0)
3319         {
3320           if (TREE_SIDE_EFFECTS (arg0))
3321             TREE_SIDE_EFFECTS (t) = 1;
3322         }
3323       if (arg1 && fro > 1)
3324         {
3325           if (TREE_SIDE_EFFECTS (arg1))
3326             TREE_SIDE_EFFECTS (t) = 1;
3327         }
3328     }
3329   else if (length == 1)
3330     {
3331       register tree arg0 = va_arg (p, tree);
3332
3333       /* Call build1 for this!  */
3334       if (TREE_CODE_CLASS (code) != 's')
3335         abort ();
3336       TREE_OPERAND (t, 0) = arg0;
3337       if (fro > 0)
3338         {
3339           if (arg0 && TREE_SIDE_EFFECTS (arg0))
3340             TREE_SIDE_EFFECTS (t) = 1;
3341         }
3342     }
3343   else
3344     {
3345       for (i = 0; i < length; i++)
3346         {
3347           register tree operand = va_arg (p, tree);
3348           TREE_OPERAND (t, i) = operand;
3349           if (operand && fro > i)
3350             {
3351               if (TREE_SIDE_EFFECTS (operand))
3352                 TREE_SIDE_EFFECTS (t) = 1;
3353             }
3354         }
3355     }
3356   va_end (p);
3357   return t;
3358 }
3359
3360 /* Same as above, but only builds for unary operators.
3361    Saves lions share of calls to `build'; cuts down use
3362    of varargs, which is expensive for RISC machines.  */
3363
3364 tree
3365 build1 (code, type, node)
3366      enum tree_code code;
3367      tree type;
3368      tree node;
3369 {
3370   register struct obstack *obstack = expression_obstack;
3371   register int length;
3372 #ifdef GATHER_STATISTICS
3373   register tree_node_kind kind;
3374 #endif
3375   register tree t;
3376
3377 #ifdef GATHER_STATISTICS
3378   if (TREE_CODE_CLASS (code) == 'r')
3379     kind = r_kind;
3380   else
3381     kind = e_kind;
3382 #endif
3383
3384   length = sizeof (struct tree_exp);
3385
3386   if (ggc_p)
3387     t = ggc_alloc_tree (length);
3388   else
3389     {
3390       t = (tree) obstack_alloc (obstack, length);
3391       memset ((PTR) t, 0, length);
3392     }
3393
3394 #ifdef GATHER_STATISTICS
3395   tree_node_counts[(int)kind]++;
3396   tree_node_sizes[(int)kind] += length;
3397 #endif
3398
3399   TREE_TYPE (t) = type;
3400   TREE_SET_CODE (t, code);
3401   TREE_SET_PERMANENT (t);
3402
3403   TREE_OPERAND (t, 0) = node;
3404   if (node && first_rtl_op (code) != 0 && TREE_SIDE_EFFECTS (node))
3405     TREE_SIDE_EFFECTS (t) = 1;
3406
3407   switch (code)
3408     {
3409     case INIT_EXPR:
3410     case MODIFY_EXPR:
3411     case VA_ARG_EXPR:
3412     case RTL_EXPR:
3413     case PREDECREMENT_EXPR:
3414     case PREINCREMENT_EXPR:
3415     case POSTDECREMENT_EXPR:
3416     case POSTINCREMENT_EXPR:
3417       /* All of these have side-effects, no matter what their
3418          operands are.  */
3419       TREE_SIDE_EFFECTS (t) = 1;
3420       break;
3421           
3422     default:
3423       break;
3424     }
3425
3426   return t;
3427 }
3428
3429 /* Similar except don't specify the TREE_TYPE
3430    and leave the TREE_SIDE_EFFECTS as 0.
3431    It is permissible for arguments to be null,
3432    or even garbage if their values do not matter.  */
3433
3434 tree
3435 build_nt VPARAMS ((enum tree_code code, ...))
3436 {
3437 #ifndef ANSI_PROTOTYPES
3438   enum tree_code code;
3439 #endif
3440   va_list p;
3441   register tree t;
3442   register int length;
3443   register int i;
3444
3445   VA_START (p, code);
3446
3447 #ifndef ANSI_PROTOTYPES
3448   code = va_arg (p, enum tree_code);
3449 #endif
3450
3451   t = make_node (code);
3452   length = tree_code_length[(int) code];
3453
3454   for (i = 0; i < length; i++)
3455     TREE_OPERAND (t, i) = va_arg (p, tree);
3456
3457   va_end (p);
3458   return t;
3459 }
3460
3461 /* Similar to `build_nt', except we build
3462    on the temp_decl_obstack, regardless.  */
3463
3464 tree
3465 build_parse_node VPARAMS ((enum tree_code code, ...))
3466 {
3467 #ifndef ANSI_PROTOTYPES
3468   enum tree_code code;
3469 #endif
3470   register struct obstack *ambient_obstack = expression_obstack;
3471   va_list p;
3472   register tree t;
3473   register int length;
3474   register int i;
3475
3476   VA_START (p, code);
3477
3478 #ifndef ANSI_PROTOTYPES
3479   code = va_arg (p, enum tree_code);
3480 #endif
3481
3482   expression_obstack = &temp_decl_obstack;
3483
3484   t = make_node (code);
3485   length = tree_code_length[(int) code];
3486
3487   for (i = 0; i < length; i++)
3488     TREE_OPERAND (t, i) = va_arg (p, tree);
3489
3490   va_end (p);
3491   expression_obstack = ambient_obstack;
3492   return t;
3493 }
3494
3495 #if 0
3496 /* Commented out because this wants to be done very
3497    differently.  See cp-lex.c.  */
3498 tree
3499 build_op_identifier (op1, op2)
3500      tree op1, op2;
3501 {
3502   register tree t = make_node (OP_IDENTIFIER);
3503   TREE_PURPOSE (t) = op1;
3504   TREE_VALUE (t) = op2;
3505   return t;
3506 }
3507 #endif
3508 \f
3509 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3510    We do NOT enter this node in any sort of symbol table.
3511
3512    layout_decl is used to set up the decl's storage layout.
3513    Other slots are initialized to 0 or null pointers.  */
3514
3515 tree
3516 build_decl (code, name, type)
3517      enum tree_code code;
3518      tree name, type;
3519 {
3520   register tree t;
3521
3522   t = make_node (code);
3523
3524 /*  if (type == error_mark_node)
3525     type = integer_type_node; */
3526 /* That is not done, deliberately, so that having error_mark_node
3527    as the type can suppress useless errors in the use of this variable.  */
3528
3529   DECL_NAME (t) = name;
3530   DECL_ASSEMBLER_NAME (t) = name;
3531   TREE_TYPE (t) = type;
3532
3533   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3534     layout_decl (t, 0);
3535   else if (code == FUNCTION_DECL)
3536     DECL_MODE (t) = FUNCTION_MODE;
3537
3538   return t;
3539 }
3540 \f
3541 /* BLOCK nodes are used to represent the structure of binding contours
3542    and declarations, once those contours have been exited and their contents
3543    compiled.  This information is used for outputting debugging info.  */
3544
3545 tree
3546 build_block (vars, tags, subblocks, supercontext, chain)
3547      tree vars, tags ATTRIBUTE_UNUSED, subblocks, supercontext, chain;
3548 {
3549   register tree block = make_node (BLOCK);
3550
3551   BLOCK_VARS (block) = vars;
3552   BLOCK_SUBBLOCKS (block) = subblocks;
3553   BLOCK_SUPERCONTEXT (block) = supercontext;
3554   BLOCK_CHAIN (block) = chain;
3555   return block;
3556 }
3557
3558 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
3559    location where an expression or an identifier were encountered. It
3560    is necessary for languages where the frontend parser will handle
3561    recursively more than one file (Java is one of them).  */
3562
3563 tree
3564 build_expr_wfl (node, file, line, col)
3565      tree node;
3566      const char *file;
3567      int line, col;
3568 {
3569   static const char *last_file = 0;
3570   static tree last_filenode = NULL_TREE;
3571   register tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
3572
3573   EXPR_WFL_NODE (wfl) = node;
3574   EXPR_WFL_SET_LINECOL (wfl, line, col);
3575   if (file != last_file)
3576     {
3577       last_file = file;
3578       last_filenode = file ? get_identifier (file) : NULL_TREE;
3579     }
3580
3581   EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
3582   if (node)
3583     {
3584       TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
3585       TREE_TYPE (wfl) = TREE_TYPE (node);
3586     }
3587
3588   return wfl;
3589 }
3590 \f
3591 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
3592    is ATTRIBUTE.  */
3593
3594 tree
3595 build_decl_attribute_variant (ddecl, attribute)
3596      tree ddecl, attribute;
3597 {
3598   DECL_MACHINE_ATTRIBUTES (ddecl) = attribute;
3599   return ddecl;
3600 }
3601
3602 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3603    is ATTRIBUTE.
3604
3605    Record such modified types already made so we don't make duplicates.  */
3606
3607 tree
3608 build_type_attribute_variant (ttype, attribute)
3609      tree ttype, attribute;
3610 {
3611   if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3612     {
3613       unsigned int hashcode;
3614       tree ntype;
3615
3616       push_obstacks (TYPE_OBSTACK (ttype), TYPE_OBSTACK (ttype));
3617       ntype = copy_node (ttype);
3618
3619       TYPE_POINTER_TO (ntype) = 0;
3620       TYPE_REFERENCE_TO (ntype) = 0;
3621       TYPE_ATTRIBUTES (ntype) = attribute;
3622
3623       /* Create a new main variant of TYPE.  */
3624       TYPE_MAIN_VARIANT (ntype) = ntype;
3625       TYPE_NEXT_VARIANT (ntype) = 0;
3626       set_type_quals (ntype, TYPE_UNQUALIFIED);
3627
3628       hashcode = (TYPE_HASH (TREE_CODE (ntype))
3629                   + TYPE_HASH (TREE_TYPE (ntype))
3630                   + attribute_hash_list (attribute));
3631
3632       switch (TREE_CODE (ntype))
3633         {
3634         case FUNCTION_TYPE:
3635           hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
3636           break;
3637         case ARRAY_TYPE:
3638           hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
3639           break;
3640         case INTEGER_TYPE:
3641           hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
3642           break;
3643         case REAL_TYPE:
3644           hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
3645           break;
3646         default:
3647           break;
3648         }
3649
3650       ntype = type_hash_canon (hashcode, ntype);
3651       ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3652       pop_obstacks ();
3653     }
3654
3655   return ttype;
3656 }
3657
3658 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
3659    or type TYPE and 0 otherwise.  Validity is determined the configuration
3660    macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE.  */
3661
3662 int
3663 valid_machine_attribute (attr_name, attr_args, decl, type)
3664   tree attr_name;
3665   tree attr_args ATTRIBUTE_UNUSED;
3666   tree decl ATTRIBUTE_UNUSED;
3667   tree type ATTRIBUTE_UNUSED;
3668 {
3669   int validated = 0;
3670 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3671   tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0;
3672 #endif
3673 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3674   tree type_attr_list = TYPE_ATTRIBUTES (type);
3675 #endif
3676
3677   if (TREE_CODE (attr_name) != IDENTIFIER_NODE)
3678     abort ();
3679
3680 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3681   if (decl != 0
3682       && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name,
3683                                        attr_args))
3684     {
3685       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3686                                     decl_attr_list);
3687
3688       if (attr != NULL_TREE)
3689         {
3690           /* Override existing arguments.  Declarations are unique so we can
3691              modify this in place.  */
3692           TREE_VALUE (attr) = attr_args;
3693         }
3694       else
3695         {
3696           decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list);
3697           decl = build_decl_attribute_variant (decl, decl_attr_list);
3698         }
3699
3700       validated = 1;
3701     }
3702 #endif
3703
3704 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3705   if (validated)
3706     /* Don't apply the attribute to both the decl and the type.  */;
3707   else if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name,
3708                                          attr_args))
3709     {
3710       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3711                                     type_attr_list);
3712
3713       if (attr != NULL_TREE)
3714         {
3715           /* Override existing arguments.
3716              ??? This currently works since attribute arguments are not
3717              included in `attribute_hash_list'.  Something more complicated
3718              may be needed in the future.  */
3719           TREE_VALUE (attr) = attr_args;
3720         }
3721       else
3722         {
3723           /* If this is part of a declaration, create a type variant,
3724              otherwise, this is part of a type definition, so add it 
3725              to the base type.  */
3726           type_attr_list = tree_cons (attr_name, attr_args, type_attr_list);
3727           if (decl != 0)
3728             type = build_type_attribute_variant (type, type_attr_list);
3729           else
3730             TYPE_ATTRIBUTES (type) = type_attr_list;
3731         }
3732
3733       if (decl != 0)
3734         TREE_TYPE (decl) = type;
3735
3736       validated = 1;
3737     }
3738
3739   /* Handle putting a type attribute on pointer-to-function-type by putting
3740      the attribute on the function type.  */
3741   else if (POINTER_TYPE_P (type)
3742            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3743            && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
3744                                             attr_name, attr_args))
3745     {
3746       tree inner_type = TREE_TYPE (type);
3747       tree inner_attr_list = TYPE_ATTRIBUTES (inner_type);
3748       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3749                                     type_attr_list);
3750
3751       if (attr != NULL_TREE)
3752         TREE_VALUE (attr) = attr_args;
3753       else
3754         {
3755           inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list);
3756           inner_type = build_type_attribute_variant (inner_type,
3757                                                      inner_attr_list);
3758         }
3759
3760       if (decl != 0)
3761         TREE_TYPE (decl) = build_pointer_type (inner_type);
3762       else
3763         {
3764           /* Clear TYPE_POINTER_TO for the old inner type, since
3765              `type' won't be pointing to it anymore.  */
3766           TYPE_POINTER_TO (TREE_TYPE (type)) = NULL_TREE;
3767           TREE_TYPE (type) = inner_type;
3768         }
3769
3770       validated = 1;
3771     }
3772 #endif
3773
3774   return validated;
3775 }
3776
3777 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3778    or zero if not.
3779
3780    We try both `text' and `__text__', ATTR may be either one.  */
3781 /* ??? It might be a reasonable simplification to require ATTR to be only
3782    `text'.  One might then also require attribute lists to be stored in
3783    their canonicalized form.  */
3784
3785 int
3786 is_attribute_p (attr, ident)
3787      const char *attr;
3788      tree ident;
3789 {
3790   int ident_len, attr_len;
3791   char *p;
3792
3793   if (TREE_CODE (ident) != IDENTIFIER_NODE)
3794     return 0;
3795
3796   if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3797     return 1;
3798
3799   p = IDENTIFIER_POINTER (ident);
3800   ident_len = strlen (p);
3801   attr_len = strlen (attr);
3802
3803   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3804   if (attr[0] == '_')
3805     {
3806       if (attr[1] != '_'
3807           || attr[attr_len - 2] != '_'
3808           || attr[attr_len - 1] != '_')
3809         abort ();
3810       if (ident_len == attr_len - 4
3811           && strncmp (attr + 2, p, attr_len - 4) == 0)
3812         return 1;
3813     }
3814   else
3815     {
3816       if (ident_len == attr_len + 4
3817           && p[0] == '_' && p[1] == '_'
3818           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3819           && strncmp (attr, p + 2, attr_len) == 0)
3820         return 1;
3821     }
3822
3823   return 0;
3824 }
3825
3826 /* Given an attribute name and a list of attributes, return a pointer to the
3827    attribute's list element if the attribute is part of the list, or NULL_TREE
3828    if not found.  */
3829
3830 tree
3831 lookup_attribute (attr_name, list)
3832      const char *attr_name;
3833      tree list;
3834 {
3835   tree l;
3836
3837   for (l = list; l; l = TREE_CHAIN (l))
3838     {
3839       if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
3840         abort ();
3841       if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3842         return l;
3843     }
3844
3845   return NULL_TREE;
3846 }
3847
3848 /* Return an attribute list that is the union of a1 and a2.  */
3849
3850 tree
3851 merge_attributes (a1, a2)
3852      register tree a1, a2;
3853 {
3854   tree attributes;
3855
3856   /* Either one unset?  Take the set one.  */
3857
3858   if ((attributes = a1) == 0)
3859     attributes = a2;
3860
3861   /* One that completely contains the other?  Take it.  */
3862
3863   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3864   {
3865     if (attribute_list_contained (a2, a1))
3866       attributes = a2;
3867     else
3868       {
3869         /* Pick the longest list, and hang on the other list.  */
3870         /* ??? For the moment we punt on the issue of attrs with args.  */
3871
3872         if (list_length (a1) < list_length (a2))
3873           attributes = a2, a2 = a1;
3874
3875         for (; a2 != 0; a2 = TREE_CHAIN (a2))
3876           if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3877                                 attributes) == NULL_TREE)
3878             {
3879               a1 = copy_node (a2);
3880               TREE_CHAIN (a1) = attributes;
3881               attributes = a1;
3882             }
3883       }
3884   }
3885   return attributes;
3886 }
3887
3888 /* Given types T1 and T2, merge their attributes and return
3889    the result.  */
3890
3891 tree
3892 merge_machine_type_attributes (t1, t2)
3893      tree t1, t2;
3894 {
3895 #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES
3896   return MERGE_MACHINE_TYPE_ATTRIBUTES (t1, t2);
3897 #else
3898   return merge_attributes (TYPE_ATTRIBUTES (t1),
3899                            TYPE_ATTRIBUTES (t2));
3900 #endif
3901 }
3902
3903 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3904    the result.  */
3905
3906 tree
3907 merge_machine_decl_attributes (olddecl, newdecl)
3908      tree olddecl, newdecl;
3909 {
3910 #ifdef MERGE_MACHINE_DECL_ATTRIBUTES
3911   return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl, newdecl);
3912 #else
3913   return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl),
3914                            DECL_MACHINE_ATTRIBUTES (newdecl));
3915 #endif
3916 }
3917 \f
3918 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3919    of the various TYPE_QUAL values.  */
3920
3921 static void
3922 set_type_quals (type, type_quals)
3923      tree type;
3924      int  type_quals;
3925 {
3926   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3927   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3928   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3929 }
3930
3931 /* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
3932    the same kind of data as TYPE describes.  Variants point to the
3933    "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
3934    and it points to a chain of other variants so that duplicate
3935    variants are never made.  Only main variants should ever appear as
3936    types of expressions.  */
3937
3938 tree
3939 build_qualified_type (type, type_quals)
3940      tree type;
3941      int type_quals;
3942 {
3943   register tree t;
3944   
3945   /* Search the chain of variants to see if there is already one there just
3946      like the one we need to have.  If so, use that existing one.  We must
3947      preserve the TYPE_NAME, since there is code that depends on this.  */
3948
3949   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3950     if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type))
3951       return t;
3952
3953   /* We need a new one.  */
3954   t = build_type_copy (type);
3955   set_type_quals (t, type_quals);
3956   return t;
3957 }
3958
3959 /* Create a new variant of TYPE, equivalent but distinct.
3960    This is so the caller can modify it.  */
3961
3962 tree
3963 build_type_copy (type)
3964      tree type;
3965 {
3966   register tree t, m = TYPE_MAIN_VARIANT (type);
3967   register struct obstack *ambient_obstack = current_obstack;
3968
3969   current_obstack = TYPE_OBSTACK (type);
3970   t = copy_node (type);
3971   current_obstack = ambient_obstack;
3972
3973   TYPE_POINTER_TO (t) = 0;
3974   TYPE_REFERENCE_TO (t) = 0;
3975
3976   /* Add this type to the chain of variants of TYPE.  */
3977   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3978   TYPE_NEXT_VARIANT (m) = t;
3979
3980   return t;
3981 }
3982 \f
3983 /* Hashing of types so that we don't make duplicates.
3984    The entry point is `type_hash_canon'.  */
3985
3986 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3987    with types in the TREE_VALUE slots), by adding the hash codes
3988    of the individual types.  */
3989
3990 unsigned int
3991 type_hash_list (list)
3992      tree list;
3993 {
3994   unsigned int hashcode;
3995   register tree tail;
3996
3997   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3998     hashcode += TYPE_HASH (TREE_VALUE (tail));
3999
4000   return hashcode;
4001 }
4002
4003 /* These are the Hashtable callback functions.  */
4004
4005 /* Returns true if the types are equal.  */
4006
4007 static int
4008 type_hash_eq (va, vb)
4009      const void *va;
4010      const void *vb;
4011 {
4012   const struct type_hash *a = va, *b = vb;
4013   if (a->hash == b->hash
4014       && TREE_CODE (a->type) == TREE_CODE (b->type)
4015       && TREE_TYPE (a->type) == TREE_TYPE (b->type)
4016       && attribute_list_equal (TYPE_ATTRIBUTES (a->type),
4017                                TYPE_ATTRIBUTES (b->type))
4018       && TYPE_ALIGN (a->type) == TYPE_ALIGN (b->type)
4019       && (TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
4020           || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
4021                                  TYPE_MAX_VALUE (b->type)))
4022       && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
4023           || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
4024                                  TYPE_MIN_VALUE (b->type)))
4025       /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE.  */
4026       && (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
4027           || (TYPE_DOMAIN (a->type)
4028               && TREE_CODE (TYPE_DOMAIN (a->type)) == TREE_LIST
4029               && TYPE_DOMAIN (b->type)
4030               && TREE_CODE (TYPE_DOMAIN (b->type)) == TREE_LIST
4031               && type_list_equal (TYPE_DOMAIN (a->type),
4032                                   TYPE_DOMAIN (b->type)))))
4033     return 1;
4034   return 0;
4035 }
4036
4037 /* Return the cached hash value.  */
4038
4039 static unsigned int
4040 type_hash_hash (item)
4041      const void *item;
4042 {
4043   return ((const struct type_hash*)item)->hash;
4044 }
4045
4046 /* Look in the type hash table for a type isomorphic to TYPE.
4047    If one is found, return it.  Otherwise return 0.  */
4048
4049 tree
4050 type_hash_lookup (hashcode, type)
4051      unsigned int hashcode;
4052      tree type;
4053 {
4054   struct type_hash *h, in;
4055
4056   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4057      must call that routine before comparing TYPE_ALIGNs. */
4058   layout_type (type);
4059
4060   in.hash = hashcode;
4061   in.type = type;
4062
4063   h = htab_find_with_hash (type_hash_table, &in, hashcode);
4064   if (h)
4065     return h->type;
4066   return NULL_TREE;
4067 }
4068
4069 /* Add an entry to the type-hash-table
4070    for a type TYPE whose hash code is HASHCODE.  */
4071
4072 void
4073 type_hash_add (hashcode, type)
4074      unsigned int hashcode;
4075      tree type;
4076 {
4077   struct type_hash *h;
4078   void **loc;
4079
4080   h = (struct type_hash *) permalloc (sizeof (struct type_hash));
4081   h->hash = hashcode;
4082   h->type = type;
4083   loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
4084   *(struct type_hash**) loc = h;
4085 }
4086
4087 /* Given TYPE, and HASHCODE its hash code, return the canonical
4088    object for an identical type if one already exists.
4089    Otherwise, return TYPE, and record it as the canonical object
4090    if it is a permanent object.
4091
4092    To use this function, first create a type of the sort you want.
4093    Then compute its hash code from the fields of the type that
4094    make it different from other similar types.
4095    Then call this function and use the value.
4096    This function frees the type you pass in if it is a duplicate.  */
4097
4098 /* Set to 1 to debug without canonicalization.  Never set by program.  */
4099 int debug_no_type_hash = 0;
4100
4101 tree
4102 type_hash_canon (hashcode, type)
4103      unsigned int hashcode;
4104      tree type;
4105 {
4106   tree t1;
4107
4108   if (debug_no_type_hash)
4109     return type;
4110
4111   t1 = type_hash_lookup (hashcode, type);
4112   if (t1 != 0)
4113     {
4114       if (!ggc_p)
4115         obstack_free (TYPE_OBSTACK (type), type);
4116
4117 #ifdef GATHER_STATISTICS
4118       tree_node_counts[(int) t_kind]--;
4119       tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
4120 #endif
4121       return t1;
4122     }
4123
4124   /* If this is a permanent type, record it for later reuse.  */
4125   if (ggc_p || TREE_PERMANENT (type))
4126     type_hash_add (hashcode, type);
4127
4128   return type;
4129 }
4130
4131 /* Callback function for htab_traverse.  */
4132
4133 static int
4134 mark_hash_entry (entry, param)
4135      void **entry;
4136      void *param ATTRIBUTE_UNUSED;
4137 {
4138   struct type_hash *p = *(struct type_hash **)entry;
4139
4140   ggc_mark_tree (p->type);
4141
4142   /* Continue scan.  */
4143   return 1;
4144 }
4145
4146 /* Mark ARG (which is really a htab_t *) for GC.  */
4147
4148 static void
4149 mark_type_hash (arg)
4150      void *arg;
4151 {
4152   htab_t t = *(htab_t *) arg;
4153
4154   htab_traverse (t, mark_hash_entry, 0);
4155 }
4156
4157 static void
4158 print_type_hash_statistics ()
4159 {
4160   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
4161            (long) htab_size (type_hash_table),
4162            (long) htab_elements (type_hash_table),
4163            htab_collisions (type_hash_table));
4164 }
4165
4166 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
4167    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
4168    by adding the hash codes of the individual attributes.  */
4169
4170 unsigned int
4171 attribute_hash_list (list)
4172      tree list;
4173 {
4174   unsigned int hashcode;
4175   register tree tail;
4176
4177   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
4178     /* ??? Do we want to add in TREE_VALUE too? */
4179     hashcode += TYPE_HASH (TREE_PURPOSE (tail));
4180   return hashcode;
4181 }
4182
4183 /* Given two lists of attributes, return true if list l2 is
4184    equivalent to l1.  */
4185
4186 int
4187 attribute_list_equal (l1, l2)
4188      tree l1, l2;
4189 {
4190    return attribute_list_contained (l1, l2)
4191           && attribute_list_contained (l2, l1);
4192 }
4193
4194 /* Given two lists of attributes, return true if list L2 is
4195    completely contained within L1.  */
4196 /* ??? This would be faster if attribute names were stored in a canonicalized
4197    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
4198    must be used to show these elements are equivalent (which they are).  */
4199 /* ??? It's not clear that attributes with arguments will always be handled
4200    correctly.  */
4201
4202 int
4203 attribute_list_contained (l1, l2)
4204      tree l1, l2;
4205 {
4206   register tree t1, t2;
4207
4208   /* First check the obvious, maybe the lists are identical.  */
4209   if (l1 == l2)
4210      return 1;
4211
4212   /* Maybe the lists are similar.  */
4213   for (t1 = l1, t2 = l2;
4214        t1 != 0 && t2 != 0
4215         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
4216         && TREE_VALUE (t1) == TREE_VALUE (t2);
4217        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
4218
4219   /* Maybe the lists are equal.  */
4220   if (t1 == 0 && t2 == 0)
4221      return 1;
4222
4223   for (; t2 != 0; t2 = TREE_CHAIN (t2))
4224     {
4225       tree attr
4226         = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
4227
4228       if (attr == 0)
4229         return 0;
4230
4231       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
4232         return 0;
4233     }
4234
4235   return 1;
4236 }
4237
4238 /* Given two lists of types
4239    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
4240    return 1 if the lists contain the same types in the same order.
4241    Also, the TREE_PURPOSEs must match.  */
4242
4243 int
4244 type_list_equal (l1, l2)
4245      tree l1, l2;
4246 {
4247   register tree t1, t2;
4248
4249   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
4250     if (TREE_VALUE (t1) != TREE_VALUE (t2)
4251         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
4252             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
4253                   && (TREE_TYPE (TREE_PURPOSE (t1))
4254                       == TREE_TYPE (TREE_PURPOSE (t2))))))
4255       return 0;
4256
4257   return t1 == t2;
4258 }
4259
4260 /* Nonzero if integer constants T1 and T2
4261    represent the same constant value.  */
4262
4263 int
4264 tree_int_cst_equal (t1, t2)
4265      tree t1, t2;
4266 {
4267   if (t1 == t2)
4268     return 1;
4269
4270   if (t1 == 0 || t2 == 0)
4271     return 0;
4272
4273   if (TREE_CODE (t1) == INTEGER_CST
4274       && TREE_CODE (t2) == INTEGER_CST
4275       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4276       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
4277     return 1;
4278
4279   return 0;
4280 }
4281
4282 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4283    The precise way of comparison depends on their data type.  */
4284
4285 int
4286 tree_int_cst_lt (t1, t2)
4287      tree t1, t2;
4288 {
4289   if (t1 == t2)
4290     return 0;
4291
4292   if (! TREE_UNSIGNED (TREE_TYPE (t1)))
4293     return INT_CST_LT (t1, t2);
4294
4295   return INT_CST_LT_UNSIGNED (t1, t2);
4296 }
4297
4298 /* Return 1 if T is an INTEGER_CST that can be represented in a single
4299    HOST_WIDE_INT value.  If POS is nonzero, the result must be positive.  */
4300
4301 int
4302 host_integerp (t, pos)
4303      tree t;
4304      int pos;
4305 {
4306   return (TREE_CODE (t) == INTEGER_CST
4307           && ! TREE_OVERFLOW (t)
4308           && ((TREE_INT_CST_HIGH (t) == 0
4309                && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
4310               || (! pos && TREE_INT_CST_HIGH (t) == -1
4311                   && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)));
4312 }
4313
4314 /* Return the HOST_WIDE_INT least significant bits of T if it is an
4315    INTEGER_CST and there is no overflow.  POS is nonzero if the result must
4316    be positive.  Abort if we cannot satisfy the above conditions.  */
4317
4318 HOST_WIDE_INT
4319 tree_low_cst (t, pos)
4320      tree t;
4321      int pos;
4322 {
4323   if (host_integerp (t, pos))
4324     return TREE_INT_CST_LOW (t);
4325   else
4326     abort ();
4327 }  
4328
4329 /* Return the most significant bit of the integer constant T.  */
4330
4331 int
4332 tree_int_cst_msb (t)
4333      tree t;
4334 {
4335   register int prec;
4336   HOST_WIDE_INT h;
4337   HOST_WIDE_INT l;
4338
4339   /* Note that using TYPE_PRECISION here is wrong.  We care about the
4340      actual bits, not the (arbitrary) range of the type.  */
4341   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
4342   rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
4343                  2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
4344   return (l & 1) == 1;
4345   }
4346
4347 /* Return an indication of the sign of the integer constant T.
4348    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4349    Note that -1 will never be returned it T's type is unsigned.  */
4350
4351 int
4352 tree_int_cst_sgn (t)
4353      tree t;
4354 {
4355   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4356     return 0;
4357   else if (TREE_UNSIGNED (TREE_TYPE (t)))
4358     return 1;
4359   else if (TREE_INT_CST_HIGH (t) < 0)
4360     return -1;
4361   else
4362     return 1;
4363 }
4364
4365 /* Return true if `t' is known to be non-negative.  */
4366
4367 int
4368 tree_expr_nonnegative_p (t)
4369      tree t;
4370 {
4371   switch (TREE_CODE (t))
4372     {
4373     case INTEGER_CST:
4374       return tree_int_cst_sgn (t) >= 0;
4375     case COND_EXPR:
4376       return tree_expr_nonnegative_p (TREE_OPERAND (t, 1))
4377         && tree_expr_nonnegative_p (TREE_OPERAND (t, 2));
4378     default:
4379       /* We don't know sign of `t', so be safe and return false.  */
4380       return 0;
4381     }
4382 }
4383
4384 /* Compare two constructor-element-type constants.  Return 1 if the lists
4385    are known to be equal; otherwise return 0.  */
4386
4387 int
4388 simple_cst_list_equal (l1, l2)
4389      tree l1, l2;
4390 {
4391   while (l1 != NULL_TREE && l2 != NULL_TREE)
4392     {
4393       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4394         return 0;
4395
4396       l1 = TREE_CHAIN (l1);
4397       l2 = TREE_CHAIN (l2);
4398     }
4399
4400   return l1 == l2;
4401 }
4402
4403 /* Return truthvalue of whether T1 is the same tree structure as T2.
4404    Return 1 if they are the same.
4405    Return 0 if they are understandably different.
4406    Return -1 if either contains tree structure not understood by
4407    this function.  */
4408
4409 int
4410 simple_cst_equal (t1, t2)
4411      tree t1, t2;
4412 {
4413   register enum tree_code code1, code2;
4414   int cmp;
4415   int i;
4416
4417   if (t1 == t2)
4418     return 1;
4419   if (t1 == 0 || t2 == 0)
4420     return 0;
4421
4422   code1 = TREE_CODE (t1);
4423   code2 = TREE_CODE (t2);
4424
4425   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4426     {
4427       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4428           || code2 == NON_LVALUE_EXPR)
4429         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4430       else
4431         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4432     }
4433
4434   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4435            || code2 == NON_LVALUE_EXPR)
4436     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4437
4438   if (code1 != code2)
4439     return 0;
4440
4441   switch (code1)
4442     {
4443     case INTEGER_CST:
4444       return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4445               && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4446
4447     case REAL_CST:
4448       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4449
4450     case STRING_CST:
4451       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4452               && ! bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4453                          TREE_STRING_LENGTH (t1)));
4454
4455     case CONSTRUCTOR:
4456       if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
4457         return 1;
4458       else
4459         abort ();
4460
4461     case SAVE_EXPR:
4462       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4463
4464     case CALL_EXPR:
4465       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4466       if (cmp <= 0)
4467         return cmp;
4468       return
4469         simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4470
4471     case TARGET_EXPR:
4472       /* Special case: if either target is an unallocated VAR_DECL,
4473          it means that it's going to be unified with whatever the
4474          TARGET_EXPR is really supposed to initialize, so treat it
4475          as being equivalent to anything.  */
4476       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4477            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4478            && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
4479           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4480               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4481               && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
4482         cmp = 1;
4483       else
4484         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4485
4486       if (cmp <= 0)
4487         return cmp;
4488
4489       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4490
4491     case WITH_CLEANUP_EXPR:
4492       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4493       if (cmp <= 0)
4494         return cmp;
4495
4496       return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
4497
4498     case COMPONENT_REF:
4499       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4500         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4501
4502       return 0;
4503
4504     case VAR_DECL:
4505     case PARM_DECL:
4506     case CONST_DECL:
4507     case FUNCTION_DECL:
4508       return 0;
4509       
4510     default:
4511       break;
4512     }
4513
4514   /* This general rule works for most tree codes.  All exceptions should be
4515      handled above.  If this is a language-specific tree code, we can't
4516      trust what might be in the operand, so say we don't know
4517      the situation.  */
4518   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4519     return -1;
4520
4521   switch (TREE_CODE_CLASS (code1))
4522     {
4523     case '1':
4524     case '2':
4525     case '<':
4526     case 'e':
4527     case 'r':
4528     case 's':
4529       cmp = 1;
4530       for (i = 0; i < tree_code_length[(int) code1]; i++)
4531         {
4532           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4533           if (cmp <= 0)
4534             return cmp;
4535         }
4536
4537       return cmp;
4538
4539     default:
4540       return -1;
4541     }
4542 }
4543
4544 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
4545    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
4546    than U, respectively.  */
4547
4548 int
4549 compare_tree_int (t, u)
4550      tree t;
4551      unsigned int u;
4552 {
4553   if (tree_int_cst_sgn (t) < 0)
4554     return -1;
4555   else if (TREE_INT_CST_HIGH (t) != 0)
4556     return 1;
4557   else if (TREE_INT_CST_LOW (t) == u)
4558     return 0;
4559   else if (TREE_INT_CST_LOW (t) < u)
4560     return -1;
4561   else
4562     return 1;
4563 }
4564 \f
4565 /* Constructors for pointer, array and function types.
4566    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4567    constructed by language-dependent code, not here.)  */
4568
4569 /* Construct, lay out and return the type of pointers to TO_TYPE.
4570    If such a type has already been constructed, reuse it.  */
4571
4572 tree
4573 build_pointer_type (to_type)
4574      tree to_type;
4575 {
4576   register tree t = TYPE_POINTER_TO (to_type);
4577
4578   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4579
4580   if (t != 0)
4581     return t;
4582
4583   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4584   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4585   t = make_node (POINTER_TYPE);
4586   pop_obstacks ();
4587
4588   TREE_TYPE (t) = to_type;
4589
4590   /* Record this type as the pointer to TO_TYPE.  */
4591   TYPE_POINTER_TO (to_type) = t;
4592
4593   /* Lay out the type.  This function has many callers that are concerned
4594      with expression-construction, and this simplifies them all.
4595      Also, it guarantees the TYPE_SIZE is in the same obstack as the type.  */
4596   layout_type (t);
4597
4598   return t;
4599 }
4600
4601 /* Build the node for the type of references-to-TO_TYPE.  */
4602
4603 tree
4604 build_reference_type (to_type)
4605      tree to_type;
4606 {
4607   register tree t = TYPE_REFERENCE_TO (to_type);
4608
4609   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4610
4611   if (t)
4612     return t;
4613
4614   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4615   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4616   t = make_node (REFERENCE_TYPE);
4617   pop_obstacks ();
4618
4619   TREE_TYPE (t) = to_type;
4620
4621   /* Record this type as the pointer to TO_TYPE.  */
4622   TYPE_REFERENCE_TO (to_type) = t;
4623
4624   layout_type (t);
4625
4626   return t;
4627 }
4628
4629 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4630    MAXVAL should be the maximum value in the domain
4631    (one less than the length of the array).
4632
4633    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4634    We don't enforce this limit, that is up to caller (e.g. language front end).
4635    The limit exists because the result is a signed type and we don't handle
4636    sizes that use more than one HOST_WIDE_INT.  */
4637
4638 tree
4639 build_index_type (maxval)
4640      tree maxval;
4641 {
4642   register tree itype = make_node (INTEGER_TYPE);
4643
4644   TREE_TYPE (itype) = sizetype;
4645   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4646   TYPE_MIN_VALUE (itype) = size_zero_node;
4647
4648   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4649   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
4650   pop_obstacks ();
4651
4652   TYPE_MODE (itype) = TYPE_MODE (sizetype);
4653   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4654   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4655   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4656
4657   if (host_integerp (maxval, 1))
4658     return type_hash_canon (tree_low_cst (maxval, 1), itype);
4659   else
4660     return itype;
4661 }
4662
4663 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4664    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4665    low bound LOWVAL and high bound HIGHVAL.
4666    if TYPE==NULL_TREE, sizetype is used.  */
4667
4668 tree
4669 build_range_type (type, lowval, highval)
4670      tree type, lowval, highval;
4671 {
4672   register tree itype = make_node (INTEGER_TYPE);
4673
4674   TREE_TYPE (itype) = type;
4675   if (type == NULL_TREE)
4676     type = sizetype;
4677
4678   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4679   TYPE_MIN_VALUE (itype) = convert (type, lowval);
4680   TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4681   pop_obstacks ();
4682
4683   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4684   TYPE_MODE (itype) = TYPE_MODE (type);
4685   TYPE_SIZE (itype) = TYPE_SIZE (type);
4686   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4687   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4688
4689   if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
4690     return type_hash_canon (tree_low_cst (highval, 0)
4691                             - tree_low_cst (lowval, 0),
4692                             itype);
4693   else
4694     return itype;
4695 }
4696
4697 /* Just like build_index_type, but takes lowval and highval instead
4698    of just highval (maxval).  */
4699
4700 tree
4701 build_index_2_type (lowval,highval)
4702      tree lowval, highval;
4703 {
4704   return build_range_type (sizetype, lowval, highval);
4705 }
4706
4707 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
4708    Needed because when index types are not hashed, equal index types
4709    built at different times appear distinct, even though structurally,
4710    they are not.  */
4711
4712 int
4713 index_type_equal (itype1, itype2)
4714      tree itype1, itype2;
4715 {
4716   if (TREE_CODE (itype1) != TREE_CODE (itype2))
4717     return 0;
4718
4719   if (TREE_CODE (itype1) == INTEGER_TYPE)
4720     {
4721       if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
4722           || TYPE_MODE (itype1) != TYPE_MODE (itype2)
4723           || simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2)) != 1
4724           || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
4725         return 0;
4726
4727       if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1),
4728                                  TYPE_MIN_VALUE (itype2))
4729           && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1),
4730                                     TYPE_MAX_VALUE (itype2)))
4731         return 1;
4732     }
4733
4734   return 0;
4735 }
4736
4737 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4738    and number of elements specified by the range of values of INDEX_TYPE.
4739    If such a type has already been constructed, reuse it.  */
4740
4741 tree
4742 build_array_type (elt_type, index_type)
4743      tree elt_type, index_type;
4744 {
4745   register tree t;
4746   unsigned int hashcode;
4747
4748   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4749     {
4750       error ("arrays of functions are not meaningful");
4751       elt_type = integer_type_node;
4752     }
4753
4754   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
4755   build_pointer_type (elt_type);
4756
4757   /* Allocate the array after the pointer type,
4758      in case we free it in type_hash_canon.  */
4759   t = make_node (ARRAY_TYPE);
4760   TREE_TYPE (t) = elt_type;
4761   TYPE_DOMAIN (t) = index_type;
4762
4763   if (index_type == 0)
4764     {
4765       return t;
4766     }
4767
4768   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
4769   t = type_hash_canon (hashcode, t);
4770
4771   if (!COMPLETE_TYPE_P (t))
4772     layout_type (t);
4773   return t;
4774 }
4775
4776 /* Return the TYPE of the elements comprising
4777    the innermost dimension of ARRAY.  */
4778
4779 tree
4780 get_inner_array_type (array)
4781     tree array;
4782 {
4783   tree type = TREE_TYPE (array);
4784
4785   while (TREE_CODE (type) == ARRAY_TYPE)
4786     type = TREE_TYPE (type);
4787
4788   return type;
4789 }
4790
4791 /* Construct, lay out and return
4792    the type of functions returning type VALUE_TYPE
4793    given arguments of types ARG_TYPES.
4794    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4795    are data type nodes for the arguments of the function.
4796    If such a type has already been constructed, reuse it.  */
4797
4798 tree
4799 build_function_type (value_type, arg_types)
4800      tree value_type, arg_types;
4801 {
4802   register tree t;
4803   unsigned int hashcode;
4804
4805   if (TREE_CODE (value_type) == FUNCTION_TYPE)
4806     {
4807       error ("function return type cannot be function");
4808       value_type = integer_type_node;
4809     }
4810
4811   /* Make a node of the sort we want.  */
4812   t = make_node (FUNCTION_TYPE);
4813   TREE_TYPE (t) = value_type;
4814   TYPE_ARG_TYPES (t) = arg_types;
4815
4816   /* If we already have such a type, use the old one and free this one.  */
4817   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
4818   t = type_hash_canon (hashcode, t);
4819
4820   if (!COMPLETE_TYPE_P (t))
4821     layout_type (t);
4822   return t;
4823 }
4824
4825 /* Construct, lay out and return the type of methods belonging to class
4826    BASETYPE and whose arguments and values are described by TYPE.
4827    If that type exists already, reuse it.
4828    TYPE must be a FUNCTION_TYPE node.  */
4829
4830 tree
4831 build_method_type (basetype, type)
4832      tree basetype, type;
4833 {
4834   register tree t;
4835   unsigned int hashcode;
4836
4837   /* Make a node of the sort we want.  */
4838   t = make_node (METHOD_TYPE);
4839
4840   if (TREE_CODE (type) != FUNCTION_TYPE)
4841     abort ();
4842
4843   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4844   TREE_TYPE (t) = TREE_TYPE (type);
4845
4846   /* The actual arglist for this function includes a "hidden" argument
4847      which is "this".  Put it into the list of argument types.  */
4848
4849   TYPE_ARG_TYPES (t)
4850     = tree_cons (NULL_TREE,
4851                  build_pointer_type (basetype), TYPE_ARG_TYPES (type));
4852
4853   /* If we already have such a type, use the old one and free this one.  */
4854   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4855   t = type_hash_canon (hashcode, t);
4856
4857   if (!COMPLETE_TYPE_P (t))
4858     layout_type (t);
4859
4860   return t;
4861 }
4862
4863 /* Construct, lay out and return the type of offsets to a value
4864    of type TYPE, within an object of type BASETYPE.
4865    If a suitable offset type exists already, reuse it.  */
4866
4867 tree
4868 build_offset_type (basetype, type)
4869      tree basetype, type;
4870 {
4871   register tree t;
4872   unsigned int hashcode;
4873
4874   /* Make a node of the sort we want.  */
4875   t = make_node (OFFSET_TYPE);
4876
4877   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4878   TREE_TYPE (t) = type;
4879
4880   /* If we already have such a type, use the old one and free this one.  */
4881   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4882   t = type_hash_canon (hashcode, t);
4883
4884   if (!COMPLETE_TYPE_P (t))
4885     layout_type (t);
4886
4887   return t;
4888 }
4889
4890 /* Create a complex type whose components are COMPONENT_TYPE.  */
4891
4892 tree
4893 build_complex_type (component_type)
4894      tree component_type;
4895 {
4896   register tree t;
4897   unsigned int hashcode;
4898
4899   /* Make a node of the sort we want.  */
4900   t = make_node (COMPLEX_TYPE);
4901
4902   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4903   set_type_quals (t, TYPE_QUALS (component_type));
4904
4905   /* If we already have such a type, use the old one and free this one.  */
4906   hashcode = TYPE_HASH (component_type);
4907   t = type_hash_canon (hashcode, t);
4908
4909   if (!COMPLETE_TYPE_P (t))
4910     layout_type (t);
4911
4912   /* If we are writing Dwarf2 output we need to create a name,
4913      since complex is a fundamental type.  */
4914   if (write_symbols == DWARF2_DEBUG && ! TYPE_NAME (t))
4915     {
4916       const char *name;
4917       if (component_type == char_type_node)
4918         name = "complex char";
4919       else if (component_type == signed_char_type_node)
4920         name = "complex signed char";
4921       else if (component_type == unsigned_char_type_node)
4922         name = "complex unsigned char";
4923       else if (component_type == short_integer_type_node)
4924         name = "complex short int";
4925       else if (component_type == short_unsigned_type_node)
4926         name = "complex short unsigned int";
4927       else if (component_type == integer_type_node)
4928         name = "complex int";
4929       else if (component_type == unsigned_type_node)
4930         name = "complex unsigned int";
4931       else if (component_type == long_integer_type_node)
4932         name = "complex long int";
4933       else if (component_type == long_unsigned_type_node)
4934         name = "complex long unsigned int";
4935       else if (component_type == long_long_integer_type_node)
4936         name = "complex long long int";
4937       else if (component_type == long_long_unsigned_type_node)
4938         name = "complex long long unsigned int";
4939       else
4940         name = 0;
4941
4942       if (name != 0)
4943         TYPE_NAME (t) = get_identifier (name);
4944     }
4945
4946   return t;
4947 }
4948 \f
4949 /* Return OP, stripped of any conversions to wider types as much as is safe.
4950    Converting the value back to OP's type makes a value equivalent to OP.
4951
4952    If FOR_TYPE is nonzero, we return a value which, if converted to
4953    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4954
4955    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4956    narrowest type that can hold the value, even if they don't exactly fit.
4957    Otherwise, bit-field references are changed to a narrower type
4958    only if they can be fetched directly from memory in that type.
4959
4960    OP must have integer, real or enumeral type.  Pointers are not allowed!
4961
4962    There are some cases where the obvious value we could return
4963    would regenerate to OP if converted to OP's type, 
4964    but would not extend like OP to wider types.
4965    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4966    For example, if OP is (unsigned short)(signed char)-1,
4967    we avoid returning (signed char)-1 if FOR_TYPE is int,
4968    even though extending that to an unsigned short would regenerate OP,
4969    since the result of extending (signed char)-1 to (int)
4970    is different from (int) OP.  */
4971
4972 tree
4973 get_unwidened (op, for_type)
4974      register tree op;
4975      tree for_type;
4976 {
4977   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4978   register tree type = TREE_TYPE (op);
4979   register unsigned final_prec
4980     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4981   register int uns
4982     = (for_type != 0 && for_type != type
4983        && final_prec > TYPE_PRECISION (type)
4984        && TREE_UNSIGNED (type));
4985   register tree win = op;
4986
4987   while (TREE_CODE (op) == NOP_EXPR)
4988     {
4989       register int bitschange
4990         = TYPE_PRECISION (TREE_TYPE (op))
4991           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4992
4993       /* Truncations are many-one so cannot be removed.
4994          Unless we are later going to truncate down even farther.  */
4995       if (bitschange < 0
4996           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4997         break;
4998
4999       /* See what's inside this conversion.  If we decide to strip it,
5000          we will set WIN.  */
5001       op = TREE_OPERAND (op, 0);
5002
5003       /* If we have not stripped any zero-extensions (uns is 0),
5004          we can strip any kind of extension.
5005          If we have previously stripped a zero-extension,
5006          only zero-extensions can safely be stripped.
5007          Any extension can be stripped if the bits it would produce
5008          are all going to be discarded later by truncating to FOR_TYPE.  */
5009
5010       if (bitschange > 0)
5011         {
5012           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
5013             win = op;
5014           /* TREE_UNSIGNED says whether this is a zero-extension.
5015              Let's avoid computing it if it does not affect WIN
5016              and if UNS will not be needed again.  */
5017           if ((uns || TREE_CODE (op) == NOP_EXPR)
5018               && TREE_UNSIGNED (TREE_TYPE (op)))
5019             {
5020               uns = 1;
5021               win = op;
5022             }
5023         }
5024     }
5025
5026   if (TREE_CODE (op) == COMPONENT_REF
5027       /* Since type_for_size always gives an integer type.  */
5028       && TREE_CODE (type) != REAL_TYPE
5029       /* Don't crash if field not laid out yet.  */
5030       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
5031     {
5032       unsigned int innerprec
5033         = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
5034
5035       type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
5036
5037       /* We can get this structure field in the narrowest type it fits in.
5038          If FOR_TYPE is 0, do this only for a field that matches the
5039          narrower type exactly and is aligned for it
5040          The resulting extension to its nominal type (a fullword type)
5041          must fit the same conditions as for other extensions.  */
5042
5043       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5044           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
5045           && (! uns || final_prec <= innerprec
5046               || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
5047           && type != 0)
5048         {
5049           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5050                        TREE_OPERAND (op, 1));
5051           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5052           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5053         }
5054     }
5055   return win;
5056 }
5057 \f
5058 /* Return OP or a simpler expression for a narrower value
5059    which can be sign-extended or zero-extended to give back OP.
5060    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5061    or 0 if the value should be sign-extended.  */
5062
5063 tree
5064 get_narrower (op, unsignedp_ptr)
5065      register tree op;
5066      int *unsignedp_ptr;
5067 {
5068   register int uns = 0;
5069   int first = 1;
5070   register tree win = op;
5071
5072   while (TREE_CODE (op) == NOP_EXPR)
5073     {
5074       register int bitschange
5075         = (TYPE_PRECISION (TREE_TYPE (op))
5076            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
5077
5078       /* Truncations are many-one so cannot be removed.  */
5079       if (bitschange < 0)
5080         break;
5081
5082       /* See what's inside this conversion.  If we decide to strip it,
5083          we will set WIN.  */
5084       op = TREE_OPERAND (op, 0);
5085
5086       if (bitschange > 0)
5087         {
5088           /* An extension: the outermost one can be stripped,
5089              but remember whether it is zero or sign extension.  */
5090           if (first)
5091             uns = TREE_UNSIGNED (TREE_TYPE (op));
5092           /* Otherwise, if a sign extension has been stripped,
5093              only sign extensions can now be stripped;
5094              if a zero extension has been stripped, only zero-extensions.  */
5095           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
5096             break;
5097           first = 0;
5098         }
5099       else /* bitschange == 0 */
5100         {
5101           /* A change in nominal type can always be stripped, but we must
5102              preserve the unsignedness.  */
5103           if (first)
5104             uns = TREE_UNSIGNED (TREE_TYPE (op));
5105           first = 0;
5106         }
5107
5108       win = op;
5109     }
5110
5111   if (TREE_CODE (op) == COMPONENT_REF
5112       /* Since type_for_size always gives an integer type.  */
5113       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
5114     {
5115       unsigned int innerprec
5116         = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
5117
5118       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
5119
5120       /* We can get this structure field in a narrower type that fits it,
5121          but the resulting extension to its nominal type (a fullword type)
5122          must satisfy the same conditions as for other extensions.
5123
5124          Do this only for fields that are aligned (not bit-fields),
5125          because when bit-field insns will be used there is no
5126          advantage in doing this.  */
5127
5128       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5129           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
5130           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
5131           && type != 0)
5132         {
5133           if (first)
5134             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
5135           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5136                        TREE_OPERAND (op, 1));
5137           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5138           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5139         }
5140     }
5141   *unsignedp_ptr = uns;
5142   return win;
5143 }
5144 \f
5145 /* Nonzero if integer constant C has a value that is permissible
5146    for type TYPE (an INTEGER_TYPE).  */
5147
5148 int
5149 int_fits_type_p (c, type)
5150      tree c, type;
5151 {
5152   if (TREE_UNSIGNED (type))
5153     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
5154                && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
5155             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
5156                   && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))
5157             /* Negative ints never fit unsigned types.  */
5158             && ! (TREE_INT_CST_HIGH (c) < 0
5159                   && ! TREE_UNSIGNED (TREE_TYPE (c))));
5160   else
5161     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
5162                && INT_CST_LT (TYPE_MAX_VALUE (type), c))
5163             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
5164                   && INT_CST_LT (c, TYPE_MIN_VALUE (type)))
5165             /* Unsigned ints with top bit set never fit signed types.  */
5166             && ! (TREE_INT_CST_HIGH (c) < 0
5167                   && TREE_UNSIGNED (TREE_TYPE (c))));
5168 }
5169
5170 /* Given a DECL or TYPE, return the scope in which it was declared, or
5171    NULL_TREE if there is no containing scope.  */
5172
5173 tree
5174 get_containing_scope (t)
5175      tree t;
5176 {
5177   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
5178 }
5179
5180 /* Return the innermost context enclosing DECL that is
5181    a FUNCTION_DECL, or zero if none.  */
5182
5183 tree
5184 decl_function_context (decl)
5185      tree decl;
5186 {
5187   tree context;
5188
5189   if (TREE_CODE (decl) == ERROR_MARK)
5190     return 0;
5191
5192   if (TREE_CODE (decl) == SAVE_EXPR)
5193     context = SAVE_EXPR_CONTEXT (decl);
5194
5195   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
5196      where we look up the function at runtime.  Such functions always take
5197      a first argument of type 'pointer to real context'.
5198
5199      C++ should really be fixed to use DECL_CONTEXT for the real context,
5200      and use something else for the "virtual context".  */
5201   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
5202     context
5203       = TYPE_MAIN_VARIANT
5204         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
5205   else
5206     context = DECL_CONTEXT (decl);
5207
5208   while (context && TREE_CODE (context) != FUNCTION_DECL)
5209     {
5210       if (TREE_CODE (context) == BLOCK)
5211         context = BLOCK_SUPERCONTEXT (context);
5212       else 
5213         context = get_containing_scope (context);
5214     }
5215
5216   return context;
5217 }
5218
5219 /* Return the innermost context enclosing DECL that is
5220    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
5221    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
5222
5223 tree
5224 decl_type_context (decl)
5225      tree decl;
5226 {
5227   tree context = DECL_CONTEXT (decl);
5228
5229   while (context)
5230     {
5231       if (TREE_CODE (context) == RECORD_TYPE
5232           || TREE_CODE (context) == UNION_TYPE
5233           || TREE_CODE (context) == QUAL_UNION_TYPE)
5234         return context;
5235
5236       if (TREE_CODE (context) == TYPE_DECL
5237           || TREE_CODE (context) == FUNCTION_DECL)
5238         context = DECL_CONTEXT (context);
5239
5240       else if (TREE_CODE (context) == BLOCK)
5241         context = BLOCK_SUPERCONTEXT (context);
5242
5243       else
5244         /* Unhandled CONTEXT!?  */
5245         abort ();
5246     }
5247   return NULL_TREE;
5248 }
5249
5250 /* CALL is a CALL_EXPR.  Return the declaration for the function
5251    called, or NULL_TREE if the called function cannot be 
5252    determined.  */
5253
5254 tree
5255 get_callee_fndecl (call)
5256      tree call;
5257 {
5258   tree addr;
5259
5260   /* It's invalid to call this function with anything but a
5261      CALL_EXPR.  */
5262   if (TREE_CODE (call) != CALL_EXPR)
5263     abort ();
5264
5265   /* The first operand to the CALL is the address of the function
5266      called.  */
5267   addr = TREE_OPERAND (call, 0);
5268
5269   STRIP_NOPS (addr);
5270
5271   /* If this is a readonly function pointer, extract its initial value.  */
5272   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
5273       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
5274       && DECL_INITIAL (addr))
5275     addr = DECL_INITIAL (addr);
5276
5277   /* If the address is just `&f' for some function `f', then we know
5278      that `f' is being called.  */
5279   if (TREE_CODE (addr) == ADDR_EXPR
5280       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
5281     return TREE_OPERAND (addr, 0);
5282
5283   /* We couldn't figure out what was being called.  */
5284   return NULL_TREE;
5285 }
5286
5287 /* Print debugging information about the obstack O, named STR.  */
5288
5289 void
5290 print_obstack_statistics (str, o)
5291      const char *str;
5292      struct obstack *o;
5293 {
5294   struct _obstack_chunk *chunk = o->chunk;
5295   int n_chunks = 1;
5296   int n_alloc = 0;
5297
5298   n_alloc += o->next_free - chunk->contents;
5299   chunk = chunk->prev;
5300   while (chunk)
5301     {
5302       n_chunks += 1;
5303       n_alloc += chunk->limit - &chunk->contents[0];
5304       chunk = chunk->prev;
5305     }
5306   fprintf (stderr, "obstack %s: %u bytes, %d chunks\n",
5307            str, n_alloc, n_chunks);
5308 }
5309
5310 /* Print debugging information about tree nodes generated during the compile,
5311    and any language-specific information.  */
5312
5313 void
5314 dump_tree_statistics ()
5315 {
5316 #ifdef GATHER_STATISTICS
5317   int i;
5318   int total_nodes, total_bytes;
5319 #endif
5320
5321   fprintf (stderr, "\n??? tree nodes created\n\n");
5322 #ifdef GATHER_STATISTICS
5323   fprintf (stderr, "Kind                  Nodes     Bytes\n");
5324   fprintf (stderr, "-------------------------------------\n");
5325   total_nodes = total_bytes = 0;
5326   for (i = 0; i < (int) all_kinds; i++)
5327     {
5328       fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
5329                tree_node_counts[i], tree_node_sizes[i]);
5330       total_nodes += tree_node_counts[i];
5331       total_bytes += tree_node_sizes[i];
5332     }
5333   fprintf (stderr, "%-20s        %9d\n", "identifier names", id_string_size);
5334   fprintf (stderr, "-------------------------------------\n");
5335   fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
5336   fprintf (stderr, "-------------------------------------\n");
5337 #else
5338   fprintf (stderr, "(No per-node statistics)\n");
5339 #endif
5340   print_obstack_statistics ("permanent_obstack", &permanent_obstack);
5341   print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
5342   print_obstack_statistics ("temporary_obstack", &temporary_obstack);
5343   print_obstack_statistics ("momentary_obstack", &momentary_obstack);
5344   print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack);
5345   print_type_hash_statistics ();
5346   print_lang_statistics ();
5347 }
5348 \f
5349 #define FILE_FUNCTION_PREFIX_LEN 9
5350
5351 #ifndef NO_DOLLAR_IN_LABEL
5352 #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
5353 #else /* NO_DOLLAR_IN_LABEL */
5354 #ifndef NO_DOT_IN_LABEL
5355 #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
5356 #else /* NO_DOT_IN_LABEL */
5357 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
5358 #endif  /* NO_DOT_IN_LABEL */
5359 #endif  /* NO_DOLLAR_IN_LABEL */
5360
5361 extern char *first_global_object_name;
5362 extern char *weak_global_object_name;
5363
5364 /* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
5365    clashes in cases where we can't reliably choose a unique name.
5366
5367    Derived from mkstemp.c in libiberty.  */
5368
5369 static void
5370 append_random_chars (template)
5371      char *template;
5372 {
5373   static const char letters[]
5374     = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
5375   static unsigned HOST_WIDE_INT value;
5376   unsigned HOST_WIDE_INT v;
5377
5378 #ifdef HAVE_GETTIMEOFDAY
5379   struct timeval tv;
5380 #endif
5381
5382   template += strlen (template);
5383
5384 #ifdef HAVE_GETTIMEOFDAY
5385   /* Get some more or less random data.  */
5386   gettimeofday (&tv, NULL);
5387   value += ((unsigned HOST_WIDE_INT) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
5388 #else
5389   value += getpid ();
5390 #endif
5391
5392   v = value;
5393
5394   /* Fill in the random bits.  */
5395   template[0] = letters[v % 62];
5396   v /= 62;
5397   template[1] = letters[v % 62];
5398   v /= 62;
5399   template[2] = letters[v % 62];
5400   v /= 62;
5401   template[3] = letters[v % 62];
5402   v /= 62;
5403   template[4] = letters[v % 62];
5404   v /= 62;
5405   template[5] = letters[v % 62];
5406
5407   template[6] = '\0';
5408 }
5409
5410 /* Generate a name for a function unique to this translation unit.
5411    TYPE is some string to identify the purpose of this function to the
5412    linker or collect2.  */
5413
5414 tree
5415 get_file_function_name_long (type)
5416      const char *type;
5417 {
5418   char *buf;
5419   register char *p;
5420
5421   if (first_global_object_name)
5422     p = first_global_object_name;
5423   else
5424     {
5425       /* We don't have anything that we know to be unique to this translation
5426          unit, so use what we do have and throw in some randomness.  */
5427
5428       const char *name = weak_global_object_name;
5429       const char *file = main_input_filename;
5430
5431       if (! name)
5432         name = "";
5433       if (! file)
5434         file = input_filename;
5435
5436       p = (char *) alloca (7 + strlen (name) + strlen (file));
5437
5438       sprintf (p, "%s%s", name, file);
5439       append_random_chars (p);
5440     }
5441
5442   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
5443                          + strlen (type));
5444
5445   /* Set up the name of the file-level functions we may need. 
5446      Use a global object (which is already required to be unique over
5447      the program) rather than the file name (which imposes extra
5448      constraints).  */
5449   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
5450
5451   /* Don't need to pull weird characters out of global names.  */
5452   if (p != first_global_object_name)
5453     {
5454       for (p = buf+11; *p; p++)
5455         if (! ( ISDIGIT(*p)
5456 #if 0 /* we always want labels, which are valid C++ identifiers (+ `$') */
5457 #ifndef ASM_IDENTIFY_GCC        /* this is required if `.' is invalid -- k. raeburn */
5458                || *p == '.'
5459 #endif
5460 #endif
5461 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
5462                || *p == '$'
5463 #endif
5464 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
5465                || *p == '.'
5466 #endif
5467                || ISUPPER(*p)
5468                || ISLOWER(*p)))
5469           *p = '_';
5470     }
5471
5472   return get_identifier (buf);
5473 }
5474
5475 /* If KIND=='I', return a suitable global initializer (constructor) name.
5476    If KIND=='D', return a suitable global clean-up (destructor) name.  */
5477
5478 tree
5479 get_file_function_name (kind)
5480      int kind;
5481 {
5482   char p[2];
5483
5484   p[0] = kind;
5485   p[1] = 0;
5486
5487   return get_file_function_name_long (p);
5488 }
5489 \f
5490 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5491    The result is placed in BUFFER (which has length BIT_SIZE),
5492    with one bit in each char ('\000' or '\001').
5493
5494    If the constructor is constant, NULL_TREE is returned.
5495    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5496
5497 tree
5498 get_set_constructor_bits (init, buffer, bit_size)
5499      tree init;
5500      char *buffer;
5501      int bit_size;
5502 {
5503   int i;
5504   tree vals;
5505   HOST_WIDE_INT domain_min
5506     = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
5507   tree non_const_bits = NULL_TREE;
5508   for (i = 0; i < bit_size; i++)
5509     buffer[i] = 0;
5510
5511   for (vals = TREE_OPERAND (init, 1); 
5512        vals != NULL_TREE; vals = TREE_CHAIN (vals))
5513     {
5514       if (TREE_CODE (TREE_VALUE (vals)) != INTEGER_CST
5515           || (TREE_PURPOSE (vals) != NULL_TREE
5516               && TREE_CODE (TREE_PURPOSE (vals)) != INTEGER_CST))
5517         non_const_bits
5518           = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
5519       else if (TREE_PURPOSE (vals) != NULL_TREE)
5520         {
5521           /* Set a range of bits to ones.  */
5522           HOST_WIDE_INT lo_index
5523             = TREE_INT_CST_LOW (TREE_PURPOSE (vals)) - domain_min;
5524           HOST_WIDE_INT hi_index
5525             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5526
5527           if (lo_index < 0 || lo_index >= bit_size
5528             || hi_index < 0 || hi_index >= bit_size)
5529             abort ();
5530           for ( ; lo_index <= hi_index; lo_index++)
5531             buffer[lo_index] = 1;
5532         }
5533       else
5534         {
5535           /* Set a single bit to one.  */
5536           HOST_WIDE_INT index
5537             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5538           if (index < 0 || index >= bit_size)
5539             {
5540               error ("invalid initializer for bit string");
5541               return NULL_TREE;
5542             }
5543           buffer[index] = 1;
5544         }
5545     }
5546   return non_const_bits;
5547 }
5548
5549 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5550    The result is placed in BUFFER (which is an array of bytes).
5551    If the constructor is constant, NULL_TREE is returned.
5552    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5553
5554 tree
5555 get_set_constructor_bytes (init, buffer, wd_size)
5556      tree init;
5557      unsigned char *buffer;
5558      int wd_size;
5559 {
5560   int i;
5561   int set_word_size = BITS_PER_UNIT;
5562   int bit_size = wd_size * set_word_size;
5563   int bit_pos = 0;
5564   unsigned char *bytep = buffer;
5565   char *bit_buffer = (char *) alloca(bit_size);
5566   tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
5567
5568   for (i = 0; i < wd_size; i++)
5569     buffer[i] = 0;
5570
5571   for (i = 0; i < bit_size; i++)
5572     {
5573       if (bit_buffer[i])
5574         {
5575           if (BYTES_BIG_ENDIAN)
5576             *bytep |= (1 << (set_word_size - 1 - bit_pos));
5577           else
5578             *bytep |= 1 << bit_pos;
5579         }
5580       bit_pos++;
5581       if (bit_pos >= set_word_size)
5582         bit_pos = 0, bytep++;
5583     }
5584   return non_const_bits;
5585 }
5586 \f
5587 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5588 /* Complain that the tree code of NODE does not match the expected CODE.
5589    FILE, LINE, and FUNCTION are of the caller.  */
5590 void
5591 tree_check_failed (node, code, file, line, function)
5592      const tree node;
5593      enum tree_code code;
5594      const char *file;
5595      int line;
5596      const char *function;
5597 {
5598   error ("Tree check: expected %s, have %s",
5599          tree_code_name[code], tree_code_name[TREE_CODE (node)]);
5600   fancy_abort (file, line, function);
5601 }
5602
5603 /* Similar to above, except that we check for a class of tree
5604    code, given in CL.  */
5605 void
5606 tree_class_check_failed (node, cl, file, line, function)
5607      const tree node;
5608      char cl;
5609      const char *file;
5610      int line;
5611      const char *function;
5612 {
5613   error ("Tree check: expected class '%c', have '%c' (%s)",
5614          cl, TREE_CODE_CLASS (TREE_CODE (node)),
5615          tree_code_name[TREE_CODE (node)]);
5616   fancy_abort (file, line, function);
5617 }
5618
5619 #endif /* ENABLE_TREE_CHECKING */
5620
5621 /* Return the alias set for T, which may be either a type or an
5622    expression.  */
5623
5624 int
5625 get_alias_set (t)
5626      tree t;
5627 {
5628   if (! flag_strict_aliasing || lang_get_alias_set == 0)
5629     /* If we're not doing any lanaguage-specific alias analysis, just
5630        assume everything aliases everything else.  */
5631     return 0;
5632   else
5633     return (*lang_get_alias_set) (t);
5634 }
5635
5636 /* Return a brand-new alias set.  */
5637
5638 int
5639 new_alias_set ()
5640 {
5641   static int last_alias_set;
5642
5643   if (flag_strict_aliasing)
5644     return ++last_alias_set;
5645   else
5646     return 0;
5647 }
5648 \f
5649 #ifndef CHAR_TYPE_SIZE
5650 #define CHAR_TYPE_SIZE BITS_PER_UNIT
5651 #endif
5652
5653 #ifndef SHORT_TYPE_SIZE
5654 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
5655 #endif
5656
5657 #ifndef INT_TYPE_SIZE
5658 #define INT_TYPE_SIZE BITS_PER_WORD
5659 #endif
5660
5661 #ifndef LONG_TYPE_SIZE
5662 #define LONG_TYPE_SIZE BITS_PER_WORD
5663 #endif
5664
5665 #ifndef LONG_LONG_TYPE_SIZE
5666 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
5667 #endif
5668
5669 #ifndef FLOAT_TYPE_SIZE
5670 #define FLOAT_TYPE_SIZE BITS_PER_WORD
5671 #endif
5672
5673 #ifndef DOUBLE_TYPE_SIZE
5674 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5675 #endif
5676
5677 #ifndef LONG_DOUBLE_TYPE_SIZE
5678 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5679 #endif
5680
5681 /* Create nodes for all integer types (and error_mark_node) using the sizes
5682    of C datatypes.  The caller should call set_sizetype soon after calling
5683    this function to select one of the types as sizetype.  */
5684    
5685 void
5686 build_common_tree_nodes (signed_char)
5687      int signed_char;
5688 {
5689   error_mark_node = make_node (ERROR_MARK);
5690   TREE_TYPE (error_mark_node) = error_mark_node;
5691
5692   initialize_sizetypes ();
5693
5694   /* Define both `signed char' and `unsigned char'.  */
5695   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5696   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5697
5698   /* Define `char', which is like either `signed char' or `unsigned char'
5699      but not the same as either.  */
5700   char_type_node
5701     = (signed_char
5702        ? make_signed_type (CHAR_TYPE_SIZE)
5703        : make_unsigned_type (CHAR_TYPE_SIZE));
5704
5705   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5706   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5707   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5708   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5709   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5710   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5711   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5712   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5713
5714   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5715   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5716   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5717   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5718   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5719
5720   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5721   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5722   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5723   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5724   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5725 }
5726
5727 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5728    It will create several other common tree nodes.  */
5729
5730 void
5731 build_common_tree_nodes_2 (short_double)
5732      int short_double;
5733 {
5734   /* Define these next since types below may used them.  */
5735   integer_zero_node = build_int_2 (0, 0);
5736   integer_one_node = build_int_2 (1, 0);
5737
5738   size_zero_node = size_int (0);
5739   size_one_node = size_int (1);
5740   bitsize_zero_node = bitsize_int (0);
5741   bitsize_one_node = bitsize_int (1);
5742   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
5743
5744   void_type_node = make_node (VOID_TYPE);
5745   layout_type (void_type_node);
5746
5747   /* We are not going to have real types in C with less than byte alignment,
5748      so we might as well not have any types that claim to have it.  */
5749   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
5750
5751   null_pointer_node = build_int_2 (0, 0);
5752   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5753   layout_type (TREE_TYPE (null_pointer_node));
5754
5755   ptr_type_node = build_pointer_type (void_type_node);
5756   const_ptr_type_node
5757     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5758
5759   float_type_node = make_node (REAL_TYPE);
5760   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5761   layout_type (float_type_node);
5762
5763   double_type_node = make_node (REAL_TYPE);
5764   if (short_double)
5765     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5766   else
5767     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5768   layout_type (double_type_node);
5769
5770   long_double_type_node = make_node (REAL_TYPE);
5771   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5772   layout_type (long_double_type_node);
5773
5774   complex_integer_type_node = make_node (COMPLEX_TYPE);
5775   TREE_TYPE (complex_integer_type_node) = integer_type_node;
5776   layout_type (complex_integer_type_node);
5777
5778   complex_float_type_node = make_node (COMPLEX_TYPE);
5779   TREE_TYPE (complex_float_type_node) = float_type_node;
5780   layout_type (complex_float_type_node);
5781
5782   complex_double_type_node = make_node (COMPLEX_TYPE);
5783   TREE_TYPE (complex_double_type_node) = double_type_node;
5784   layout_type (complex_double_type_node);
5785
5786   complex_long_double_type_node = make_node (COMPLEX_TYPE);
5787   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5788   layout_type (complex_long_double_type_node);
5789
5790 #ifdef BUILD_VA_LIST_TYPE
5791   BUILD_VA_LIST_TYPE(va_list_type_node);
5792 #else
5793   va_list_type_node = ptr_type_node;
5794 #endif
5795 }