OSDN Git Service

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