OSDN Git Service

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