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