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