OSDN Git Service

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