OSDN Git Service

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