OSDN Git Service

* stor-layout.c (place_union_field): For bitfields if
[pf3gnuchains/gcc-fork.git] / gcc / stor-layout.c
1 /* C-compiler utilities for types and variables storage layout
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998,
3    1999, 2000, 2001, 2002 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22
23 #include "config.h"
24 #include "system.h"
25 #include "tree.h"
26 #include "rtl.h"
27 #include "tm_p.h"
28 #include "flags.h"
29 #include "function.h"
30 #include "expr.h"
31 #include "toplev.h"
32 #include "ggc.h"
33 #include "target.h"
34 #include "langhooks.h"
35
36 /* Set to one when set_sizetype has been called.  */
37 static int sizetype_set;
38
39 /* List of types created before set_sizetype has been called.  We do not
40    make this a GGC root since we want these nodes to be reclaimed.  */
41 static tree early_type_list;
42
43 /* Data type for the expressions representing sizes of data types.
44    It is the first integer type laid out.  */
45 tree sizetype_tab[(int) TYPE_KIND_LAST];
46
47 /* If nonzero, this is an upper limit on alignment of structure fields.
48    The value is measured in bits.  */
49 unsigned int maximum_field_alignment;
50
51 /* If non-zero, the alignment of a bitstring or (power-)set value, in bits.
52    May be overridden by front-ends.  */
53 unsigned int set_alignment = 0;
54
55 /* Nonzero if all REFERENCE_TYPEs are internal and hence should be
56    allocated in Pmode, not ptr_mode.   Set only by internal_reference_types
57    called only by a front end.  */
58 static int reference_types_internal = 0;
59
60 static void finalize_record_size        PARAMS ((record_layout_info));
61 static void finalize_type_size          PARAMS ((tree));
62 static void place_union_field           PARAMS ((record_layout_info, tree));
63 extern void debug_rli                   PARAMS ((record_layout_info));
64 \f
65 /* SAVE_EXPRs for sizes of types and decls, waiting to be expanded.  */
66
67 static GTY(()) tree pending_sizes;
68
69 /* Nonzero means cannot safely call expand_expr now,
70    so put variable sizes onto `pending_sizes' instead.  */
71
72 int immediate_size_expand;
73
74 /* Show that REFERENCE_TYPES are internal and should be Pmode.  Called only
75    by front end.  */
76
77 void
78 internal_reference_types ()
79 {
80   reference_types_internal = 1;
81 }
82
83 /* Get a list of all the objects put on the pending sizes list.  */
84
85 tree
86 get_pending_sizes ()
87 {
88   tree chain = pending_sizes;
89   tree t;
90
91   /* Put each SAVE_EXPR into the current function.  */
92   for (t = chain; t; t = TREE_CHAIN (t))
93     SAVE_EXPR_CONTEXT (TREE_VALUE (t)) = current_function_decl;
94
95   pending_sizes = 0;
96   return chain;
97 }
98
99 /* Return non-zero if EXPR is present on the pending sizes list.  */
100
101 int
102 is_pending_size (expr)
103      tree expr;
104 {
105   tree t;
106
107   for (t = pending_sizes; t; t = TREE_CHAIN (t))
108     if (TREE_VALUE (t) == expr)
109       return 1;
110   return 0;
111 }
112
113 /* Add EXPR to the pending sizes list.  */
114
115 void
116 put_pending_size (expr)
117      tree expr;
118 {
119   /* Strip any simple arithmetic from EXPR to see if it has an underlying
120      SAVE_EXPR.  */
121   while (TREE_CODE_CLASS (TREE_CODE (expr)) == '1'
122          || (TREE_CODE_CLASS (TREE_CODE (expr)) == '2'
123             && TREE_CONSTANT (TREE_OPERAND (expr, 1))))
124     expr = TREE_OPERAND (expr, 0);
125
126   if (TREE_CODE (expr) == SAVE_EXPR)
127     pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes);
128 }
129
130 /* Put a chain of objects into the pending sizes list, which must be
131    empty.  */
132
133 void
134 put_pending_sizes (chain)
135      tree chain;
136 {
137   if (pending_sizes)
138     abort ();
139
140   pending_sizes = chain;
141 }
142
143 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
144    to serve as the actual size-expression for a type or decl.  */
145
146 tree
147 variable_size (size)
148      tree size;
149 {
150   /* If the language-processor is to take responsibility for variable-sized
151      items (e.g., languages which have elaboration procedures like Ada),
152      just return SIZE unchanged.  Likewise for self-referential sizes and
153      constant sizes.  */
154   if (TREE_CONSTANT (size)
155       || (*lang_hooks.decls.global_bindings_p) () < 0
156       || contains_placeholder_p (size))
157     return size;
158
159   size = save_expr (size);
160
161   /* If an array with a variable number of elements is declared, and
162      the elements require destruction, we will emit a cleanup for the
163      array.  That cleanup is run both on normal exit from the block
164      and in the exception-handler for the block.  Normally, when code
165      is used in both ordinary code and in an exception handler it is
166      `unsaved', i.e., all SAVE_EXPRs are recalculated.  However, we do
167      not wish to do that here; the array-size is the same in both
168      places.  */
169   if (TREE_CODE (size) == SAVE_EXPR)
170     SAVE_EXPR_PERSISTENT_P (size) = 1;
171
172   if ((*lang_hooks.decls.global_bindings_p) ())
173     {
174       if (TREE_CONSTANT (size))
175         error ("type size can't be explicitly evaluated");
176       else
177         error ("variable-size type declared outside of any function");
178
179       return size_one_node;
180     }
181
182   if (immediate_size_expand)
183     /* NULL_RTX is not defined; neither is the rtx type.
184        Also, we would like to pass const0_rtx here, but don't have it.  */
185     expand_expr (size, expand_expr (integer_zero_node, NULL_RTX, VOIDmode, 0),
186                  VOIDmode, 0);
187   else if (cfun != 0 && cfun->x_dont_save_pending_sizes_p)
188     /* The front-end doesn't want us to keep a list of the expressions
189        that determine sizes for variable size objects.  */
190     ;
191   else
192     put_pending_size (size);
193
194   return size;
195 }
196 \f
197 #ifndef MAX_FIXED_MODE_SIZE
198 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
199 #endif
200
201 /* Return the machine mode to use for a nonscalar of SIZE bits.
202    The mode must be in class CLASS, and have exactly that many bits.
203    If LIMIT is nonzero, modes of wider than MAX_FIXED_MODE_SIZE will not
204    be used.  */
205
206 enum machine_mode
207 mode_for_size (size, class, limit)
208      unsigned int size;
209      enum mode_class class;
210      int limit;
211 {
212   enum machine_mode mode;
213
214   if (limit && size > MAX_FIXED_MODE_SIZE)
215     return BLKmode;
216
217   /* Get the first mode which has this size, in the specified class.  */
218   for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
219        mode = GET_MODE_WIDER_MODE (mode))
220     if (GET_MODE_BITSIZE (mode) == size)
221       return mode;
222
223   return BLKmode;
224 }
225
226 /* Similar, except passed a tree node.  */
227
228 enum machine_mode
229 mode_for_size_tree (size, class, limit)
230      tree size;
231      enum mode_class class;
232      int limit;
233 {
234   if (TREE_CODE (size) != INTEGER_CST
235       /* What we really want to say here is that the size can fit in a
236          host integer, but we know there's no way we'd find a mode for
237          this many bits, so there's no point in doing the precise test.  */
238       || compare_tree_int (size, 1000) > 0)
239     return BLKmode;
240   else
241     return mode_for_size (TREE_INT_CST_LOW (size), class, limit);
242 }
243
244 /* Similar, but never return BLKmode; return the narrowest mode that
245    contains at least the requested number of bits.  */
246
247 enum machine_mode
248 smallest_mode_for_size (size, class)
249      unsigned int size;
250      enum mode_class class;
251 {
252   enum machine_mode mode;
253
254   /* Get the first mode which has at least this size, in the
255      specified class.  */
256   for (mode = GET_CLASS_NARROWEST_MODE (class); mode != VOIDmode;
257        mode = GET_MODE_WIDER_MODE (mode))
258     if (GET_MODE_BITSIZE (mode) >= size)
259       return mode;
260
261   abort ();
262 }
263
264 /* Find an integer mode of the exact same size, or BLKmode on failure.  */
265
266 enum machine_mode
267 int_mode_for_mode (mode)
268      enum machine_mode mode;
269 {
270   switch (GET_MODE_CLASS (mode))
271     {
272     case MODE_INT:
273     case MODE_PARTIAL_INT:
274       break;
275
276     case MODE_COMPLEX_INT:
277     case MODE_COMPLEX_FLOAT:
278     case MODE_FLOAT:
279     case MODE_VECTOR_INT:
280     case MODE_VECTOR_FLOAT:
281       mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
282       break;
283
284     case MODE_RANDOM:
285       if (mode == BLKmode)
286         break;
287
288       /* ... fall through ...  */
289
290     case MODE_CC:
291     default:
292       abort ();
293     }
294
295   return mode;
296 }
297
298 /* Return the value of VALUE, rounded up to a multiple of DIVISOR.
299    This can only be applied to objects of a sizetype.  */
300
301 tree
302 round_up (value, divisor)
303      tree value;
304      int divisor;
305 {
306   tree arg = size_int_type (divisor, TREE_TYPE (value));
307
308   return size_binop (MULT_EXPR, size_binop (CEIL_DIV_EXPR, value, arg), arg);
309 }
310
311 /* Likewise, but round down.  */
312
313 tree
314 round_down (value, divisor)
315      tree value;
316      int divisor;
317 {
318   tree arg = size_int_type (divisor, TREE_TYPE (value));
319
320   return size_binop (MULT_EXPR, size_binop (FLOOR_DIV_EXPR, value, arg), arg);
321 }
322 \f
323 /* Set the size, mode and alignment of a ..._DECL node.
324    TYPE_DECL does need this for C++.
325    Note that LABEL_DECL and CONST_DECL nodes do not need this,
326    and FUNCTION_DECL nodes have them set up in a special (and simple) way.
327    Don't call layout_decl for them.
328
329    KNOWN_ALIGN is the amount of alignment we can assume this
330    decl has with no special effort.  It is relevant only for FIELD_DECLs
331    and depends on the previous fields.
332    All that matters about KNOWN_ALIGN is which powers of 2 divide it.
333    If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
334    the record will be aligned to suit.  */
335
336 void
337 layout_decl (decl, known_align)
338      tree decl;
339      unsigned int known_align;
340 {
341   tree type = TREE_TYPE (decl);
342   enum tree_code code = TREE_CODE (decl);
343
344   if (code == CONST_DECL)
345     return;
346   else if (code != VAR_DECL && code != PARM_DECL && code != RESULT_DECL
347            && code != TYPE_DECL && code != FIELD_DECL)
348     abort ();
349
350   if (type == error_mark_node)
351     type = void_type_node;
352
353   /* Usually the size and mode come from the data type without change,
354      however, the front-end may set the explicit width of the field, so its
355      size may not be the same as the size of its type.  This happens with
356      bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
357      also happens with other fields.  For example, the C++ front-end creates
358      zero-sized fields corresponding to empty base classes, and depends on
359      layout_type setting DECL_FIELD_BITPOS correctly for the field.  Set the
360      size in bytes from the size in bits.  If we have already set the mode,
361      don't set it again since we can be called twice for FIELD_DECLs.  */
362
363   TREE_UNSIGNED (decl) = TREE_UNSIGNED (type);
364   if (DECL_MODE (decl) == VOIDmode)
365     DECL_MODE (decl) = TYPE_MODE (type);
366
367   if (DECL_SIZE (decl) == 0)
368     {
369       DECL_SIZE (decl) = TYPE_SIZE (type);
370       DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
371     }
372   else
373     DECL_SIZE_UNIT (decl)
374       = convert (sizetype, size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
375                                        bitsize_unit_node));
376
377   /* Force alignment required for the data type.
378      But if the decl itself wants greater alignment, don't override that.
379      Likewise, if the decl is packed, don't override it.  */
380   if (! (code == FIELD_DECL && DECL_BIT_FIELD (decl))
381       && (DECL_ALIGN (decl) == 0
382           || (! (code == FIELD_DECL && DECL_PACKED (decl))
383               && TYPE_ALIGN (type) > DECL_ALIGN (decl))))
384     {
385       DECL_ALIGN (decl) = TYPE_ALIGN (type);
386       DECL_USER_ALIGN (decl) = 0;
387     }
388
389   /* For fields, set the bit field type and update the alignment.  */
390   if (code == FIELD_DECL)
391     {
392       DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0;
393       if (maximum_field_alignment != 0)
394         DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
395
396       /* If the field is of variable size, we can't misalign it since we
397          have no way to make a temporary to align the result.  But this
398          isn't an issue if the decl is not addressable.  Likewise if it
399          is of unknown size.  */
400       else if (DECL_PACKED (decl)
401                && (DECL_NONADDRESSABLE_P (decl)
402                    || DECL_SIZE_UNIT (decl) == 0
403                    || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
404         {
405           DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
406           DECL_USER_ALIGN (decl) = 0;
407         }
408     }
409
410   /* See if we can use an ordinary integer mode for a bit-field.
411      Conditions are: a fixed size that is correct for another mode
412      and occupying a complete byte or bytes on proper boundary.  */
413   if (code == FIELD_DECL && DECL_BIT_FIELD (decl)
414       && TYPE_SIZE (type) != 0
415       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
416       && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
417     {
418       enum machine_mode xmode
419         = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
420
421       if (xmode != BLKmode && known_align >= GET_MODE_ALIGNMENT (xmode))
422         {
423           DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
424                                    DECL_ALIGN (decl));
425           DECL_MODE (decl) = xmode;
426           DECL_BIT_FIELD (decl) = 0;
427         }
428     }
429
430   /* Turn off DECL_BIT_FIELD if we won't need it set.  */
431   if (code == FIELD_DECL && DECL_BIT_FIELD (decl)
432       && TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
433       && known_align >= TYPE_ALIGN (type)
434       && DECL_ALIGN (decl) >= TYPE_ALIGN (type)
435       && DECL_SIZE_UNIT (decl) != 0)
436     DECL_BIT_FIELD (decl) = 0;
437
438   /* Evaluate nonconstant size only once, either now or as soon as safe.  */
439   if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
440     DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
441   if (DECL_SIZE_UNIT (decl) != 0
442       && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
443     DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
444
445   /* If requested, warn about definitions of large data objects.  */
446   if (warn_larger_than
447       && (code == VAR_DECL || code == PARM_DECL)
448       && ! DECL_EXTERNAL (decl))
449     {
450       tree size = DECL_SIZE_UNIT (decl);
451
452       if (size != 0 && TREE_CODE (size) == INTEGER_CST
453           && compare_tree_int (size, larger_than_size) > 0)
454         {
455           unsigned int size_as_int = TREE_INT_CST_LOW (size);
456
457           if (compare_tree_int (size, size_as_int) == 0)
458             warning_with_decl (decl, "size of `%s' is %d bytes", size_as_int);
459           else
460             warning_with_decl (decl, "size of `%s' is larger than %d bytes",
461                                larger_than_size);
462         }
463     }
464 }
465 \f
466 /* Hook for a front-end function that can modify the record layout as needed
467    immediately before it is finalized.  */
468
469 void (*lang_adjust_rli) PARAMS ((record_layout_info)) = 0;
470
471 void
472 set_lang_adjust_rli (f)
473      void (*f) PARAMS ((record_layout_info));
474 {
475   lang_adjust_rli = f;
476 }
477
478 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
479    QUAL_UNION_TYPE.  Return a pointer to a struct record_layout_info which
480    is to be passed to all other layout functions for this record.  It is the
481    responsibility of the caller to call `free' for the storage returned.
482    Note that garbage collection is not permitted until we finish laying
483    out the record.  */
484
485 record_layout_info
486 start_record_layout (t)
487      tree t;
488 {
489   record_layout_info rli
490     = (record_layout_info) xmalloc (sizeof (struct record_layout_info_s));
491
492   rli->t = t;
493
494   /* If the type has a minimum specified alignment (via an attribute
495      declaration, for example) use it -- otherwise, start with a
496      one-byte alignment.  */
497   rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
498   rli->unpacked_align = rli->unpadded_align = rli->record_align;
499   rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
500
501 #ifdef STRUCTURE_SIZE_BOUNDARY
502   /* Packed structures don't need to have minimum size.  */
503   if (! TYPE_PACKED (t))
504     rli->record_align = MAX (rli->record_align, STRUCTURE_SIZE_BOUNDARY);
505 #endif
506
507   rli->offset = size_zero_node;
508   rli->bitpos = bitsize_zero_node;
509   rli->prev_field = 0;
510   rli->pending_statics = 0;
511   rli->packed_maybe_necessary = 0;
512
513   return rli;
514 }
515
516 /* These four routines perform computations that convert between
517    the offset/bitpos forms and byte and bit offsets.  */
518
519 tree
520 bit_from_pos (offset, bitpos)
521      tree offset, bitpos;
522 {
523   return size_binop (PLUS_EXPR, bitpos,
524                      size_binop (MULT_EXPR, convert (bitsizetype, offset),
525                                  bitsize_unit_node));
526 }
527
528 tree
529 byte_from_pos (offset, bitpos)
530      tree offset, bitpos;
531 {
532   return size_binop (PLUS_EXPR, offset,
533                      convert (sizetype,
534                               size_binop (TRUNC_DIV_EXPR, bitpos,
535                                           bitsize_unit_node)));
536 }
537
538 void
539 pos_from_byte (poffset, pbitpos, off_align, pos)
540      tree *poffset, *pbitpos;
541      unsigned int off_align;
542      tree pos;
543 {
544   *poffset
545     = size_binop (MULT_EXPR,
546                   convert (sizetype,
547                            size_binop (FLOOR_DIV_EXPR, pos,
548                                        bitsize_int (off_align
549                                                     / BITS_PER_UNIT))),
550                   size_int (off_align / BITS_PER_UNIT));
551   *pbitpos = size_binop (MULT_EXPR,
552                          size_binop (FLOOR_MOD_EXPR, pos,
553                                      bitsize_int (off_align / BITS_PER_UNIT)),
554                          bitsize_unit_node);
555 }
556
557 void
558 pos_from_bit (poffset, pbitpos, off_align, pos)
559      tree *poffset, *pbitpos;
560      unsigned int off_align;
561      tree pos;
562 {
563   *poffset = size_binop (MULT_EXPR,
564                          convert (sizetype,
565                                   size_binop (FLOOR_DIV_EXPR, pos,
566                                               bitsize_int (off_align))),
567                          size_int (off_align / BITS_PER_UNIT));
568   *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, bitsize_int (off_align));
569 }
570
571 /* Given a pointer to bit and byte offsets and an offset alignment,
572    normalize the offsets so they are within the alignment.  */
573
574 void
575 normalize_offset (poffset, pbitpos, off_align)
576      tree *poffset, *pbitpos;
577      unsigned int off_align;
578 {
579   /* If the bit position is now larger than it should be, adjust it
580      downwards.  */
581   if (compare_tree_int (*pbitpos, off_align) >= 0)
582     {
583       tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
584                                       bitsize_int (off_align));
585
586       *poffset
587         = size_binop (PLUS_EXPR, *poffset,
588                       size_binop (MULT_EXPR, convert (sizetype, extra_aligns),
589                                   size_int (off_align / BITS_PER_UNIT)));
590
591       *pbitpos
592         = size_binop (FLOOR_MOD_EXPR, *pbitpos, bitsize_int (off_align));
593     }
594 }
595
596 /* Print debugging information about the information in RLI.  */
597
598 void
599 debug_rli (rli)
600      record_layout_info rli;
601 {
602   print_node_brief (stderr, "type", rli->t, 0);
603   print_node_brief (stderr, "\noffset", rli->offset, 0);
604   print_node_brief (stderr, " bitpos", rli->bitpos, 0);
605
606   fprintf (stderr, "\naligns: rec = %u, unpack = %u, unpad = %u, off = %u\n",
607            rli->record_align, rli->unpacked_align, rli->unpadded_align,
608            rli->offset_align);
609   if (rli->packed_maybe_necessary)
610     fprintf (stderr, "packed may be necessary\n");
611
612   if (rli->pending_statics)
613     {
614       fprintf (stderr, "pending statics:\n");
615       debug_tree (rli->pending_statics);
616     }
617 }
618
619 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
620    BITPOS if necessary to keep BITPOS below OFFSET_ALIGN.  */
621
622 void
623 normalize_rli (rli)
624      record_layout_info rli;
625 {
626   normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
627 }
628
629 /* Returns the size in bytes allocated so far.  */
630
631 tree
632 rli_size_unit_so_far (rli)
633      record_layout_info rli;
634 {
635   return byte_from_pos (rli->offset, rli->bitpos);
636 }
637
638 /* Returns the size in bits allocated so far.  */
639
640 tree
641 rli_size_so_far (rli)
642      record_layout_info rli;
643 {
644   return bit_from_pos (rli->offset, rli->bitpos);
645 }
646
647 /* Called from place_field to handle unions.  */
648
649 static void
650 place_union_field (rli, field)
651      record_layout_info rli;
652      tree field;
653 {
654   unsigned int desired_align;
655
656   layout_decl (field, 0);
657
658   DECL_FIELD_OFFSET (field) = size_zero_node;
659   DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
660   SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
661
662   desired_align = DECL_ALIGN (field);
663
664 #ifdef BIGGEST_FIELD_ALIGNMENT
665   /* Some targets (i.e. i386) limit union field alignment
666      to a lower boundary than alignment of variables unless
667      it was overridden by attribute aligned.  */
668   if (! DECL_USER_ALIGN (field))
669     desired_align =
670       MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
671 #endif
672
673 #ifdef ADJUST_FIELD_ALIGN
674   if (! DECL_USER_ALIGN (field))
675     desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
676 #endif
677
678   TYPE_USER_ALIGN (rli->t) |= DECL_USER_ALIGN (field);
679
680   /* Union must be at least as aligned as any field requires.  */
681   rli->record_align = MAX (rli->record_align, desired_align);
682   rli->unpadded_align = MAX (rli->unpadded_align, desired_align);
683
684 #ifdef PCC_BITFIELD_TYPE_MATTERS
685   /* On the m88000, a bit field of declare type `int' forces the
686      entire union to have `int' alignment.  */
687   if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD_TYPE (field))
688     {
689       unsigned int type_align = TYPE_ALIGN (TREE_TYPE (field));
690
691 #ifdef ADJUST_FIELD_ALIGN
692       if (! TYPE_USER_ALIGN (TREE_TYPE (field)))
693         type_align = ADJUST_FIELD_ALIGN (field, type_align);
694 #endif
695       rli->record_align = MAX (rli->record_align, type_align);
696       rli->unpadded_align = MAX (rli->unpadded_align, type_align);
697       TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (TREE_TYPE (field));
698     }
699 #endif
700
701   /* We assume the union's size will be a multiple of a byte so we don't
702      bother with BITPOS.  */
703   if (TREE_CODE (rli->t) == UNION_TYPE)
704     rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
705   else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
706     rli->offset = fold (build (COND_EXPR, sizetype,
707                                DECL_QUALIFIER (field),
708                                DECL_SIZE_UNIT (field), rli->offset));
709 }
710
711 /* RLI contains information about the layout of a RECORD_TYPE.  FIELD
712    is a FIELD_DECL to be added after those fields already present in
713    T.  (FIELD is not actually added to the TYPE_FIELDS list here;
714    callers that desire that behavior must manually perform that step.)  */
715
716 void
717 place_field (rli, field)
718      record_layout_info rli;
719      tree field;
720 {
721   /* The alignment required for FIELD.  */
722   unsigned int desired_align;
723   /* The alignment FIELD would have if we just dropped it into the
724      record as it presently stands.  */
725   unsigned int known_align;
726   unsigned int actual_align;
727   unsigned int user_align;
728   /* The type of this field.  */
729   tree type = TREE_TYPE (field);
730
731   if (TREE_CODE (field) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
732       return;
733
734   /* If FIELD is static, then treat it like a separate variable, not
735      really like a structure field.  If it is a FUNCTION_DECL, it's a
736      method.  In both cases, all we do is lay out the decl, and we do
737      it *after* the record is laid out.  */
738   if (TREE_CODE (field) == VAR_DECL)
739     {
740       rli->pending_statics = tree_cons (NULL_TREE, field,
741                                         rli->pending_statics);
742       return;
743     }
744
745   /* Enumerators and enum types which are local to this class need not
746      be laid out.  Likewise for initialized constant fields.  */
747   else if (TREE_CODE (field) != FIELD_DECL)
748     return;
749
750   /* Unions are laid out very differently than records, so split
751      that code off to another function.  */
752   else if (TREE_CODE (rli->t) != RECORD_TYPE)
753     {
754       place_union_field (rli, field);
755       return;
756     }
757
758   /* Work out the known alignment so far.  Note that A & (-A) is the
759      value of the least-significant bit in A that is one.  */
760   if (! integer_zerop (rli->bitpos))
761     known_align = (tree_low_cst (rli->bitpos, 1)
762                    & - tree_low_cst (rli->bitpos, 1));
763   else if (integer_zerop (rli->offset))
764     known_align = BIGGEST_ALIGNMENT;
765   else if (host_integerp (rli->offset, 1))
766     known_align = (BITS_PER_UNIT
767                    * (tree_low_cst (rli->offset, 1)
768                       & - tree_low_cst (rli->offset, 1)));
769   else
770     known_align = rli->offset_align;
771
772   /* Lay out the field so we know what alignment it needs.  For a
773      packed field, use the alignment as specified, disregarding what
774      the type would want.  */
775   desired_align = DECL_ALIGN (field);
776   user_align = DECL_USER_ALIGN (field);
777   layout_decl (field, known_align);
778   if (! DECL_PACKED (field))
779     {
780       desired_align = DECL_ALIGN (field);
781       user_align = DECL_USER_ALIGN (field);
782     }
783
784   /* Some targets (i.e. i386, VMS) limit struct field alignment
785      to a lower boundary than alignment of variables unless
786      it was overridden by attribute aligned.  */
787 #ifdef BIGGEST_FIELD_ALIGNMENT
788   if (! user_align)
789     desired_align
790       = MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
791 #endif
792
793 #ifdef ADJUST_FIELD_ALIGN
794   if (! user_align)
795     desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
796 #endif
797
798   /* Record must have at least as much alignment as any field.
799      Otherwise, the alignment of the field within the record is
800      meaningless.  */
801   if ((* targetm.ms_bitfield_layout_p) (rli->t)
802       && type != error_mark_node
803       && DECL_BIT_FIELD_TYPE (field)
804       && ! integer_zerop (TYPE_SIZE (type))
805       && integer_zerop (DECL_SIZE (field)))
806     {
807       if (rli->prev_field
808           && DECL_BIT_FIELD_TYPE (rli->prev_field)
809           && ! integer_zerop (DECL_SIZE (rli->prev_field)))
810         {
811           rli->record_align = MAX (rli->record_align, desired_align);
812           rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
813         }
814       else
815         desired_align = 1;
816     }
817   else
818 #ifdef PCC_BITFIELD_TYPE_MATTERS
819   if (PCC_BITFIELD_TYPE_MATTERS && type != error_mark_node
820       && ! (* targetm.ms_bitfield_layout_p) (rli->t)
821       && DECL_BIT_FIELD_TYPE (field)
822       && ! integer_zerop (TYPE_SIZE (type)))
823     {
824       /* For these machines, a zero-length field does not
825          affect the alignment of the structure as a whole.
826          It does, however, affect the alignment of the next field
827          within the structure.  */
828       if (! integer_zerop (DECL_SIZE (field)))
829         rli->record_align = MAX (rli->record_align, desired_align);
830       else if (! DECL_PACKED (field))
831         desired_align = TYPE_ALIGN (type);
832
833       /* A named bit field of declared type `int'
834          forces the entire structure to have `int' alignment.  */
835       if (DECL_NAME (field) != 0)
836         {
837           unsigned int type_align = TYPE_ALIGN (type);
838
839 #ifdef ADJUST_FIELD_ALIGN
840           if (! TYPE_USER_ALIGN (type))
841             type_align = ADJUST_FIELD_ALIGN (field, type_align);
842 #endif
843
844           if (maximum_field_alignment != 0)
845             type_align = MIN (type_align, maximum_field_alignment);
846           else if (DECL_PACKED (field))
847             type_align = MIN (type_align, BITS_PER_UNIT);
848
849           rli->record_align = MAX (rli->record_align, type_align);
850           rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
851           if (warn_packed)
852             rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
853           user_align |= TYPE_USER_ALIGN (type);
854         }
855     }
856   else
857 #endif
858     {
859       rli->record_align = MAX (rli->record_align, desired_align);
860       rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
861       rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
862     }
863
864   if (warn_packed && DECL_PACKED (field))
865     {
866       if (known_align > TYPE_ALIGN (type))
867         {
868           if (TYPE_ALIGN (type) > desired_align)
869             {
870               if (STRICT_ALIGNMENT)
871                 warning_with_decl (field, "packed attribute causes inefficient alignment for `%s'");
872               else
873                 warning_with_decl (field, "packed attribute is unnecessary for `%s'");
874             }
875         }
876       else
877         rli->packed_maybe_necessary = 1;
878     }
879
880   /* Does this field automatically have alignment it needs by virtue
881      of the fields that precede it and the record's own alignment?  */
882   if (known_align < desired_align)
883     {
884       /* No, we need to skip space before this field.
885          Bump the cumulative size to multiple of field alignment.  */
886
887       if (warn_padded)
888         warning_with_decl (field, "padding struct to align `%s'");
889
890       /* If the alignment is still within offset_align, just align
891          the bit position.  */
892       if (desired_align < rli->offset_align)
893         rli->bitpos = round_up (rli->bitpos, desired_align);
894       else
895         {
896           /* First adjust OFFSET by the partial bits, then align.  */
897           rli->offset
898             = size_binop (PLUS_EXPR, rli->offset,
899                           convert (sizetype,
900                                    size_binop (CEIL_DIV_EXPR, rli->bitpos,
901                                                bitsize_unit_node)));
902           rli->bitpos = bitsize_zero_node;
903
904           rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
905         }
906
907       if (! TREE_CONSTANT (rli->offset))
908         rli->offset_align = desired_align;
909
910     }
911
912   /* Handle compatibility with PCC.  Note that if the record has any
913      variable-sized fields, we need not worry about compatibility.  */
914 #ifdef PCC_BITFIELD_TYPE_MATTERS
915   if (PCC_BITFIELD_TYPE_MATTERS
916       && ! (* targetm.ms_bitfield_layout_p) (rli->t)
917       && TREE_CODE (field) == FIELD_DECL
918       && type != error_mark_node
919       && DECL_BIT_FIELD (field)
920       && ! DECL_PACKED (field)
921       && maximum_field_alignment == 0
922       && ! integer_zerop (DECL_SIZE (field))
923       && host_integerp (DECL_SIZE (field), 1)
924       && host_integerp (rli->offset, 1)
925       && host_integerp (TYPE_SIZE (type), 1))
926     {
927       unsigned int type_align = TYPE_ALIGN (type);
928       tree dsize = DECL_SIZE (field);
929       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
930       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
931       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
932
933 #ifdef ADJUST_FIELD_ALIGN
934       if (! TYPE_USER_ALIGN (type))
935         type_align = ADJUST_FIELD_ALIGN (field, type_align);
936 #endif
937
938       /* A bit field may not span more units of alignment of its type
939          than its type itself.  Advance to next boundary if necessary.  */
940       if ((((offset * BITS_PER_UNIT + bit_offset + field_size +
941              type_align - 1)
942             / type_align)
943            - (offset * BITS_PER_UNIT + bit_offset) / type_align)
944           > tree_low_cst (TYPE_SIZE (type), 1) / type_align)
945         rli->bitpos = round_up (rli->bitpos, type_align);
946
947       user_align |= TYPE_USER_ALIGN (type);
948     }
949 #endif
950
951 #ifdef BITFIELD_NBYTES_LIMITED
952   if (BITFIELD_NBYTES_LIMITED
953       && ! (* targetm.ms_bitfield_layout_p) (rli->t)
954       && TREE_CODE (field) == FIELD_DECL
955       && type != error_mark_node
956       && DECL_BIT_FIELD_TYPE (field)
957       && ! DECL_PACKED (field)
958       && ! integer_zerop (DECL_SIZE (field))
959       && host_integerp (DECL_SIZE (field), 1)
960       && host_integerp (rli->offset, 1)
961       && host_integerp (TYPE_SIZE (type), 1))
962     {
963       unsigned int type_align = TYPE_ALIGN (type);
964       tree dsize = DECL_SIZE (field);
965       HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
966       HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
967       HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
968
969 #ifdef ADJUST_FIELD_ALIGN
970       if (! TYPE_USER_ALIGN (type))
971         type_align = ADJUST_FIELD_ALIGN (field, type_align);
972 #endif
973
974       if (maximum_field_alignment != 0)
975         type_align = MIN (type_align, maximum_field_alignment);
976       /* ??? This test is opposite the test in the containing if
977          statement, so this code is unreachable currently.  */
978       else if (DECL_PACKED (field))
979         type_align = MIN (type_align, BITS_PER_UNIT);
980
981       /* A bit field may not span the unit of alignment of its type.
982          Advance to next boundary if necessary.  */
983       /* ??? This code should match the code above for the
984          PCC_BITFIELD_TYPE_MATTERS case.  */
985       if ((offset * BITS_PER_UNIT + bit_offset) / type_align
986           != ((offset * BITS_PER_UNIT + bit_offset + field_size - 1)
987               / type_align))
988         rli->bitpos = round_up (rli->bitpos, type_align);
989
990       user_align |= TYPE_USER_ALIGN (type);
991     }
992 #endif
993
994   /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.  */
995   if ((* targetm.ms_bitfield_layout_p) (rli->t)
996       && TREE_CODE (field) == FIELD_DECL
997       && type != error_mark_node
998       && ! DECL_PACKED (field)
999       && rli->prev_field
1000       && DECL_SIZE (field)
1001       && host_integerp (DECL_SIZE (field), 1)
1002       && DECL_SIZE (rli->prev_field)
1003       && host_integerp (DECL_SIZE (rli->prev_field), 1)
1004       && host_integerp (rli->offset, 1)
1005       && host_integerp (TYPE_SIZE (type), 1)
1006       && host_integerp (TYPE_SIZE (TREE_TYPE (rli->prev_field)), 1)
1007       && ((DECL_BIT_FIELD_TYPE (rli->prev_field)
1008            && ! integer_zerop (DECL_SIZE (rli->prev_field)))
1009           || (DECL_BIT_FIELD_TYPE (field)
1010               && ! integer_zerop (DECL_SIZE (field))))
1011       && (! simple_cst_equal (TYPE_SIZE (type),
1012                               TYPE_SIZE (TREE_TYPE (rli->prev_field)))
1013           /* If the previous field was a zero-sized bit-field, either
1014              it was ignored, in which case we must ensure the proper
1015              alignment of this field here, or it already forced the
1016              alignment of this field, in which case forcing the
1017              alignment again is harmless.  So, do it in both cases.  */
1018           || (DECL_BIT_FIELD_TYPE (rli->prev_field)
1019               && integer_zerop (DECL_SIZE (rli->prev_field)))))
1020     {
1021       unsigned int type_align = TYPE_ALIGN (type);
1022
1023       if (rli->prev_field
1024           && DECL_BIT_FIELD_TYPE (rli->prev_field)
1025           /* If the previous bit-field is zero-sized, we've already
1026              accounted for its alignment needs (or ignored it, if
1027              appropriate) while placing it.  */
1028           && ! integer_zerop (DECL_SIZE (rli->prev_field)))
1029         type_align = MAX (type_align,
1030                           TYPE_ALIGN (TREE_TYPE (rli->prev_field)));
1031
1032       if (maximum_field_alignment != 0)
1033         type_align = MIN (type_align, maximum_field_alignment);
1034
1035       rli->bitpos = round_up (rli->bitpos, type_align);
1036     }
1037
1038   /* Offset so far becomes the position of this field after normalizing.  */
1039   normalize_rli (rli);
1040   DECL_FIELD_OFFSET (field) = rli->offset;
1041   DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1042   SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1043
1044   TYPE_USER_ALIGN (rli->t) |= user_align;
1045
1046   /* If this field ended up more aligned than we thought it would be (we
1047      approximate this by seeing if its position changed), lay out the field
1048      again; perhaps we can use an integral mode for it now.  */
1049   if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1050     actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1051                     & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1052   else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1053     actual_align = BIGGEST_ALIGNMENT;
1054   else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1055     actual_align = (BITS_PER_UNIT
1056                    * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1057                       & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1058   else
1059     actual_align = DECL_OFFSET_ALIGN (field);
1060
1061   if (known_align != actual_align)
1062     layout_decl (field, actual_align);
1063
1064   rli->prev_field = field;
1065
1066   /* Now add size of this field to the size of the record.  If the size is
1067      not constant, treat the field as being a multiple of bytes and just
1068      adjust the offset, resetting the bit position.  Otherwise, apportion the
1069      size amongst the bit position and offset.  First handle the case of an
1070      unspecified size, which can happen when we have an invalid nested struct
1071      definition, such as struct j { struct j { int i; } }.  The error message
1072      is printed in finish_struct.  */
1073   if (DECL_SIZE (field) == 0)
1074     /* Do nothing.  */;
1075   else if (TREE_CODE (DECL_SIZE_UNIT (field)) != INTEGER_CST
1076            || TREE_CONSTANT_OVERFLOW (DECL_SIZE_UNIT (field)))
1077     {
1078       rli->offset
1079         = size_binop (PLUS_EXPR, rli->offset,
1080                       convert (sizetype,
1081                                size_binop (CEIL_DIV_EXPR, rli->bitpos,
1082                                            bitsize_unit_node)));
1083       rli->offset
1084         = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1085       rli->bitpos = bitsize_zero_node;
1086       rli->offset_align = MIN (rli->offset_align, DECL_ALIGN (field));
1087     }
1088   else
1089     {
1090       rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1091       normalize_rli (rli);
1092     }
1093 }
1094
1095 /* Assuming that all the fields have been laid out, this function uses
1096    RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1097    inidicated by RLI.  */
1098
1099 static void
1100 finalize_record_size (rli)
1101      record_layout_info rli;
1102 {
1103   tree unpadded_size, unpadded_size_unit;
1104
1105   /* Now we want just byte and bit offsets, so set the offset alignment
1106      to be a byte and then normalize.  */
1107   rli->offset_align = BITS_PER_UNIT;
1108   normalize_rli (rli);
1109
1110   /* Determine the desired alignment.  */
1111 #ifdef ROUND_TYPE_ALIGN
1112   TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1113                                           rli->record_align);
1114 #else
1115   TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1116 #endif
1117
1118   /* Compute the size so far.  Be sure to allow for extra bits in the
1119      size in bytes.  We have guaranteed above that it will be no more
1120      than a single byte.  */
1121   unpadded_size = rli_size_so_far (rli);
1122   unpadded_size_unit = rli_size_unit_so_far (rli);
1123   if (! integer_zerop (rli->bitpos))
1124     unpadded_size_unit
1125       = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1126
1127   /* Record the un-rounded size in the binfo node.  But first we check
1128      the size of TYPE_BINFO to make sure that BINFO_SIZE is available.  */
1129   if (TYPE_BINFO (rli->t) && TREE_VEC_LENGTH (TYPE_BINFO (rli->t)) > 6)
1130     {
1131       TYPE_BINFO_SIZE (rli->t) = unpadded_size;
1132       TYPE_BINFO_SIZE_UNIT (rli->t) = unpadded_size_unit;
1133     }
1134
1135     /* Round the size up to be a multiple of the required alignment */
1136 #ifdef ROUND_TYPE_SIZE
1137   TYPE_SIZE (rli->t) = ROUND_TYPE_SIZE (rli->t, unpadded_size,
1138                                         TYPE_ALIGN (rli->t));
1139   TYPE_SIZE_UNIT (rli->t)
1140     = ROUND_TYPE_SIZE_UNIT (rli->t, unpadded_size_unit,
1141                             TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
1142 #else
1143   TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1144   TYPE_SIZE_UNIT (rli->t) = round_up (unpadded_size_unit,
1145                                       TYPE_ALIGN (rli->t) / BITS_PER_UNIT);
1146 #endif
1147
1148   if (warn_padded && TREE_CONSTANT (unpadded_size)
1149       && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0)
1150     warning ("padding struct size to alignment boundary");
1151
1152   if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1153       && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1154       && TREE_CONSTANT (unpadded_size))
1155     {
1156       tree unpacked_size;
1157
1158 #ifdef ROUND_TYPE_ALIGN
1159       rli->unpacked_align
1160         = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1161 #else
1162       rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1163 #endif
1164
1165 #ifdef ROUND_TYPE_SIZE
1166       unpacked_size = ROUND_TYPE_SIZE (rli->t, TYPE_SIZE (rli->t),
1167                                        rli->unpacked_align);
1168 #else
1169       unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1170 #endif
1171
1172       if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1173         {
1174           TYPE_PACKED (rli->t) = 0;
1175
1176           if (TYPE_NAME (rli->t))
1177             {
1178               const char *name;
1179
1180               if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1181                 name = IDENTIFIER_POINTER (TYPE_NAME (rli->t));
1182               else
1183                 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t)));
1184
1185               if (STRICT_ALIGNMENT)
1186                 warning ("packed attribute causes inefficient alignment for `%s'", name);
1187               else
1188                 warning ("packed attribute is unnecessary for `%s'", name);
1189             }
1190           else
1191             {
1192               if (STRICT_ALIGNMENT)
1193                 warning ("packed attribute causes inefficient alignment");
1194               else
1195                 warning ("packed attribute is unnecessary");
1196             }
1197         }
1198     }
1199 }
1200
1201 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE).  */
1202
1203 void
1204 compute_record_mode (type)
1205      tree type;
1206 {
1207   tree field;
1208   enum machine_mode mode = VOIDmode;
1209
1210   /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1211      However, if possible, we use a mode that fits in a register
1212      instead, in order to allow for better optimization down the
1213      line.  */
1214   TYPE_MODE (type) = BLKmode;
1215
1216   if (! host_integerp (TYPE_SIZE (type), 1))
1217     return;
1218
1219   /* A record which has any BLKmode members must itself be
1220      BLKmode; it can't go in a register.  Unless the member is
1221      BLKmode only because it isn't aligned.  */
1222   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1223     {
1224       unsigned HOST_WIDE_INT bitpos;
1225
1226       if (TREE_CODE (field) != FIELD_DECL)
1227         continue;
1228
1229       if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1230           || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1231               && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field)))
1232           || ! host_integerp (bit_position (field), 1)
1233           || DECL_SIZE (field) == 0
1234           || ! host_integerp (DECL_SIZE (field), 1))
1235         return;
1236
1237       bitpos = int_bit_position (field);
1238
1239       /* Must be BLKmode if any field crosses a word boundary,
1240          since extract_bit_field can't handle that in registers.  */
1241       if (bitpos / BITS_PER_WORD
1242           != ((tree_low_cst (DECL_SIZE (field), 1) + bitpos - 1)
1243               / BITS_PER_WORD)
1244           /* But there is no problem if the field is entire words.  */
1245           && tree_low_cst (DECL_SIZE (field), 1) % BITS_PER_WORD != 0)
1246         return;
1247
1248       /* If this field is the whole struct, remember its mode so
1249          that, say, we can put a double in a class into a DF
1250          register instead of forcing it to live in the stack.  */
1251       if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1252         mode = DECL_MODE (field);
1253
1254 #ifdef MEMBER_TYPE_FORCES_BLK
1255       /* With some targets, eg. c4x, it is sub-optimal
1256          to access an aligned BLKmode structure as a scalar.  */
1257
1258       if (MEMBER_TYPE_FORCES_BLK (field, mode))
1259         return;
1260 #endif /* MEMBER_TYPE_FORCES_BLK  */
1261     }
1262
1263   /* If we only have one real field; use its mode.  This only applies to
1264      RECORD_TYPE.  This does not apply to unions.  */
1265   if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode)
1266     TYPE_MODE (type) = mode;
1267   else
1268     TYPE_MODE (type) = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1269
1270   /* If structure's known alignment is less than what the scalar
1271      mode would need, and it matters, then stick with BLKmode.  */
1272   if (TYPE_MODE (type) != BLKmode
1273       && STRICT_ALIGNMENT
1274       && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1275             || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1276     {
1277       /* If this is the only reason this type is BLKmode, then
1278          don't force containing types to be BLKmode.  */
1279       TYPE_NO_FORCE_BLK (type) = 1;
1280       TYPE_MODE (type) = BLKmode;
1281     }
1282 }
1283
1284 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1285    out.  */
1286
1287 static void
1288 finalize_type_size (type)
1289      tree type;
1290 {
1291   /* Normally, use the alignment corresponding to the mode chosen.
1292      However, where strict alignment is not required, avoid
1293      over-aligning structures, since most compilers do not do this
1294      alignment.  */
1295
1296   if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1297       && (STRICT_ALIGNMENT
1298           || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1299               && TREE_CODE (type) != QUAL_UNION_TYPE
1300               && TREE_CODE (type) != ARRAY_TYPE)))
1301     {
1302       TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1303       TYPE_USER_ALIGN (type) = 0;
1304     }
1305
1306   /* Do machine-dependent extra alignment.  */
1307 #ifdef ROUND_TYPE_ALIGN
1308   TYPE_ALIGN (type)
1309     = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1310 #endif
1311
1312   /* If we failed to find a simple way to calculate the unit size
1313      of the type, find it by division.  */
1314   if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1315     /* TYPE_SIZE (type) is computed in bitsizetype.  After the division, the
1316        result will fit in sizetype.  We will get more efficient code using
1317        sizetype, so we force a conversion.  */
1318     TYPE_SIZE_UNIT (type)
1319       = convert (sizetype,
1320                  size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1321                              bitsize_unit_node));
1322
1323   if (TYPE_SIZE (type) != 0)
1324     {
1325 #ifdef ROUND_TYPE_SIZE
1326       TYPE_SIZE (type)
1327         = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1328       TYPE_SIZE_UNIT (type)
1329         = ROUND_TYPE_SIZE_UNIT (type, TYPE_SIZE_UNIT (type),
1330                                 TYPE_ALIGN (type) / BITS_PER_UNIT);
1331 #else
1332       TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1333       TYPE_SIZE_UNIT (type)
1334         = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type) / BITS_PER_UNIT);
1335 #endif
1336     }
1337
1338   /* Evaluate nonconstant sizes only once, either now or as soon as safe.  */
1339   if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1340     TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1341   if (TYPE_SIZE_UNIT (type) != 0
1342       && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1343     TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1344
1345   /* Also layout any other variants of the type.  */
1346   if (TYPE_NEXT_VARIANT (type)
1347       || type != TYPE_MAIN_VARIANT (type))
1348     {
1349       tree variant;
1350       /* Record layout info of this variant.  */
1351       tree size = TYPE_SIZE (type);
1352       tree size_unit = TYPE_SIZE_UNIT (type);
1353       unsigned int align = TYPE_ALIGN (type);
1354       unsigned int user_align = TYPE_USER_ALIGN (type);
1355       enum machine_mode mode = TYPE_MODE (type);
1356
1357       /* Copy it into all variants.  */
1358       for (variant = TYPE_MAIN_VARIANT (type);
1359            variant != 0;
1360            variant = TYPE_NEXT_VARIANT (variant))
1361         {
1362           TYPE_SIZE (variant) = size;
1363           TYPE_SIZE_UNIT (variant) = size_unit;
1364           TYPE_ALIGN (variant) = align;
1365           TYPE_USER_ALIGN (variant) = user_align;
1366           TYPE_MODE (variant) = mode;
1367         }
1368     }
1369 }
1370
1371 /* Do all of the work required to layout the type indicated by RLI,
1372    once the fields have been laid out.  This function will call `free'
1373    for RLI.  */
1374
1375 void
1376 finish_record_layout (rli)
1377      record_layout_info rli;
1378 {
1379   /* Compute the final size.  */
1380   finalize_record_size (rli);
1381
1382   /* Compute the TYPE_MODE for the record.  */
1383   compute_record_mode (rli->t);
1384
1385   /* Perform any last tweaks to the TYPE_SIZE, etc.  */
1386   finalize_type_size (rli->t);
1387
1388   /* Lay out any static members.  This is done now because their type
1389      may use the record's type.  */
1390   while (rli->pending_statics)
1391     {
1392       layout_decl (TREE_VALUE (rli->pending_statics), 0);
1393       rli->pending_statics = TREE_CHAIN (rli->pending_statics);
1394     }
1395
1396   /* Clean up.  */
1397   free (rli);
1398 }
1399 \f
1400 /* Calculate the mode, size, and alignment for TYPE.
1401    For an array type, calculate the element separation as well.
1402    Record TYPE on the chain of permanent or temporary types
1403    so that dbxout will find out about it.
1404
1405    TYPE_SIZE of a type is nonzero if the type has been laid out already.
1406    layout_type does nothing on such a type.
1407
1408    If the type is incomplete, its TYPE_SIZE remains zero.  */
1409
1410 void
1411 layout_type (type)
1412      tree type;
1413 {
1414   if (type == 0)
1415     abort ();
1416
1417   /* Do nothing if type has been laid out before.  */
1418   if (TYPE_SIZE (type))
1419     return;
1420
1421   switch (TREE_CODE (type))
1422     {
1423     case LANG_TYPE:
1424       /* This kind of type is the responsibility
1425          of the language-specific code.  */
1426       abort ();
1427
1428     case BOOLEAN_TYPE:  /* Used for Java, Pascal, and Chill.  */
1429       if (TYPE_PRECISION (type) == 0)
1430         TYPE_PRECISION (type) = 1; /* default to one byte/boolean.  */
1431
1432       /* ... fall through ...  */
1433
1434     case INTEGER_TYPE:
1435     case ENUMERAL_TYPE:
1436     case CHAR_TYPE:
1437       if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
1438           && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
1439         TREE_UNSIGNED (type) = 1;
1440
1441       TYPE_MODE (type) = smallest_mode_for_size (TYPE_PRECISION (type),
1442                                                  MODE_INT);
1443       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1444       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1445       break;
1446
1447     case REAL_TYPE:
1448       TYPE_MODE (type) = mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0);
1449       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1450       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1451       break;
1452
1453     case COMPLEX_TYPE:
1454       TREE_UNSIGNED (type) = TREE_UNSIGNED (TREE_TYPE (type));
1455       TYPE_MODE (type)
1456         = mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
1457                          (TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE
1458                           ? MODE_COMPLEX_INT : MODE_COMPLEX_FLOAT),
1459                          0);
1460       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1461       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1462       break;
1463
1464     case VECTOR_TYPE:
1465       {
1466         tree subtype;
1467
1468         subtype = TREE_TYPE (type);
1469         TREE_UNSIGNED (type) = TREE_UNSIGNED (subtype);
1470         TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
1471         TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
1472       }
1473       break;
1474
1475     case VOID_TYPE:
1476       /* This is an incomplete type and so doesn't have a size.  */
1477       TYPE_ALIGN (type) = 1;
1478       TYPE_USER_ALIGN (type) = 0;
1479       TYPE_MODE (type) = VOIDmode;
1480       break;
1481
1482     case OFFSET_TYPE:
1483       TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
1484       TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
1485       /* A pointer might be MODE_PARTIAL_INT,
1486          but ptrdiff_t must be integral.  */
1487       TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0);
1488       break;
1489
1490     case FUNCTION_TYPE:
1491     case METHOD_TYPE:
1492       TYPE_MODE (type) = mode_for_size (2 * POINTER_SIZE, MODE_INT, 0);
1493       TYPE_SIZE (type) = bitsize_int (2 * POINTER_SIZE);
1494       TYPE_SIZE_UNIT (type) = size_int ((2 * POINTER_SIZE) / BITS_PER_UNIT);
1495       break;
1496
1497     case POINTER_TYPE:
1498     case REFERENCE_TYPE:
1499       {
1500         int nbits = ((TREE_CODE (type) == REFERENCE_TYPE
1501                       && reference_types_internal)
1502                      ? GET_MODE_BITSIZE (Pmode) : POINTER_SIZE);
1503
1504         TYPE_MODE (type) = nbits == POINTER_SIZE ? ptr_mode : Pmode;
1505         TYPE_SIZE (type) = bitsize_int (nbits);
1506         TYPE_SIZE_UNIT (type) = size_int (nbits / BITS_PER_UNIT);
1507         TREE_UNSIGNED (type) = 1;
1508         TYPE_PRECISION (type) = nbits;
1509       }
1510       break;
1511
1512     case ARRAY_TYPE:
1513       {
1514         tree index = TYPE_DOMAIN (type);
1515         tree element = TREE_TYPE (type);
1516
1517         build_pointer_type (element);
1518
1519         /* We need to know both bounds in order to compute the size.  */
1520         if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
1521             && TYPE_SIZE (element))
1522           {
1523             tree ub = TYPE_MAX_VALUE (index);
1524             tree lb = TYPE_MIN_VALUE (index);
1525             tree length;
1526             tree element_size;
1527
1528             /* The initial subtraction should happen in the original type so
1529                that (possible) negative values are handled appropriately.  */
1530             length = size_binop (PLUS_EXPR, size_one_node,
1531                                  convert (sizetype,
1532                                           fold (build (MINUS_EXPR,
1533                                                        TREE_TYPE (lb),
1534                                                        ub, lb))));
1535
1536             /* Special handling for arrays of bits (for Chill).  */
1537             element_size = TYPE_SIZE (element);
1538             if (TYPE_PACKED (type) && INTEGRAL_TYPE_P (element)
1539                 && (integer_zerop (TYPE_MAX_VALUE (element))
1540                     || integer_onep (TYPE_MAX_VALUE (element)))
1541                 && host_integerp (TYPE_MIN_VALUE (element), 1))
1542               {
1543                 HOST_WIDE_INT maxvalue
1544                   = tree_low_cst (TYPE_MAX_VALUE (element), 1);
1545                 HOST_WIDE_INT minvalue
1546                   = tree_low_cst (TYPE_MIN_VALUE (element), 1);
1547
1548                 if (maxvalue - minvalue == 1
1549                     && (maxvalue == 1 || maxvalue == 0))
1550                   element_size = integer_one_node;
1551               }
1552
1553             TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
1554                                            convert (bitsizetype, length));
1555
1556             /* If we know the size of the element, calculate the total
1557                size directly, rather than do some division thing below.
1558                This optimization helps Fortran assumed-size arrays
1559                (where the size of the array is determined at runtime)
1560                substantially.
1561                Note that we can't do this in the case where the size of
1562                the elements is one bit since TYPE_SIZE_UNIT cannot be
1563                set correctly in that case.  */
1564             if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
1565               TYPE_SIZE_UNIT (type)
1566                 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
1567           }
1568
1569         /* Now round the alignment and size,
1570            using machine-dependent criteria if any.  */
1571
1572 #ifdef ROUND_TYPE_ALIGN
1573         TYPE_ALIGN (type)
1574           = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
1575 #else
1576         TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1577 #endif
1578         TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
1579
1580 #ifdef ROUND_TYPE_SIZE
1581         if (TYPE_SIZE (type) != 0)
1582           {
1583             tree tmp
1584               = ROUND_TYPE_SIZE (type, TYPE_SIZE (type), TYPE_ALIGN (type));
1585
1586             /* If the rounding changed the size of the type, remove any
1587                pre-calculated TYPE_SIZE_UNIT.  */
1588             if (simple_cst_equal (TYPE_SIZE (type), tmp) != 1)
1589               TYPE_SIZE_UNIT (type) = NULL;
1590
1591             TYPE_SIZE (type) = tmp;
1592           }
1593 #endif
1594
1595         TYPE_MODE (type) = BLKmode;
1596         if (TYPE_SIZE (type) != 0
1597 #ifdef MEMBER_TYPE_FORCES_BLK
1598             && ! MEMBER_TYPE_FORCES_BLK (type, VOIDmode)
1599 #endif
1600             /* BLKmode elements force BLKmode aggregate;
1601                else extract/store fields may lose.  */
1602             && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
1603                 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
1604           {
1605             /* One-element arrays get the component type's mode.  */
1606             if (simple_cst_equal (TYPE_SIZE (type),
1607                                   TYPE_SIZE (TREE_TYPE (type))))
1608               TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type));
1609             else
1610               TYPE_MODE (type)
1611                 = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1);
1612
1613             if (TYPE_MODE (type) != BLKmode
1614                 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
1615                 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type))
1616                 && TYPE_MODE (type) != BLKmode)
1617               {
1618                 TYPE_NO_FORCE_BLK (type) = 1;
1619                 TYPE_MODE (type) = BLKmode;
1620               }
1621           }
1622         break;
1623       }
1624
1625     case RECORD_TYPE:
1626     case UNION_TYPE:
1627     case QUAL_UNION_TYPE:
1628       {
1629         tree field;
1630         record_layout_info rli;
1631
1632         /* Initialize the layout information.  */
1633         rli = start_record_layout (type);
1634
1635         /* If this is a QUAL_UNION_TYPE, we want to process the fields
1636            in the reverse order in building the COND_EXPR that denotes
1637            its size.  We reverse them again later.  */
1638         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1639           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1640
1641         /* Place all the fields.  */
1642         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1643           place_field (rli, field);
1644
1645         if (TREE_CODE (type) == QUAL_UNION_TYPE)
1646           TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
1647
1648         if (lang_adjust_rli)
1649           (*lang_adjust_rli) (rli);
1650
1651         /* Finish laying out the record.  */
1652         finish_record_layout (rli);
1653       }
1654       break;
1655
1656     case SET_TYPE:  /* Used by Chill and Pascal.  */
1657       if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
1658           || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
1659         abort ();
1660       else
1661         {
1662 #ifndef SET_WORD_SIZE
1663 #define SET_WORD_SIZE BITS_PER_WORD
1664 #endif
1665           unsigned int alignment
1666             = set_alignment ? set_alignment : SET_WORD_SIZE;
1667           int size_in_bits
1668             = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
1669                - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1);
1670           int rounded_size
1671             = ((size_in_bits + alignment - 1) / alignment) * alignment;
1672
1673           if (rounded_size > (int) alignment)
1674             TYPE_MODE (type) = BLKmode;
1675           else
1676             TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1);
1677
1678           TYPE_SIZE (type) = bitsize_int (rounded_size);
1679           TYPE_SIZE_UNIT (type) = size_int (rounded_size / BITS_PER_UNIT);
1680           TYPE_ALIGN (type) = alignment;
1681           TYPE_USER_ALIGN (type) = 0;
1682           TYPE_PRECISION (type) = size_in_bits;
1683         }
1684       break;
1685
1686     case FILE_TYPE:
1687       /* The size may vary in different languages, so the language front end
1688          should fill in the size.  */
1689       TYPE_ALIGN (type) = BIGGEST_ALIGNMENT;
1690       TYPE_USER_ALIGN (type) = 0;
1691       TYPE_MODE  (type) = BLKmode;
1692       break;
1693
1694     default:
1695       abort ();
1696     }
1697
1698   /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE.  For
1699      records and unions, finish_record_layout already called this
1700      function.  */
1701   if (TREE_CODE (type) != RECORD_TYPE
1702       && TREE_CODE (type) != UNION_TYPE
1703       && TREE_CODE (type) != QUAL_UNION_TYPE)
1704     finalize_type_size (type);
1705
1706   /* If this type is created before sizetype has been permanently set,
1707      record it so set_sizetype can fix it up.  */
1708   if (! sizetype_set)
1709     early_type_list = tree_cons (NULL_TREE, type, early_type_list);
1710
1711   /* If an alias set has been set for this aggregate when it was incomplete,
1712      force it into alias set 0.
1713      This is too conservative, but we cannot call record_component_aliases
1714      here because some frontends still change the aggregates after
1715      layout_type.  */
1716   if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
1717     TYPE_ALIAS_SET (type) = 0;
1718 }
1719 \f
1720 /* Create and return a type for signed integers of PRECISION bits.  */
1721
1722 tree
1723 make_signed_type (precision)
1724      int precision;
1725 {
1726   tree type = make_node (INTEGER_TYPE);
1727
1728   TYPE_PRECISION (type) = precision;
1729
1730   fixup_signed_type (type);
1731   return type;
1732 }
1733
1734 /* Create and return a type for unsigned integers of PRECISION bits.  */
1735
1736 tree
1737 make_unsigned_type (precision)
1738      int precision;
1739 {
1740   tree type = make_node (INTEGER_TYPE);
1741
1742   TYPE_PRECISION (type) = precision;
1743
1744   fixup_unsigned_type (type);
1745   return type;
1746 }
1747 \f
1748 /* Initialize sizetype and bitsizetype to a reasonable and temporary
1749    value to enable integer types to be created.  */
1750
1751 void
1752 initialize_sizetypes ()
1753 {
1754   tree t = make_node (INTEGER_TYPE);
1755
1756   /* Set this so we do something reasonable for the build_int_2 calls
1757      below.  */
1758   integer_type_node = t;
1759
1760   TYPE_MODE (t) = SImode;
1761   TYPE_ALIGN (t) = GET_MODE_ALIGNMENT (SImode);
1762   TYPE_USER_ALIGN (t) = 0;
1763   TYPE_SIZE (t) = build_int_2 (GET_MODE_BITSIZE (SImode), 0);
1764   TYPE_SIZE_UNIT (t) = build_int_2 (GET_MODE_SIZE (SImode), 0);
1765   TREE_UNSIGNED (t) = 1;
1766   TYPE_PRECISION (t) = GET_MODE_BITSIZE (SImode);
1767   TYPE_MIN_VALUE (t) = build_int_2 (0, 0);
1768   TYPE_IS_SIZETYPE (t) = 1;
1769
1770   /* 1000 avoids problems with possible overflow and is certainly
1771      larger than any size value we'd want to be storing.  */
1772   TYPE_MAX_VALUE (t) = build_int_2 (1000, 0);
1773
1774   /* These two must be different nodes because of the caching done in
1775      size_int_wide.  */
1776   sizetype = t;
1777   bitsizetype = copy_node (t);
1778   integer_type_node = 0;
1779 }
1780
1781 /* Set sizetype to TYPE, and initialize *sizetype accordingly.
1782    Also update the type of any standard type's sizes made so far.  */
1783
1784 void
1785 set_sizetype (type)
1786      tree type;
1787 {
1788   int oprecision = TYPE_PRECISION (type);
1789   /* The *bitsizetype types use a precision that avoids overflows when
1790      calculating signed sizes / offsets in bits.  However, when
1791      cross-compiling from a 32 bit to a 64 bit host, we are limited to 64 bit
1792      precision.  */
1793   int precision = MIN (oprecision + BITS_PER_UNIT_LOG + 1,
1794                        2 * HOST_BITS_PER_WIDE_INT);
1795   unsigned int i;
1796   tree t;
1797
1798   if (sizetype_set)
1799     abort ();
1800
1801   /* Make copies of nodes since we'll be setting TYPE_IS_SIZETYPE.  */
1802   sizetype = copy_node (type);
1803   TYPE_DOMAIN (sizetype) = type;
1804   TYPE_IS_SIZETYPE (sizetype) = 1;
1805   bitsizetype = make_node (INTEGER_TYPE);
1806   TYPE_NAME (bitsizetype) = TYPE_NAME (type);
1807   TYPE_PRECISION (bitsizetype) = precision;
1808   TYPE_IS_SIZETYPE (bitsizetype) = 1;
1809
1810   if (TREE_UNSIGNED (type))
1811     fixup_unsigned_type (bitsizetype);
1812   else
1813     fixup_signed_type (bitsizetype);
1814
1815   layout_type (bitsizetype);
1816
1817   if (TREE_UNSIGNED (type))
1818     {
1819       usizetype = sizetype;
1820       ubitsizetype = bitsizetype;
1821       ssizetype = copy_node (make_signed_type (oprecision));
1822       sbitsizetype = copy_node (make_signed_type (precision));
1823     }
1824   else
1825     {
1826       ssizetype = sizetype;
1827       sbitsizetype = bitsizetype;
1828       usizetype = copy_node (make_unsigned_type (oprecision));
1829       ubitsizetype = copy_node (make_unsigned_type (precision));
1830     }
1831
1832   TYPE_NAME (bitsizetype) = get_identifier ("bit_size_type");
1833
1834   /* Show is a sizetype, is a main type, and has no pointers to it.  */
1835   for (i = 0; i < ARRAY_SIZE (sizetype_tab); i++)
1836     {
1837       TYPE_IS_SIZETYPE (sizetype_tab[i]) = 1;
1838       TYPE_MAIN_VARIANT (sizetype_tab[i]) = sizetype_tab[i];
1839       TYPE_NEXT_VARIANT (sizetype_tab[i]) = 0;
1840       TYPE_POINTER_TO (sizetype_tab[i]) = 0;
1841       TYPE_REFERENCE_TO (sizetype_tab[i]) = 0;
1842     }
1843
1844   /* Go down each of the types we already made and set the proper type
1845      for the sizes in them.  */
1846   for (t = early_type_list; t != 0; t = TREE_CHAIN (t))
1847     {
1848       if (TREE_CODE (TREE_VALUE (t)) != INTEGER_TYPE)
1849         abort ();
1850
1851       TREE_TYPE (TYPE_SIZE (TREE_VALUE (t))) = bitsizetype;
1852       TREE_TYPE (TYPE_SIZE_UNIT (TREE_VALUE (t))) = sizetype;
1853     }
1854
1855   early_type_list = 0;
1856   sizetype_set = 1;
1857 }
1858 \f
1859 /* Set the extreme values of TYPE based on its precision in bits,
1860    then lay it out.  Used when make_signed_type won't do
1861    because the tree code is not INTEGER_TYPE.
1862    E.g. for Pascal, when the -fsigned-char option is given.  */
1863
1864 void
1865 fixup_signed_type (type)
1866      tree type;
1867 {
1868   int precision = TYPE_PRECISION (type);
1869
1870   /* We can not represent properly constants greater then
1871      2 * HOST_BITS_PER_WIDE_INT, still we need the types
1872      as they are used by i386 vector extensions and friends.  */
1873   if (precision > HOST_BITS_PER_WIDE_INT * 2)
1874     precision = HOST_BITS_PER_WIDE_INT * 2;
1875
1876   TYPE_MIN_VALUE (type)
1877     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1878                     ? 0 : (HOST_WIDE_INT) (-1) << (precision - 1)),
1879                    (((HOST_WIDE_INT) (-1)
1880                      << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1881                          ? precision - HOST_BITS_PER_WIDE_INT - 1
1882                          : 0))));
1883   TYPE_MAX_VALUE (type)
1884     = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0
1885                     ? -1 : ((HOST_WIDE_INT) 1 << (precision - 1)) - 1),
1886                    (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
1887                     ? (((HOST_WIDE_INT) 1
1888                         << (precision - HOST_BITS_PER_WIDE_INT - 1))) - 1
1889                     : 0));
1890
1891   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1892   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1893
1894   /* Lay out the type: set its alignment, size, etc.  */
1895   layout_type (type);
1896 }
1897
1898 /* Set the extreme values of TYPE based on its precision in bits,
1899    then lay it out.  This is used both in `make_unsigned_type'
1900    and for enumeral types.  */
1901
1902 void
1903 fixup_unsigned_type (type)
1904      tree type;
1905 {
1906   int precision = TYPE_PRECISION (type);
1907
1908   /* We can not represent properly constants greater then
1909      2 * HOST_BITS_PER_WIDE_INT, still we need the types
1910      as they are used by i386 vector extensions and friends.  */
1911   if (precision > HOST_BITS_PER_WIDE_INT * 2)
1912     precision = HOST_BITS_PER_WIDE_INT * 2;
1913
1914   TYPE_MIN_VALUE (type) = build_int_2 (0, 0);
1915   TYPE_MAX_VALUE (type)
1916     = build_int_2 (precision - HOST_BITS_PER_WIDE_INT >= 0
1917                    ? -1 : ((HOST_WIDE_INT) 1 << precision) - 1,
1918                    precision - HOST_BITS_PER_WIDE_INT > 0
1919                    ? ((unsigned HOST_WIDE_INT) ~0
1920                       >> (HOST_BITS_PER_WIDE_INT
1921                           - (precision - HOST_BITS_PER_WIDE_INT)))
1922                    : 0);
1923   TREE_TYPE (TYPE_MIN_VALUE (type)) = type;
1924   TREE_TYPE (TYPE_MAX_VALUE (type)) = type;
1925
1926   /* Lay out the type: set its alignment, size, etc.  */
1927   layout_type (type);
1928 }
1929 \f
1930 /* Find the best machine mode to use when referencing a bit field of length
1931    BITSIZE bits starting at BITPOS.
1932
1933    The underlying object is known to be aligned to a boundary of ALIGN bits.
1934    If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
1935    larger than LARGEST_MODE (usually SImode).
1936
1937    If no mode meets all these conditions, we return VOIDmode.  Otherwise, if
1938    VOLATILEP is true or SLOW_BYTE_ACCESS is false, we return the smallest
1939    mode meeting these conditions.
1940
1941    Otherwise (VOLATILEP is false and SLOW_BYTE_ACCESS is true), we return
1942    the largest mode (but a mode no wider than UNITS_PER_WORD) that meets
1943    all the conditions.  */
1944
1945 enum machine_mode
1946 get_best_mode (bitsize, bitpos, align, largest_mode, volatilep)
1947      int bitsize, bitpos;
1948      unsigned int align;
1949      enum machine_mode largest_mode;
1950      int volatilep;
1951 {
1952   enum machine_mode mode;
1953   unsigned int unit = 0;
1954
1955   /* Find the narrowest integer mode that contains the bit field.  */
1956   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1957        mode = GET_MODE_WIDER_MODE (mode))
1958     {
1959       unit = GET_MODE_BITSIZE (mode);
1960       if ((bitpos % unit) + bitsize <= unit)
1961         break;
1962     }
1963
1964   if (mode == VOIDmode
1965       /* It is tempting to omit the following line
1966          if STRICT_ALIGNMENT is true.
1967          But that is incorrect, since if the bitfield uses part of 3 bytes
1968          and we use a 4-byte mode, we could get a spurious segv
1969          if the extra 4th byte is past the end of memory.
1970          (Though at least one Unix compiler ignores this problem:
1971          that on the Sequent 386 machine.  */
1972       || MIN (unit, BIGGEST_ALIGNMENT) > align
1973       || (largest_mode != VOIDmode && unit > GET_MODE_BITSIZE (largest_mode)))
1974     return VOIDmode;
1975
1976   if (SLOW_BYTE_ACCESS && ! volatilep)
1977     {
1978       enum machine_mode wide_mode = VOIDmode, tmode;
1979
1980       for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmode != VOIDmode;
1981            tmode = GET_MODE_WIDER_MODE (tmode))
1982         {
1983           unit = GET_MODE_BITSIZE (tmode);
1984           if (bitpos / unit == (bitpos + bitsize - 1) / unit
1985               && unit <= BITS_PER_WORD
1986               && unit <= MIN (align, BIGGEST_ALIGNMENT)
1987               && (largest_mode == VOIDmode
1988                   || unit <= GET_MODE_BITSIZE (largest_mode)))
1989             wide_mode = tmode;
1990         }
1991
1992       if (wide_mode != VOIDmode)
1993         return wide_mode;
1994     }
1995
1996   return mode;
1997 }
1998
1999 #include "gt-stor-layout.h"